在我的 postgres 資料庫中有一個名為 的表testing_thing,我可以看到(通過\d testing_thing在我的 psql 提示符中運行)它被定義為
Table "public.testing_thing"
Column | Type | Collation | Nullable | Default
-------------- ------------------- ----------- ---------- -----------------------------------------------------
thing_id | integer | | not null | nextval('testing_thing_thing_id_seq'::regclass)
thing_num | smallint | | not null | 0
thing_desc | character varying | | not null |
Indexes:
"testing_thing_pk" PRIMARY KEY, btree (thing_num)
我想洗掉它并完全按原樣重新創建它,但我不知道如何重現
nextval('testing_thing_thing_id_seq'::regclass)
列的部分thing_id。
這是我放在一起創建表的查詢:
CREATE TABLE testing_thing(
thing_id integer NOT NULL, --what else should I put here?
thing_num smallint NOT NULL PRIMARY KEY DEFAULT 0,
thing_desc varchar(100) NOT NULL
);
它缺少什么?
uj5u.com熱心網友回復:
將 a 添加DEFAULT到要遞增的列并呼叫nextval():
CREATE SEQUENCE testing_thing_thing_id_seq START WITH 1;
CREATE TABLE testing_thing(
thing_id integer NOT NULL DEFAULT nextval('testing_thing_thing_id_seq'),
thing_num smallint NOT NULL PRIMARY KEY DEFAULT 0,
thing_desc varchar(100) NOT NULL
);
旁注:請記住,將序列附加到列并不會阻止用戶用隨機資料手動填充它,這可能會給主鍵帶來非常嚴重的問題。如果您想克服它并且不一定需要有序列,請考慮創建一個標識列,例如
CREATE TABLE testing_thing(
thing_id integer NOT NULL GENERATED ALWAYS AS IDENTITY,
thing_num smallint NOT NULL PRIMARY KEY DEFAULT 0,
thing_desc varchar(100) NOT NULL
);
演示: db<>fiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/331606.html
標籤:sql PostgreSQL 自动递增 下一个
