当前位置: 首页 > 知识库问答 >
问题:

PostgreSQL多值升级

徐奇逸
2023-03-14

是否可以在PostgreSQL中执行多值upsert?我知道存在多值插入,“ON CONFLICT”关键字在违反密钥时执行更新……但有可能将两者结合起来吗?大概是这样。。。

INSERT INTO table1(col1, col2) VALUES (1, 'foo'), (2,'bar'), (3,'baz')
ON CONFLICT ON CONSTRAINT theConstraint DO
UPDATE SET (col2) = ('foo'), ('bar'), ('baz')

我用谷歌搜索了这个面包屑,找不到任何关于它的东西。

我有一个应用程序正在利用pg-promise,我正在做批处理。它可以工作,但它的速度非常慢(比如每5秒左右就有50行......)。我想,如果我能取消批处理,而是正确地构建这个多值的更新插入查询,它可以提高性能。

编辑:嗯...我自己刚刚试过,不,它不起作用。除非我做的不对。所以现在我想我的问题变成了,实现这种东西的好方法是什么?

共有2个答案

东方涛
2023-03-14

1.插入前

2.Command

3.插入后

颜志业
2023-03-14

多值升级绝对是可能的,并且实现了插入的重要部分…在冲突中…。

CREATE TABLE table1(col1 int, col2 text, constraint theconstraint unique(col1));

INSERT INTO table1 VALUES (1, 'parrot'), (4, 'turkey');

INSERT INTO table1 VALUES (1, 'foo'), (2,'bar'), (3,'baz')
ON CONFLICT ON CONSTRAINT theconstraint
DO UPDATE SET col2 = EXCLUDED.col2;

结果

regress=> SELECT * FROM table1 ORDER BY col1;
 col1 | col2 
------+------
    1 | foo
    2 | bar
    3 | baz
    4 | turkey
(4 rows)

如果文档不清楚,请向pgsql-general邮件列表提交适当的反馈。或者更好的是,向医生建议一个补丁。

 类似资料:
  • 我刚刚将mac OS X更新到Yosemite10.10.4版本,并将postgresql更新到:psql(postgresql)9.4.4。

  • 最近对OSX Mavericks的升级中断了我的Rails应用程序的数据库连接。 当我尝试从数据库中提取时,服务器返回以下错误: 当尝试运行时,我得到: 我已经尝试了许多在互联网上可用的解决方案。例如重新安装pg gem并在my database.yml中设置host:localhost。我的/usr/local/var/postgres/pg_hba.conf文件显示: 返回哪个psql: 这件

  • 问题内容: 我已经从网络资源中抓取了一些数据并将其全部存储在pandas DataFrame中。现在,为了利用SQLAlchemy提供的强大的db工具,我想将所说的DataFrame转换为Table()对象,并最终将所有数据上载到PostgreSQL表中。如果可行,那么完成此任务的可行方法是什么? 问题答案: 如果您使用的是PostgreSQL 9.5或更高版本,则可以使用临时表和一条语句执行UP

  • 问题内容: 可以说我在PostgreSQL中有一个带有以下各列的表: 我插入了这两行: 我想将上面的行转换为此(在PostgreSQL中进行选择): 调用PHP 并得到这样的东西: 但是现在,如果我用php调用,我会得到: 希望有人能帮助我解决这个问题,谢谢大家 问题答案: 在9.4中很简单(使用了LATERAL join和jsonb函数): 确切结果:

  • 本文向大家介绍一个提升PostgreSQL性能的小技巧,包括了一个提升PostgreSQL性能的小技巧的使用技巧和注意事项,需要的朋友参考一下  在一个(差)的PostgreSQL 查询中只要一个小小到改动(ANY(ARRAY[...])to ANY(VALUES(...)))就能把查询时间从20s缩减到0.2s。从最简单的学习使用 EXPLAIN ANALYZE开始,到学习使用 Postgres