Postgresql 将主键int类型更改为串行
有没有一种方法可以在不删除表的情况下将现有主键类型从int更改为serial?我已经有很多数据在表中,我不想删除它 将int转换为串行,使其成为串行 为序列选择一个大于表中任何现有值的起始值 从mytable中选择MAXid+1 为序列表名创建序列\u columnname\u seq是个好名字 假设要从3开始创建序列测试\u id\u seq MINVALUE 3 更改列的默认值以使用序列 ALTER TABLE test ALTER id SET DEFAULT nextval'test_id_seq' 更改表/列所拥有的序列; 更改序列test\u id\u seq由test.id拥有Postgresql 将主键int类型更改为串行,postgresql,primary-key,auto-increment,Postgresql,Primary Key,Auto Increment,有没有一种方法可以在不删除表的情况下将现有主键类型从int更改为serial?我已经有很多数据在表中,我不想删除它 将int转换为串行,使其成为串行 为序列选择一个大于表中任何现有值的起始值 从mytable中选择MAXid+1 为序列表名创建序列\u columnname\u seq是个好名字 假设要从3开始创建序列测试\u id\u seq MINVALUE 3 更改列的默认值以使用序列 ALTER TABLE test ALTER id SET DEFAULT nextval'test_i
和往常一样,在运行来自Internet上随机用户的SQL查询之前,要养成运行完整备份的习惯- 这有什么用?你能解释一下它为什么有效或者其他可能的解决方案吗?嗯:它创建了一个OP没有做的表格,用OP没有做的随机值填充它,添加OP想要的seria loldstyle并使其成为OP想要的主键,但是我们如何在不同的表中使用此递增值作为外键。它在链接到的其他表中提供空值。有人能解释为什么test.id查询拥有的权限所有权ALTER SEQUENCE test_id_seq很重要吗?我有不匹配的架构,因此无法运行此操作。@ConnorWilloughby(用于描述对表列使用串行类型的实际效果的PostgreSQL版本12),“序列标记为“由”列所有,因此如果删除列或表,将删除该序列。”也就是说,现在将级联删除列或表,也要摆脱这个序列。方便
-- temp schema for testing
-- ----------------------------
DROP SCHEMA tmp CASCADE;
CREATE SCHEMA tmp ;
SET search_path=tmp;
CREATE TABLE bagger
( id INTEGER NOT NULL PRIMARY KEY
, tralala varchar
);
INSERT INTO bagger(id,tralala)
SELECT gs, 'zzz_' || gs::text
FROM generate_series(1,100) gs
;
DELETE FROM bagger WHERE random() <0.9;
-- SELECT * FROM bagger;
-- CREATE A sequence and tie it to bagger.id
-- -------------------------------------------
CREATE SEQUENCE bagger_id_seq;
ALTER TABLE bagger
ALTER COLUMN id SET NOT NULL
, ALTER COLUMN id SET DEFAULT nextval('player_id_seq')
;
ALTER SEQUENCE bagger_id_seq
OWNED BY bagger.id
;
SELECT setval('bagger_id_seq', MAX(ba.id))
FROM bagger ba
;
-- Check the result
-- ------------------
SELECT * FROM bagger;
\d bagger
\d bagger_id_seq