Вы можете переименовать таблицу или последовательность, как хотите, и все будет работать.
Связь между столбцом таблицы и ее последовательностью хранится в двух местах:
- В
pg_attrdef
, где хранятся значения атрибутов по умолчанию. - В
pg_depend
, где отслеживаются зависимости между объектами.
Все объекты и столбцы имеют внутреннюю ссылку на ихИдентификаторы объектов или номера атрибутов, поэтому переименование чего-либо не является проблемой.
Пример:
CREATE TABLE serialdemo (id serial);
SELECT oid FROM pg_class WHERE relname = 'serialdemo';
oid
-------
69427
(1 row)
SELECT attnum FROM pg_attribute WHERE attrelid = 69427 AND attname = 'id';
attnum
--------
1
(1 row)
Зависимые объекты:
SELECT classid::regclass, objid, deptype
FROM pg_depend
WHERE refobjid = 69427 AND refobjsubid = 1;
classid | objid | deptype
------------+-------+---------
pg_attrdef | 69430 | a
pg_class | 69425 | a
(2 rows)
Один из этих зависимых объектовэто определение столбца по умолчанию:
SELECT adbin, adsrc FROM pg_attrdef WHERE oid = 69430;
-[ RECORD 1 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
adbin | {FUNCEXPR :funcid 480 :funcresulttype 23 :funcretset false :funcvariadic false :funcformat 2 :funccollid 0 :inputcollid 0 :args ({FUNCEXPR :funcid 1574 :funcresulttype 20 :funcretset false :funcvariadic false :funcformat 0 :funccollid 0 :inputcollid 0 :args ({CONST :consttype 2205 :consttypmod -1 :constcollid 0 :constlen 4 :constbyval true :constisnull false :location -1 :constvalue 4 [ 49 15 1 0 0 0 0 0 ]}) :location -1}) :location -1}
adsrc | nextval('serialdemo_id_seq'::regclass)
Здесь adsrc
не используется для внутреннего использования, оно предназначено только для человеческого глаза.Этот столбец не изменится при переименовании последовательности, хотя все продолжает работать.
Соответствующая ссылка на последовательность - :constvalue 4 [ 49 15 1 0 0 0 0 0 ]
.Это 4-байтовое целое число без знака, идентификатор объекта (1 × 256² + 15 × 256 + 49 = 69425).
Другим зависимым объектом является последовательность:
SELECT relname, relkind FROM pg_class WHERE oid = 69425;
relname | relkind
-------------------+---------
serialdemo_id_seq | S
(1 row)