私はPostgreSQLで次のことをやろうとしています
INSERT INTO blog_sums ( blog_id, date, total_comments)
SELECT blog_id, '2016-09-22', count(comment_id) as total_comments_update
FROM blog_comments
WHERE date = '2016-09-22'
GROUP BY blog_id
ON CONFLICT (blog_id ,date)
DO UPDATE SET blog_sums.total_comments = total_comments_update;
date + blog_id に一意のキーがありますが、エラーが発生し続けます:
エラー: 列「total_comments_update」が存在しません
この場合、重複/競合の更新を行うための「正しい」方法と最も効率的な方法を探しています
私のテーブルは
blog_comments (blog_id, comment_id, comment, date)
blog_sums ( blog_id, date, total_comments) . unique on blog_id+date
ありがとう
ベストアンサー1
句の選択から列エイリアスにアクセスすることはできません。競合のために挿入に失敗したすべての行を含むテーブルエイリアスDO UPDATE SET
を使用できます。excluded
INSERT INTO blog_sums ( blog_id, date, total_comments)
SELECT blog_id, '2016-09-22', count(comment_id) as total_comments_update
FROM blog_comments
WHERE date = '2016-09-22'
GROUP BY blog_id
ON CONFLICT (blog_id ,date)
DO UPDATE SET total_comments = excluded.total_comments;
したがって、excluded.total_comments
最後の行は、total_comments
挿入しようとしたが競合のために挿入できなかった値を参照します。