我目前正在嘗試使用 PostgreSQL 的繼承系統,但我的子表中的自動增量索引存在問題。
我有三個表:“貨幣”、“加密”和“穩定”
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');
但這是我的問題:我想要一個唯一識別符號,它通過我的父表“貨幣”遞增。當我選擇時,我有(看看我的 id:1,2,3,1,2,3):
但是,是否有可能有這樣的東西(1,2,3,4,5,6):
我的主鍵有問題嗎?
謝謝
uj5u.com熱心網友回復:
我們可以嘗試使用create sequence來設定行號,以便在多個表之間共享。
定義一個新的序列生成器
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);
sqlfiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/468314.html
標籤:PostgreSQL