2013-06-28 6 views
5

Meine DB hat viele Tabellen (sagen 400+), und ich erinnere mich nur an einen Teil des Namens des einen, den ich suche.Nachschlagen Tabellennamen in PSQL

Ich weiß, \d würde alle Tabellen anzeigen, aber das ist zu viel zu sehen. Gibt es einen Befehl, um alle Tabellen aufzulisten, deren Namen der gegebenen Regex entsprechen?

Dank

Antwort

0

Es gibt eine Tabelle pg_tables genannt, die in ihm alle Tabellennamen hat.

2

Nicht sehr praktisch, es sei denn, Sie machen es zu einem Proc, aber;

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

Um es bequemer zu machen, können Sie einen Proc als erstellen und aufrufen;

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

Remember 'Tabellenname' hinzufügen, wenn Sie nur die Tabellennamen müssen SELECT FROM Tabellenname pg_tables WHERE SUBSTRING (Tabellenname FROM '') <> ''; ' – zerocog

8

Es ist gebaut, um psql, können Sie Platzhalter in \d, \dt, etc. verwendet werden, zB:

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) 

Sie wollen werden \dt seit \d verwenden Details für jede Tabelle angezeigt werden, nicht nur Liste die Tabelle auf.

Sie können dies auch mit Schemata tun, zum Beispiel:

\dt *.sometable 

werden alle Tabellen sometable in einem beliebigen Schema benannt.

Viel bequemer als das Schreiben von Abfragen gegen pg_class verbunden mit pg_namespace oder Abfrage information_schema.

Die übliche Globbing-Syntax wird akzeptiert, wobei ? ein einzelnes Zeichen ist und * null oder mehr Zeichen ist. So würde \dt ???? alle Tabellen mit vierstelligen Namen auflisten.

Mehrere Platzhalter sind zulässig, zB:

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)