如何獲取有關 Postgres 10 中新身份列背後的序列的資訊?(生成{始終|預設}作為身份)
Postgres 10 帶來了 SQL 標準
GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY
特性的實現,鬆散地稱為標識列。這個特性取代了 Postgres 自己的SERIAL
偽類型,消除了它的問題/問題。有關詳細資訊,請參閱此處和此處。
GENERATED…
優於的主要原因之一SERIAL
是序列號生成器在後台透明處理。我們可以添加列、調整目前序列號和刪除列,所有這些都無需顯式引用序列。CREATE TABLE tbl ( col BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY , col2 text ) ;
和…
ALTER TABLE tbl ALTER COLUMN col RESTART WITH 1000 ;
和…
ALTER TABLE tbl ALTER COLUMN col DROP IDENTITY IF EXISTS ;
要麼…
ALTER TABLE tbl ALTER COLUMN col DROP COLUMN IF EXISTS ;
請注意,在這些範常式式碼中,我們都沒有引用特定的序列生成對象。
我假設這個特性是使用Postgres中現有的序列特性實現的。
➠ 我們如何查詢這個背景序列?我們如何詢問生成的最後一個/下一個值是什麼?序列操作函式的等價物是什麼?
您似乎使用與以前相同的功能:
https://www.postgresql.org/docs/10/static/functions-info.html
pg_get_serial_sequence 返回與列關聯的序列的名稱,如果沒有序列與列關聯,則返回 NULL。 如果該列是標識列,則關聯的序列是內部為標識列創建的序列. 對於使用其中一種序列類型(serial、smallserial、bigserial)創建的列,它是為該序列列定義創建的序列。在後一種情況下,可以使用 ALTER SEQUENCE OWNED BY 修改或刪除此關聯。(該函式可能應該被稱為 pg_get_owned_sequence;它的目前名稱反映了它通常用於串列或大串列列的事實。)第一個輸入參數是具有可選模式的表名,第二個參數是列名。因為第一個參數可能是模式和表,所以它不被視為雙引號標識符,這意味著預設情況下它是小寫的,而第二個參數只是一個列名,被視為雙引號並具有它的案例保存。典型用途是讀取標識或序列列的序列的目前值,例如:
SELECT currval(pg_get_serial_sequence(‘sometable’, ‘id’));