我在串行方面遇到了一些问题:从一个文件中,我填写了我的数据库,在其中有一个客户ID(它是一个序列号,也是我的主键)。我有300个客户,因此有300个客户ID(从1到300)。现在我的问题是,我有一个新客户的表单,但我无法添加它们,因为当我添加一个客户时,我的程序会添加具有ID 1的客户,或者ID 1已经分配给另一个客户。
那么我的问题是:是否可以更改序列的起始值以解决这个问题?
我在串行方面遇到了一些问题:从一个文件中,我填写了我的数据库,在其中有一个客户ID(它是一个序列号,也是我的主键)。我有300个客户,因此有300个客户ID(从1到300)。现在我的问题是,我有一个新客户的表单,但我无法添加它们,因为当我添加一个客户时,我的程序会添加具有ID 1的客户,或者ID 1已经分配给另一个客户。
那么我的问题是:是否可以更改序列的起始值以解决这个问题?
您可以使用RESTART WITH
来更改当前序列号以修改序列;
ALTER SEQUENCE test_seq RESTART WITH 300;
如果您使用“serial”关键字创建序列,则可使用以下方法获取序列名称:
SELECT adsrc FROM pg_attrdef WHERE adrelid = (SELECT oid FROM pg_class WHERE relname = 'table name goes here');
PostgreSQL
ALTER SEQUENCE tablename_columnname_seq RESTART WITH anynumber;
例子:
ALTER SEQUENCE test_table_rec_id_seq RESTART WITH 4615793;
select pg_get_serial_sequence('ingredients', 'id');
来获取序列键。SELECT adsrc FROM pg_attrdef WHERE adrelid = (SELECT oid FROM pg_class WHERE relname = 'ingredients');
语句。对于那些试图指向特定模式表的人,这里是您需要执行的查询。
// To get the sequence name
SELECT pg_get_serial_sequence('"yourSchema"."yourTable"', 'yourColumn');
//Output: yourSchema."yourTable_yourColumn_seq"
ALTER SEQUENCE yourSchema."yourTable_yourColumn_seq" RESTART WITH 100;
ALTER table my_table ADD COLUMN new_id SERIAL PRIMARY KEY;
然后更新了该列:
UPDATE my_table set new_id = new_id + 1000;
然后我将该表与现有的id号不连续且小于1000的表进行了连接。
PRIMARY KEY (source, serial_column)
,其中source是['source_1','source_2'],serial_column是从1开始的两个序列列的并集,以便'source_1,1'
从 source_2,1
独立,但那对我的目的来说不太有效。如果您喜欢,可以点赞 :) - Hugh_Kelley
serial
列是由序列填充的。请务必阅读手册,所有内容都在那里有详细记录。 - user330315serial
关键字创建序列,请使用以下代码获取序列名称:SELECT adsrc FROM pg_attrdef WHERE adrelid = (SELECT oid FROM pg_class WHERE relname = 'table name goes here');
- Joachim Isaksson