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)
问题是:
- 我应该如何在不删除 table 的情况下更改值并维护数据
- 或者我可以直接从这里更改
- 如果直接按上面改,会不会有以后的问题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
的最大值,更改序列值可能会导致问题:未来 INSERT
s 可能会导致违反主键约束错误
我想更改数据库中的序列值。最重要的是,我试图通过以下查询获取序列信息
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)
问题是:
- 我应该如何在不删除 table 的情况下更改值并维护数据
- 或者我可以直接从这里更改
- 如果直接按上面改,会不会有以后的问题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
的最大值,更改序列值可能会导致问题:未来 INSERT
s 可能会导致违反主键约束错误