2012-04-05 14 views
0

私はちょうど私のnode.jsアプリをherokuにアップロードしましたが、私のSQLクエリの1つが失敗しています。クエリは次のとおりです。それはheroku sql文のpostgresが失敗する

で失敗している

INSERT INTO countries (name, user_id, created_timestamp) 
SELECT $1, $2, CURRENT_TIMESTAMP 
WHERE NOT EXISTS (SELECT 1 FROM countries WHERE name = $1 FOR UPDATE) 

error: SELECT FOR UPDATE/SHARE is not allowed in subqueries

は、誰もがなぜ知っていますか?私が更新を選択できない場合に使用できる回避策はありますか?

+0

をあなたが達成しようとしているのは何? –

+0

レコードが存在しない場合はテーブルに挿入しようとしていますが、存在する場合は主キー違反で失敗しません – dan

答えて

1

これはあなたのために働くかもしれない:

BEGIN; 

LOCK TABLE countries IN SHARE MODE; 

INSERT INTO countries (name, user_id, created_timestamp) 
SELECT $1, $2, CURRENT_TIMESTAMP 
WHERE NOT EXISTS (SELECT * FROM countries WHERE name = $1); 

COMMIT; 

Explanation and links in this closely related answer.

関連する問題