powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите пожалуйста написать системный скриптик...
7 сообщений из 7, страница 1 из 1
Помогите пожалуйста написать системный скриптик...
    #40067043
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
Доброй ночи.

Пытаюсь достать DDL для всех FOREIGN KEY в БД.



С обычноми все в порядке, а вот составные, когда указано по два поля, не получается.



Вот такую связку талиц пытался использовать:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT *
      FROM information_schema.table_constraints tc
LEFT JOIN information_schema.key_column_usage kcu
       ON tc.constraint_catalog = kcu.constraint_catalog
      AND tc.constraint_schema = kcu.constraint_schema
      AND tc.constraint_name = kcu.constraint_name
LEFT JOIN information_schema.referential_constraints rc
       ON tc.constraint_catalog = rc.constraint_catalog
      AND tc.constraint_schema = rc.constraint_schema
      AND tc.constraint_name = rc.constraint_name
LEFT JOIN information_schema.constraint_column_usage ccu
       ON rc.unique_constraint_catalog = ccu.constraint_catalog
      AND rc.unique_constraint_schema = ccu.constraint_schema
      AND rc.unique_constraint_name = ccu.constraint_name    
WHERE 
tc.constraint_schema='public'
AND tc.constraint_type='FOREIGN KEY'



Но для составного FK там не 1 а 4 записи, и как там что связать не могу додуматься
...
Рейтинг: 0 / 0
Помогите пожалуйста написать системный скриптик...
    #40067044
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
DDL таблиц с этими FK не подходят, т.к. надо добавить FK к уже существующим таблицам.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать системный скриптик...
    #40067120
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
Ни кто не знает?
...
Рейтинг: 0 / 0
Помогите пожалуйста написать системный скриптик...
    #40067128
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lr2,

Запрос к информационной схеме безусловно можно доработать. Правда нужно учитывать не только составные внешние ключи, но и такие потенциальные вещи, как отложенные ограничения (DEFERRED), каскадные действия (ON DELETE CASCADE), что-то еще.

Возможно стоит посмотреть на уже готовые решения.
1. pg_dump
2. Системные функции, а именно: pg_get_constraintdef .
...
Рейтинг: 0 / 0
Помогите пожалуйста написать системный скриптик...
    #40067149
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
Павел Лузанов
lr2,

Запрос к информационной схеме безусловно можно доработать. Правда нужно учитывать не только составные внешние ключи, но и такие потенциальные вещи, как отложенные ограничения (DEFERRED), каскадные действия (ON DELETE CASCADE), что-то еще.

Возможно стоит посмотреть на уже готовые решения.
1. pg_dump
2. Системные функции, а именно: pg_get_constraintdef .



Спасибо!

pg_get_constraintdef - это похоже на то что надо.




Но как узнать oid для FK ?


В pg_class содежит только PK из констрайнтов:

Код: sql
1.
2.
SELECT relname,oid FROM pg_class
WHERE relname IN (SELECT constraint_name FROM  information_schema.table_constraints WHERE constraint_type<>'CHECK')
...
Рейтинг: 0 / 0
Помогите пожалуйста написать системный скриптик...
    #40067153
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lr2
Но как узнать oid для FK ?

Список всех ограничений таблицы:
Код: sql
1.
SELECT pg_get_constraintdef(oid), * FROM pg_constraint WHERE conrelid = 'имя_таблицы'::regclass;


Если нужны только FK, отфильтруйте по contype.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать системный скриптик...
    #40067154
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
Павел Лузанов
lr2
Но как узнать oid для FK ?

Список всех ограничений таблицы:
Код: sql
1.
SELECT pg_get_constraintdef(oid), * FROM pg_constraint WHERE conrelid = 'имя_таблицы'::regclass;




То что надо!!!

Огромное спасибо!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите пожалуйста написать системный скриптик...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]