Когда я выполняю \dt
в psql, я получаю только список таблиц в текущей схеме (по умолчанию public
).
Как я могу получить список всех таблиц во всех схемах или в определенной схеме?
Когда я выполняю \dt
в psql, я получаю только список таблиц в текущей схеме (по умолчанию public
).
Как я могу получить список всех таблиц во всех схемах или в определенной схеме?
Во всех схемах:
=> \dt *.*
В конкретной схеме:
=> \dt public.*
Можно использовать регулярные выражения с некоторыми ограничениями < / а>
\dt (public|s).(s|t)
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------
public | s | table | cpn
public | t | table | cpn
s | t | table | cpn
Опытные пользователи могут использовать нотации регулярных выражений, такие как классы символов, например [0-9], чтобы соответствовать любой цифре. Все специальные символы регулярных выражений работают, как указано в Разделе 9.7.3, за исключением
.
, который используется в качестве разделителя, как упомянуто выше,*
, который переводится в нотацию регулярного выражения.*
,?
, который переводится в.
, и$
, который является совпали буквально. При необходимости вы можете эмулировать эти символы шаблона, написав?
для.
,(R+|)
дляR*
или(R|)
дляR?
.$
не требуется в качестве символа регулярного выражения, поскольку шаблон должен соответствовать всему имени, в отличие от обычной интерпретации регулярных выражений (другими словами,$
автоматически добавляется к вашему шаблону). Напишите*
в начале и / или в конце, если вы не хотите, чтобы шаблон был привязан. Обратите внимание, что в двойных кавычках все специальные символы регулярных выражений теряют свое особое значение и сопоставляются буквально. Кроме того, специальные символы регулярных выражений буквально сопоставляются в шаблонах имен операторов (т. Е. Аргументе\do
).
\dt
эквивалентно \dt public.*
, я прав?
- person Frozen Flame; 25.08.2015
\dt public.user_info, public.user_scope
?
- person James M. Lay; 11.11.2015
\dt public.a; \dt public.b;
в одной строке.
- person James M. Lay; 11.11.2015
\dt "MySchema".*
- person Catfish; 20.05.2019
search_path
, а это по умолчанию "$user", public.*
. Следовательно, set search_path=s; \dt
будет перечислять все таблицы в схеме s
.
- person Lukas Juhrich; 25.01.2020
Вы можете выбрать таблицы из information_schema
SELECT * FROM information_schema.tables
WHERE table_schema = 'public'
AND table_type = 'BASE TABLE'
в предложение where.
- person SzieberthAdam; 14.07.2021
В качестве альтернативы information_schema
можно использовать pg_tables
:
select * from pg_tables where schemaname='public';
SELECT tablename FROM pg_tables WHERE schemaname = 'public';
- person Grant Humphries; 15.02.2016
information_schema
не перечисляет элементы из схемы public
, но метод pg_tables
работал нормально. Большое спасибо!
- person John Crawford; 09.01.2018
Для тех, кто столкнется с этим в будущем:
Если вы хотите увидеть список отношений для нескольких схем:
$psql mydatabase
mydatabase=# SET search_path TO public, usa; #schema examples
SET
mydatabase=# \dt
List of relations
Schema | Name | Type | Owner
--------+-----------------+-------+----------
public | counties | table | postgres
public | spatial_ref_sys | table | postgres
public | states | table | postgres
public | us_cities | table | postgres
usa | census2010 | table | postgres
Если вас интересует перечисление всех таблиц в конкретной схеме, я нашел этот ответ релевантным:
SELECT table_schema||'.'||table_name AS full_rel_name
FROM information_schema.tables
WHERE table_schema = 'yourschemaname';
AND table_type = 'BASE TABLE'
в предложение where.
- person SzieberthAdam; 14.07.2021