2013-06-28 13 views
5

DBはテーブルがたくさんあります。(400と言ってください)、私は探している名前の一部を覚えています。PSQLのテーブル名を参照

私は\dがすべてのテーブルを表示することを知っていますが、それはあまりにも見るべきです。与えられた正規表現と名前が一致するすべてのテーブルをリストするコマンドがありますか?

おかげ

答えて

0

それにすべてのテーブル名を持っているpg_tablesと呼ばれるテーブルがあります。

2

あなたはそれをprocにしない限りはあまり便利ではありませんが、

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

さらに便利にするために、procを作成して呼び出すことができます。

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。これは、psqlのに組み込まれています

+0

'テーブル名' を追加することを忘れないでくださいWHERE SUBSTRING( '' FROMテーブル名)<> '';':

複数のワイルドカードは、例えば、許可されています – zerocog

8

、あなたは例えば、\d\dtなどでワイルドカードを使用することができます。

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) 

\dだけではなく、各テーブルの詳細が表示されますので、あなたは\dtを使用したいと思いますテーブルを一覧表示します。

あなたは、あまりにもスキーマで例えばこれを行うことができます:

\dt *.sometable 

は、任意のスキーマ内sometableという名前のすべてのテーブルが一覧表示されます。

pg_classには、pg_namespaceに、またはinformation_schemaには、クエリを書くよりもずっと便利です。

?は任意の単一の文字で、*は0文字以上の通常のグロブ構文が使用できます。したがって、\dt ????は4文字の名前を持つすべてのテーブルをリストします。あなただけpg_tables FROMテーブル名を選択 `テーブル名を必要とする場合

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) 
関連する問題