簡體   English   中英

在非唯一列中生成唯一 ID

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM