PostgreSQL - 继承表的通用自动增量
PostgreSQL - Common autoincrement with inherited tables
我目前正在尝试使用 PostgreSQL 的继承系统,但我的 child tables.
中的 auto-increment 索引有问题
我有三个 table:“货币”、“加密货币”和“Stable”
CREATE TABLE IF NOT EXISTS public.currency
(
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(30) UNIQUE NOT NULL,
symbol VARCHAR(10) UNIQUE NOT NULL,
);
CREATE TABLE IF NOT EXISTS public.stable (id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY) INHERITS (public.currency);
CREATE TABLE IF NOT EXISTS public.crypto (id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY) INHERITS (public.currency);
我是这样插入数据的:
INSERT INTO public.stable (name, symbol) VALUES ('Euro', '€'), ('Dollar', '$'), ('Tether', 'USDT');
INSERT INTO public.crypto (name, symbol) VALUES ('Bitcoin', 'BTC'), ('Ethereum', 'ETH'), ('Litcoin', 'LTC');
但这是我的问题:我想要一个唯一标识符,它通过我的 parent table“货币”自增。
当我select时,我有(看看我的id:1,2,3,1,2,3):
但是,是否可以用这样的东西代替 (1,2,3,4,5,6):
是我的主键有问题吗?
谢谢
我们可以尝试使用create sequence设置行号,实现多表共享
define a new sequence generator
create sequence n_id;
然后我们可以像下面那样使用这个sequence
,为这三个表共享这个sequence
。
create sequence n_id;
CREATE TABLE IF NOT EXISTS currency
(
id INT default nextval('n_id') PRIMARY KEY,
name VARCHAR(30) UNIQUE NOT NULL,
symbol VARCHAR(10) UNIQUE NOT NULL
);
CREATE TABLE IF NOT EXISTS stable (id INT default nextval('n_id') PRIMARY KEY) INHERITS (currency);
CREATE TABLE IF NOT EXISTS crypto (id INT default nextval('n_id') PRIMARY KEY) INHERITS (currency);
我目前正在尝试使用 PostgreSQL 的继承系统,但我的 child tables.
中的 auto-increment 索引有问题我有三个 table:“货币”、“加密货币”和“Stable”
CREATE TABLE IF NOT EXISTS public.currency
(
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(30) UNIQUE NOT NULL,
symbol VARCHAR(10) UNIQUE NOT NULL,
);
CREATE TABLE IF NOT EXISTS public.stable (id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY) INHERITS (public.currency);
CREATE TABLE IF NOT EXISTS public.crypto (id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY) INHERITS (public.currency);
我是这样插入数据的:
INSERT INTO public.stable (name, symbol) VALUES ('Euro', '€'), ('Dollar', '$'), ('Tether', 'USDT');
INSERT INTO public.crypto (name, symbol) VALUES ('Bitcoin', 'BTC'), ('Ethereum', 'ETH'), ('Litcoin', 'LTC');
但这是我的问题:我想要一个唯一标识符,它通过我的 parent table“货币”自增。 当我select时,我有(看看我的id:1,2,3,1,2,3):
但是,是否可以用这样的东西代替 (1,2,3,4,5,6):
是我的主键有问题吗?
谢谢
我们可以尝试使用create sequence设置行号,实现多表共享
define a new sequence generator
create sequence n_id;
然后我们可以像下面那样使用这个sequence
,为这三个表共享这个sequence
。
create sequence n_id;
CREATE TABLE IF NOT EXISTS currency
(
id INT default nextval('n_id') PRIMARY KEY,
name VARCHAR(30) UNIQUE NOT NULL,
symbol VARCHAR(10) UNIQUE NOT NULL
);
CREATE TABLE IF NOT EXISTS stable (id INT default nextval('n_id') PRIMARY KEY) INHERITS (currency);
CREATE TABLE IF NOT EXISTS crypto (id INT default nextval('n_id') PRIMARY KEY) INHERITS (currency);