Postgres:按顺序获取nextval而不实际增加序列?

emm*_*dee 6 postgresql sequence

看起来select nextval('table_name')实际上是增加了价值。

我的目标是nextval在不实际进行任何增量的情况下“预测”数据库中所有表的值。这应该是只读操作。

我无法select nextval在只读连接上运行,因为它实际上是在尝试进行交易。我希望能够查询它并监视只读副本数据库上的序列。

你将如何解决这个问题并实现目标?

ric*_*yen 8

我会假设SELECT currval('seq_name') + 1SELECT last_value + 1 FROM seq_name将是答案,但这仅当您递增1,或者您立即知道递增时。

如果你没有递增1并且你不知道递增,那么试试这个:

SELECT currval('seq_name') + i.inc
  FROM (SELECT seqincrement AS inc
          FROM pg_sequence
         WHERE seqrelid = 'seq_name'::regclass::oid) AS i;
Run Code Online (Sandbox Code Playgroud)

或者

SELECT last_value + i.inc
  FROM seq_name,
      (SELECT seqincrement AS inc
         FROM pg_sequence
        WHERE seqrelid = 'seq_name'::regclass::oid) AS i;
Run Code Online (Sandbox Code Playgroud)