Alter/change postgreSQL 上序列的默认值

Alter/change default value for sequence on postgreSQL

我想更改数据库中的序列值。最重要的是,我试图通过以下查询获取序列信息

SELECT PG_GET_SERIAL_SEQUENCE('test_thing', 'id');

这是什么 return 到 NULL。

进一步检查 table test_thing 的 Postgres(使用 HeidiSQL)数据库,我可以看到我的主键默认值为:

(nextval('test_thing_thing_seq_id'::regclass)

我认为这导致结果 return 为 NULL 并且希望 change/alter 值如下

(nextval('test_thing_thing_id_seq'::regclass)

问题是:

  1. 我应该如何在不删除 table 的情况下更改值并维护数据
  2. 或者我可以直接从这里更改


  1. 如果直接按上面改,会不会有以后的问题issue(no.2) 谢谢!

首先,只有在序列和列之间添加了依赖关系时,pg_get_serial_sequence才会return序列名称;它不查看 DEFAULT 子句您可以使用

添加依赖项
ALTER SEQUENCE test_thing_thing_id_seq
   OWNED BY test_thing(id);

您可以使用

更改序列值
SELECT setval('test_thing_thing_id_seq', 42);

这可能也可以通过像 HeidiSQL 这样的 GUI 客户端来完成,但我不知道,因为我不使用 GUI 客户端

如果新值低于 table 中 id 的最大值,更改序列值可能会导致问题:未来 INSERTs 可能会导致违反主键约束错误