
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows10がインストールできま...
-
エクセルで縦のカラムデータを...
-
Ophcrackについて
-
postgresqlのtableのカラムの型...
-
php、postgresqlを使ってwebア...
-
三段論法を真理値表で証明する
-
sqlの中で、 例えば条件句で AN...
-
tesuto 01
-
python3.12のインストール方法
-
Pythonで2つのデータ(キー無し...
-
数値が定期的にあらわれる文字...
-
終端クォート ' が必要です と...
-
PostgressからMySQL(MariaDB)...
-
【PostgreSQL】行の値の並びを...
-
列が存在しないと言われる
-
PostgreSQL14.6のSSL対応について
-
ポストグレにあるExcelファイル...
-
PostgreSQL レコードからアイテ...
-
文字切り替えの時に 中央にでる A
-
postgreSQL カラムの全ての値を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL Date型の列から年月だけを...
-
select文の書き方「半角カナ+...
-
Select結果をSelect
-
postgreSQLで更新後のデータを...
-
抽出結果を分割して取得
-
レコード件数のちょうど半分をe...
-
text型のデータをintegerにキャ...
-
クエリの短縮化及び高速化について
-
数字の表示が一部欠ける
-
SQL文の中に引用符を入れたい
-
取得行数の指定
-
年月でdistinctしたい(PostgreSQL)
-
PL/pgSQLの返り値の取得方法に...
-
お世話になっています。SQLに...
-
2回目のselect文
-
フィルターかけた後、重複を除...
-
差し込み後、元データを変更し...
-
外部参照してるキーを主キーに...
-
エクセルで最後の文字だけ置き...
-
SQLで特定の項目の重複のみを排...
おすすめ情報