Czy istnieje takie zapytanie?
Znalazłem kilka zapytań, które mogą to zrobić dla jednej tabeli, ale nie byłem w stanie go zmodyfikować, więc widzę:
tablename | column | type
postgresql
schema
korda
źródło
źródło
Odpowiedzi:
Coś takiego:
źródło
tc.constraint_type = 'PRIMARY KEY'
pokaże tylko klucze podstawowe. Jednak każdy klucz podstawowy jest chroniony unikalnym indexeposition_in_unique_constraint
wskazuje pozycję klucza OBCEGO, dla kluczy podstawowych zawsze jest pusta. Prawidłowa kolumna toordinal_position
. Testowane w PG 9.4.ordinal_position
powinny być używane. Nieposition_in_unique_constraint
jest zerowy tylko w użyciu FK.To jest dokładniejsza odpowiedź:
Brakowało
and kc.constraint_name = tc.constraint_name
części, więc zawiera listę wszystkich ograniczeń.źródło
and kc.position_in_unique_constraint is not null
część. I gorąco zachęcamy do korzystania z ANSI JOIN (choć wielu uważa, że to kwestia gustu).Weź to również pod uwagę. Spowoduje to wygenerowanie skryptu do zmiany wszystkich tabel.
źródło
Myślę, że klucz podstawowy i klucz obcy powinny zrobić tak. kc.position_in_unique_constraint nie ma wartości NULL, warunek ten może uzyskać tylko klucze obce.
źródło