INSERT ON CONFLICT
仍会增加自动增量。为避免这种情况,我在下面使用了命令,但是插入后如何获取pid
?
WITH s AS (
SELECT pid FROM area WHERE area_name = 'testarea'
), i AS (
INSERT INTO area (area_name, active, users_pid)
SELECT 'testarea', true, 0
WHERE NOT EXISTS (SELECT 1 FROM s)
RETURNING pid
)
UPDATE area
SET active = true
WHERE pid = (SELECT pid FROM s)
RETURNING pid
pid
不返回INSERT
。我希望INSERT
和UPDATE
都返回pid
。
答案 0 :(得分:0)
PostgreSql的优点是使用序列作为自动增量值。因此,您不必让数据库引擎处理该值,而是可以从序列中选择下一个。
{ YR: '2018E',
PO_NO: 1101,
VENDOR: 'HAPPY ',
PO_DATE: 2018-11-12T00:00:00.000Z },
{ YR: '2018E',
PO_NO: 1102,
VENDOR: 'AGENCIES ',
PO_DATE: 2018-11-12T00:00:00.000Z },
{ YR: '2018E',
PO_NO: 1103,
VENDOR: 'INDUSTRY ',
PO_DATE: 2018-11-12T00:00:00.000Z },
{ YR: '2018E',
PO_NO: 1104,
VENDOR: 'AGENCIES ',
PO_DATE: 2018-11-12T00:00:00.000Z },
{ YR: '2018E',
PO_NO: 1105,
VENDOR: 'INDUSTRY ',
PO_DATE: 2018-11-12T00:00:00.000Z }
这样做可以控制值。您可以用它做任何您想做的事。您可以将其退回给呼叫者。
的链接