[英]Generate unique IDs in non-unique columns
考慮這張表:
ex_table
| gid | val |
| --- | --- |
| 1 | v1 |
| 1 | v2 |
| 2 | v3 |
請注意, gid
是類似 id 的列,並且不是唯一的。 我希望能夠通過生成唯一的gid
或指定要使用的 gid 將值插入表中。
例如:
INSERT INTO ex_table (val)
SELECT --....
應該生成一個唯一的gid
,而
INSERT INTO ex_table (gid, val)
SELECT --....
應該使用提供的gid
。
有什么辦法可以做到這一點?
您可以通過使用overriding system
值和自動生成的列來按照您所說的字母做您想做的事情。 例如:
create table t (
gid int generated always as identity,
name varchar(255)
);
然后
insert into t (name) values ('abc');
insert into t (gid, name) overriding system value values (1, 'def')
將插入gid
值為1
的兩行。
這是一個例子。
只有一個警告:插入您自己的值不會更改自動生成的下一個值。 因此,如果您手動插入不存在的值,那么您可能會發現稍后會為它們生成重復項。
你可以試試這樣的
CREATE SEQUENCE table_name_id_seq;
CREATE TABLE table_name (
gid integer NOT NULL DEFAULT nextval('table_name_id_seq'),
name varchar);
ALTER SEQUENCE table_name_id_seq
OWNED BY table_name.id;
或簡單地
CREATE TABLE table_name(
gid SERIAL,
name varchar);
然后插入
INSERT INTO fruits(gid,name)
VALUES(DEFAULT,'Apple');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.