2013-06-28 4 views
5

В моей базе данных есть много таблиц (Скажем 400+), и я помню только часть имени той, которую я ищу.искать имена таблиц в PSQL

Я знаю, что \d будет показывать все таблицы, но это слишком много, чтобы посмотреть. Есть ли какая-либо команда для перечисления всех таблиц, имена которых соответствуют заданному регулярному выражению?

Благодаря

ответ

0

Существует таблица называется pg_tables, который имеет все имена таблиц в ней.

2

Не очень удобно, если вы не сделаете его проком, но;

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.

+0

Не забудьте добавить 'имя_таблицы', если вам просто нужно tablenames 'ВЫБРАТЬ имя_таблицы FROM pg_tables WHERE SUBSTRING (имя_таблицы FROM '') <> ''; ' – zerocog

8

Он встроен в PSQL, Вы можете использовать подстановочные знаки в \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) 

Вы хотите использовать \dt так \d покажет детали для каждой таблицы, а не только перечислите таблицу.

Вы можете сделать это с помощью схем тоже, например:

\dt *.sometable 

будут перечислены все таблицы с именем sometable в любой схеме.

Гораздо удобнее, чем писать запросы от pg_class, соединенных с pg_namespace или запросов information_schema.

Принят обычный синтаксис globbing, где ? - любой символ, а * - ноль или более символов. Таким образом, \dt ???? будет перечислять все таблицы с четырьмя символами.

Множественные разрешено использование шаблонов, например:

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)