2013-06-28 10 views
5

Mój DB ma wiele tabel (Powiedz 400+), a ja pamiętam tylko część nazwy tego, którego szukam.wyszukaj nazwy tabel w PSQL

Wiem, że \d pokaże wszystkie tabele, ale to za dużo, na które można patrzeć. Czy jest jakieś polecenie do wyświetlenia wszystkich tabel, których nazwy pasują do danego wyrażenia regularnego?

Dzięki

Odpowiedz

0

znajduje się stół zwany pg_tables który ma wszystkie nazwy tabel w nim.

2

Niezbyt wygodne, chyba że sprawisz, że będzie proc, ale;

SELECT * FROM pg_tables WHERE SUBSTRING(tablename FROM '<regex>') <> ''; 

Aby uczynić go bardziej wygodne, można utworzyć i nazwać proc as;

CREATE FUNCTION ft(TEXT) RETURNS SETOF pg_tables AS 
    'SELECT * FROM pg_tables WHERE SUBSTRING(tablename from $1) <> '''';' 
LANGUAGE SQL; 

SELECT * FROM ft('.*oc.*')  -- Gets all tables matching `.*oc.*` 

An SQLfiddle to test both with.

+0

Pamiętaj, aby dodać 'nazwa_tabeli', jeśli tylko potrzebują tablenames 'SELECT nazwa_tabeli FROM pg_tables GDZIE SUBSTRING (nazwatabeli z '') <> '',' – zerocog

8

Jest zbudowany w celu psql, można użyć symboli wieloznacznych w \d, \dt, itp, np:

craig=> \dt test* 
     List of relations 
Schema | Name | Type | Owner 
--------+-----------+-------+------- 
public | test  | table | craig 
public | testtable | table | craig 
public | testu  | table | craig 
public | testx  | table | craig 
(4 rows) 

Będziemy chcieli wykorzystać \dt od \d wyświetli szczegóły dla każdej tabeli, a nie tylko wymień tabelę.

Można to zrobić za pomocą schematów też np:

\dt *.sometable 

będzie lista wszystkich tabel nazwanych sometable w dowolnym schemacie.

Znacznie wygodniej niż pisanie zapytań o numer pg_class, które zostały połączone z pg_namespace lub zapytanie information_schema.

Zwyczajowa składnia globbingowa jest akceptowana, gdzie ? to dowolny pojedynczy znak, a * to zero lub więcej znaków. Tak więc \dt ???? wyświetli wszystkie tabele z czteroznakowymi nazwami.

Wielokrotne symbole wieloznaczne są dozwolone, np:

craig=> \dt public.*e?t* 
      List of relations 
Schema |  Name  | Type | Owner 
--------+--------------+-------+------- 
public | exclude_test | table | craig 
public | prep_test | table | craig 
public | test   | table | craig 
public | testtable | table | craig 
public | testu  | table | craig 
public | testx  | table | craig 
(6 rows)