插入后如何返回自动增量值?

时间:2019-05-15 05:04:38

标签: postgresql

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。我希望INSERTUPDATE都返回pid

1 个答案:

答案 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 }

这样做可以控制值。您可以用它做任何您想做的事。您可以将其退回给呼叫者。

这里是sequence manipulation functions

的链接