さて、私は pgSQL を始めたばかりですが、もちろん、ON DUPLICATE KEY
MySQL のようなものがないことを発見しました。PHPで開発中。
アップサート、良いことと悪いこと、そしてエラーがある場合は、このソリューションについての意見をお聞きしたいと思います。
だから私はデータが取り込まれた(PHPの)オブジェクトを持っています。編集時に移入が行われた場合、オブジェクトの ID もそこにあり、それ以外の場合は ID が 0 になります。保存に関しては、最初にその ID を確認し、それが > 0 の場合は問題ありません。それ以外の場合は、から新しい ID を取得しています私のDB、これを使用:
$query = "SELECT NEXTVAL(PG_GET_SERIAL_SEQUENCE(?, ?)) id";
最近知ったように、ID が一意であるという保証があり、これは通常重要なことです (@IMSoP)。
次は実際の upsert です。私が見つけた最も簡単な方法はこれでした (@Craig Ringer も同時実行の問題があるとコメントしています)。
UPDATE table SET field='C', field2='Z' WHERE id=3;
INSERT INTO table (id, field, field2)
SELECT 3, 'C', 'Z'
WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);
そして、それだけです。
私はあなたの意見を聞きたいです:)