PostgreSQL 9.5 で INSERT INTO SELECT と ON DUPLICATE UPDATE を実行するにはどうすればいいですか? 質問する

PostgreSQL 9.5 で INSERT INTO SELECT と ON DUPLICATE UPDATE を実行するにはどうすればいいですか? 質問する

私は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挿入しようとしたが競合のために挿入できなかった値を参照します。

おすすめ記事