如何在表上创建一个序列,使其从 0 -> 最大值?
我尝试使用以下 SQL 代码,但它不会将任何值插入到我正在使用的表中:
CREATE SEQUENCE rid_seq;
ALTER TABLE test ADD COLUMN rid INTEGER;
ALTER TABLE test ALTER COLUMN rid SET DEFAULT nextval('rid_seq');
我尝试插入序列的表是另一个查询的输出。我不知道在初始查询期间添加序列是否更有意义,或者在执行查询后将序列添加到表中是否更有意义。
添加新列时设置默认值:
create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');
更改现有列的默认值不会更改现有数据,因为数据库无法知道应该更改哪些值;列值上没有“此列具有默认值”标志,只有默认值(最初为 NULL,因为您没有指定其他任何内容)和当前值(也是 NULL),但是可以区分“NULL”因为它是默认值”和“NULL,因为它被显式设置为 NULL”。因此,当您分两步执行时:
- 添加列。
- 更改默认值。
PostgreSQL 不会将默认值应用于您刚刚添加的列。但是,如果您添加列并同时提供默认值,那么 PostgreSQL 确实知道哪些行具有默认值(所有行),因此它可以在添加列时提供值。
顺便说一句,您可能也希望该列上有 NOT NULL:
create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');
And, as 一匹没有名字的马 https://stackoverflow.com/users/330315/a-horse-with-no-name注意,如果您只想使用rid_seq
为您test.rid
那么你可能想要设置其所有者列 http://www.postgresql.org/docs/current/static/sql-altersequence.html to test.rid
这样,如果删除列,序列就会被删除:
alter sequence rid_seq owned by test.rid;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)