postgreSQLで更新後のデータを取得したい。
初めて質問させていただきます。
postgreSQLでupdateした後、更新後のデータをselectで取得したいのですが、
トランザクションが完了するまでにselect文が発行されているみたいで、更新前のデータを取得してしまいます。
それぞれ、違うファイルから投げられているので、同じトランザクションにすることはできません。
何かいい方法があればご教授お願いします。
a.phpで下記のSQLを発行
update
test_tbl
set
test1 = 'aaa'
where
test2 = 'bbb'
a.phpが走っている間に、下記のb.phpが実行される。
select
test1
from
test_tbl
環境
php5
postgres8.1
No.2ベストアンサー
- 回答日時:
2個提案します。
1.Aでupdateする前にcvs形式でファイル保存して、Bではselectせずにcvsを見に行く。
ただ、1レコードならいいですけど、膨大なレコードの場合
考え物だと思います。
2.Bでselectする時にFOR UPDATEをつければAが更新中だったら
更新が終わるのを待ってからselect出来ると思います。
ただ、Aが数秒おきに行われるということなので、
Bのselectが終わったらすぐにロックを解除しないとAが数秒間
止まる可能性を考えなければなりません。
回答ありがとうございます。
2の方は既に試したのですが、できませんでした。
1の方でやってみたいと思います。
ありがとうございました。
No.3
- 回答日時:
定期的なUPDATEの自動処理はあまりお勧めできませんね・・。
何か別の方法で代用することは不可能なのでしょうか?
トランザクションがかかっているテーブルを引っ張る(別トランザクションをかける)こと自体、トランザクションの概念に反しています。
ちなみにトランザクションはどのレベルでしょう。
http://www.postgresql.jp/document/pg800doc/html/ …
こちらを参考に補足いただければと思います。
No.1
- 回答日時:
phpの内部処理がわからないので答えようがないです。
トランザクション云々以前に、一回のDB接続処理内で二つのSQLを発行してしまっているのではありませんか?
【ファンクションA】
DB接続→(トランザクション開始→)UPDATE SQL発行→(正常終了だったらコミット、エラーが出たらロールバック)→DB接続終了
【ファンクションB】
DB接続→(トランザクション開始→)SELECT SQL発行→(正常終了だったらコミット、エラーが出たらロールバック)→DB接続終了
のようなファンクションを作り、
PHPの画面処理側で
「ファンクションA(UPDATE)呼び出し→戻り値がTrueだったらファンクションB呼び出し(SELECT)」
のような制御をいれればいいのでは?
この回答への補足
早速の回答ありがとうございます。
PHPの内部の処理はおっしゃられた通りになっております。
ただ、ファンクションAの方が数秒おきに自動的に発行され、ファンクションBがボタンを入力したときに発行されるので、Trueの判定ができません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Visual Basic(VBA) エクセルVBA 3 2022/06/23 20:00
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Excel(エクセル) excel ピポットテーブルの更新について 1 2022/05/13 16:12
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PL/pgSQLの返り値の取得方法に...
-
access2021 VBA メソッドまたは...
-
for whichの使い方
-
1、Rstudioで回帰直線を求める...
-
過剰なオブジェクト指向脳から...
-
マイクラPC版のコマンドで効率...
-
コンパイルエラーが出ます。助...
-
Accessでの抽出で完全一致。
-
次の並び替え問題を教えてくだ...
-
chatgptでつくってもらったコー...
-
エクセルVBAでEdate関数は使え...
-
【VB.NET】日付型の列にNULLを...
-
データベースで、Prefixを付け...
-
商品番号を入力すると、商品名...
-
order by区の記述位置
-
ACCESSでDLookUpすると、不正な...
-
ツリーメニューの作成
-
[SQLServer] テーブル名からカ...
-
INSERT文でフィールドの1つだ...
-
VBAのAccessでDATE型のINSERT
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL Date型の列から年月だけを...
-
select文の書き方「半角カナ+...
-
抽出結果を分割して取得
-
Select結果をSelect
-
ポストグレスでfrom句の中にsel...
-
年月でdistinctしたい(PostgreSQL)
-
postgreSQLで更新後のデータを...
-
取得行数の指定
-
SQL文の中に引用符を入れたい
-
round関数について
-
レコード件数のちょうど半分をe...
-
2回目のselect文
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
-
エクセルで最後の文字だけ置き...
-
外部参照してるキーを主キーに...
-
SELECT 文 GROUP での1件目を...
-
for whichの使い方
-
SQLで特定の項目の重複のみを排...
-
INSERT文でフィールドの1つだ...
おすすめ情報