Как я могу получить имя таблицы и имя столбца, используя имя последовательности в postgres? - PullRequest
0 голосов
/ 29 марта 2019

Я знаю имя последовательности, но я не знаю имени таблицы и имени столбца.Поэтому, пожалуйста, помогите мне, как найти его.

1 Ответ

0 голосов
/ 29 марта 2019

Предполагая, что это последовательность, которой владеет столбец, например поскольку столбец определен как serial или identity, вы можете получить эту информацию, посмотрев на pg_depend и присоединив ее к pg_class (и другим)

select tbl.relname as table_name, 
       col.attname as column_name
from pg_class s
  join pg_namespace sn on sn.oid = s.relnamespace 
  join pg_depend d on d.refobjid = s.oid and d.refclassid='pg_class'::regclass 
  join pg_attrdef ad on ad.oid = d.objid and d.classid = 'pg_attrdef'::regclass
  join pg_attribute col on col.attrelid = ad.adrelid and col.attnum = ad.adnum
  join pg_class tbl on tbl.oid = ad.adrelid 
  join pg_namespace ts on ts.oid = tbl.relnamespace 
where s.relkind = 'S'
  and s.relname = 'your_sequence_name_her'
  and d.deptype in ('a', 'n');

Другой вариант - посмотреть значение столбцов по умолчанию и проверить, содержит ли оно имя последовательности:

select tbl.relname as table_name, 
       col.attname as column_name
from pg_attrdef ad
  join pg_attribute col on col.attrelid = ad.adrelid and col.attnum = ad.adnum
  join pg_class tbl on tbl.oid = ad.adrelid
where adsrc like '%your_sequence_name_her%'

Это также будет работать для последовательностей, которые не принадлежат столбцу.

...