1

テーブルに UNIQUE 列の複合セットがあります。したがって、一意のキーに違反しているテーブルに挿入すると、Postgresql はエラーを返し、PHP スクリプトはこのエラーを読み取ることができます。

挿入するときは、これを行う代わりに:

SELECT id FROM table WHERE col1='x' and col2='y'
(if no rows)
INSERT INTO table...
(else if rows are found)
UPDATE table SET...

私は使用することを好みます:

INSERT INTO table...
(if error occurred then attempt to UPDATE)
UPDATE table SET...

上記から返されるエラーの種類は、「エラー: 重複したキー値が一意の制約 "xxxxxxxx_key に違反しています" です。

ただし、無効なデータなどの他の理由で INSERT が失敗した場合、UPDATE を実行しても意味がありません。無効なデータではなく、この重複キーの問題からエラーが実際に失敗したかどうかを (PHP/Postgres から) 「知る」方法はありますか? 私はただ興味があります。データが無効な場合、UPDATE を実行してもエラーが返されますが、ベスト プラクティスは何だと思いますか?

どうもありがとう!

4

2 に答える 2

3

エラーメッセージを確認して、どのようなエラーが発生したかを確認してください。pg_result_error_field()はそれをすべて表示します。詳細は PGSQL_DIAG_SQLSTATE およびPostgreSQL のマニュアルを確認してください。

于 2012-05-09T14:18:54.937 に答える
3

このについては、公式ドキュメントを参照してください。

WHEN EXCEPTION ... THENハンドラーを自由に追加できます。使用可能なエラーのリストはドキュメントにも記載されています

unique_violation上記の例では、特別に処理されるものを除いて、他のエラーが発生した場合、関数は例外を引き起こします。

于 2012-05-09T16:02:33.113 に答える