相关疑难解决方法(0)

PostgreSQL Upsert使用系统列XMIN,XMAX等来区分插入和更新的行

免责声明:理论问题.

这里有几个问题,询问如何在PostgreSQL upsert语句中区分插入和更新的行.

这是一个简单的例子:

nd@postgres=# create table t(i int primary key, x int);
nd@postgres=# insert into t values(1,1);
nd@postgres=# insert into t values(1,11),(2,22)
  on conflict(i) do update set x = excluded.i*11
  returning *, xmin, xmax;
????????????????????????
? i ? x  ? xmin ? xmax ?
????????????????????????
? 1 ? 11 ? 7696 ? 7696 ?
? 2 ? 22 ? 7696 ?    0 ?
????????????????????????
Run Code Online (Sandbox Code Playgroud)

所以,xmax> 0(或xmax= xmin) - 行已更新; xmax= 0 - …

postgresql upsert postgresql-9.5

17
推荐指数
1
解决办法
2179
查看次数

Postgres - ON CONFLICT - 如何知道是否发生UPDATE而不是INSERT

我有一张桌子

CREATE TABLE foo
(
    f0 int,
    time_stamp timestamp,
    CONSTRAINT foo_pk PRIMARY KEY (f0)
)
Run Code Online (Sandbox Code Playgroud)

我需要大量写入此表,因此性能是关键.有时,我会写一个具有现有值的记录,f0并且只会更新time_stamp到当前时间.为此,我使用了一个ON CONFLICT..DO UPDATE条款.

问题是我需要知道是否INSERT已经发生或是UPDATE.

我虽然使用第二is_update列.插入,插入false和

`ON CONFLICT .. DO UPDATE set is_update=true`
Run Code Online (Sandbox Code Playgroud)

然后RETURNING is_update用来得到我想要的东西.问题在于引入了与数据本身无关的附加列.

sql postgresql upsert postgresql-9.5

12
推荐指数
2
解决办法
2106
查看次数

奇怪的 now() 与 Postgres 触发器的时差

在 Postgres 10.10 数据库中,我有一个 tabletable1和一个AFTER INSERT触发器table1for table2:

CREATE TABLE table1 (
    id SERIAL PRIMARY KEY,
    -- other cols
    created_at timestamp with time zone NOT NULL,
    updated_at timestamp with time zone NOT NULL
);

CREATE UNIQUE INDEX table1_pkey ON table1(id int4_ops);

CREATE TABLE table2 (
    id SERIAL PRIMARY KEY,
    table1_id integer NOT NULL REFERENCES table1(id) ON UPDATE CASCADE,
    -- other cols (not used in query)
    created_at timestamp with time zone NOT NULL,
    updated_at timestamp …
Run Code Online (Sandbox Code Playgroud)

postgresql timestamp transactions plpgsql sequelize.js

7
推荐指数
1
解决办法
822
查看次数

如何区分 sqlalchemy INSERT…ON CONFLICT (Upsert) 中的冲突

我正在阅读有关 postgres 方言上的 upsert 操作的 SqlAlchemy 文档,网址为http://docs.sqlalchemy.org/en/latest/dialects/postgresql.html#insert-on-conflict-upsert

有没有办法知道更新插入是插入还是更新?

该文档似乎省略了这个细节。

python postgresql sqlalchemy

5
推荐指数
1
解决办法
5139
查看次数

Postgres upsert:区分新行和更新行

我正在考虑使用 PostgreSQLINSERT .. ON CONFLICT UPDATE功能。理想情况下,我将能够区分哪些行已成功插入,哪些行已更新。有没有办法做到这一点?

sql postgresql upsert

1
推荐指数
1
解决办法
478
查看次数