Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PostgreSQL _ przynależność sekwencji

Napisany przez: wpaski 29.02.2016, 18:20:05

Witam, czy da się sprawdzić do jakiej tabeli/tabel należy dana sekwencja? Wiem że domyślny schemat (nazwy sekwencji) to nazwatabeli_nazwakolumny_seq ale czy da się sprawdzić to innym sposobem? no bo np. sekwencja może być inaczej nazwana, a mamy w bazie 100 tabel i 100 sekwencji i teraz trzeba ręcznie sprawdzać która sekwencja jest do której tabeli?

Napisany przez: mmmmmmm 29.02.2016, 22:45:19

Coś w ten deseń:

  1. SELECT attname kolumna, objid::regclass obiekt, refobjid::regclass::text tabela
  2. FROM pg_depend d JOIN pg_attribute a ON a.attrelid = d.refobjid AND a.attnum = d.refobjsubid JOIN pg_class c ON c.relkind='S' AND c.relfilenode=objid
  3. WHERE refobjid::regclass::text='nazwa tabeli'

Dostajesz w wyniku kolumnę, nazwę sequencera i tabelę...
Tylko, że wiesz, że jeden seq może być do N tabel ... ? smile.gif

Napisany przez: Crozin 29.02.2016, 22:55:50

Warto też zaznaczyć, że sekwencja może być wykorzystana spoza bazy danych - w sumie dosyć popularna technika, gdzie to aplikacja zajmuje się nadawaniem identyfikatorów.

Napisany przez: wpaski 2.03.2016, 12:44:39

mmmmmmm dzięki, natomiast nie rozumiem jednej rzeczy
po usunięciu sekwencji (kaskadowo)i dodaniu ich ponownie Twój kod nie działa - nic nie znajduje, natomiast gdy wykonuję

Kod
SELECT c.relname FROM pg_class c WHERE c.relkind = 'S';

znajduje dodane przezemnie sekwencje

czemu tak sie dzieje?


edit:
juz wiem trzeba dodac:
Kod
ALTER SEQUENCE nazwatabeli_nazwakolumny_seq OWNED BY nazwatabeli.id;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)