PostgreSQL: Показать таблицы в PostgreSQL

Ответы:

2661

Из psqlинтерфейса командной строки

Сначала выберите вашу базу данных

\c database_name

Затем это показывает все таблицы в текущей схеме:

\dt

Программно (или из psqlинтерфейса тоже, конечно):

SELECT * FROM pg_catalog.pg_tables;

Системные таблицы живут в pg_catalogбазе данных.

Михай Лимбакан
источник
102
@StephenCorwin Нет, \lэквивалент show databasesв MySQL. dtshow tablesи lshow databases
user454322
12
\dtэто очень полезно. Это pg_catalog.pg_tablesнамного меньше, поскольку кажется, что внутренние таблицы объединяются с созданными пользователем таблицами для любой базы данных, к которой вы подключены.
июня
33
psql my_db_nameдолжен быть запущен, \dtчтобы работать. Когда я бежал psqlбез имени базы данных, я получал сообщение «Не найдено ни одного отношения»
Максим Дмитриев
31
Без системных таблиц:SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'
Мэтт Уайт
39
Сначала вам нужно \c <DATABASE_NAME>выбрать базу данных.
Данио
201

Войти как суперпользователь:

sudo -u postgres psql

Вы можете перечислить все базы данных и пользователей по \lкоманде (список других команд по \?).

Теперь, если вы хотите увидеть другие базы данных, вы можете изменить пользователя / базу данных с помощью \cкоманды, например \c template1, \c postgres postgresи использовать \d, \dtили \dSдля просмотра таблиц / представлений / и т.д.

JLarky
источник
1
Это лучший ответ, так как обычно может быть установлено более одной базы данных.
Джером
Это было очень полезно. Спасибо.
Обещание Престона
123

(Для полноты)

Вы также можете запросить (стандарт SQL) информационную схему :

SELECT
    table_schema || '.' || table_name
FROM
    information_schema.tables
WHERE
    table_type = 'BASE TABLE'
AND
    table_schema NOT IN ('pg_catalog', 'information_schema');
Милен А. Радев
источник
3
+1 хотя для полноты, mysql show tables показывает только текущую схему, хорошо подумать об этом таким образом, mysql имеет только одну базу данных, но несколько схем, где postgresql может иметь несколько баз данных (каталогов) и схем. Таким образом, эквивалентом должно быть table_schema = 'DB_NAME';
Рахли
Не совсем стандартный SQL, не может использовать "||" объединить строки в mssql
ChRoNoN
123

Вы можете использовать интерактивный терминал PostgreSQL Psql для отображения таблиц в PostgreSQL.

1. Запустите Psql

Обычно вы можете запустить следующую команду для входа в psql:

psql DBNAME USERNAME

Например, psql template1 postgres

Вы можете столкнуться с одной ситуацией: предположим, что вы вошли в систему как root, и вы не помните имя базы данных. Вы можете просто войти сначала в Psql, запустив:

sudo -u postgres psql

В некоторых системах команда sudo недоступна, вместо этого вы можете запустить любую из следующих команд:

psql -U postgres
psql --username=postgres

2. Показать таблицы

Теперь в Psql вы можете запускать такие команды, как:

  1. \? перечислить все команды
  2. \l список баз данных
  3. \conninfo отображать информацию о текущем соединении
  4. \c [DBNAME] подключиться к новой базе данных, например, \c template1
  5. \dt список таблиц общедоступной схемы
  6. \dt <schema-name>.* список таблиц определенной схемы, например, \dt public.*
  7. \dt *.* список таблиц всех схем
  8. Затем вы можете запустить операторы SQL, например, SELECT * FROM my_table;(Примечание: оператор должен заканчиваться точкой с запятой ;)
  9. \q выйти из PSQL
Юйцы
источник
52
  1. Первый вход в систему как пользователь postgres:

    sudo su - postgres

  2. подключиться к нужной БД: psql -d databaseName

  3. \dt вернет список всех таблиц в базе данных, к которой вы подключены.

Ниша
источник
40

Запуск psql с флагом -E отобразит запрос, используемый внутри для реализации \ dt, и тому подобное:

sudo -u postgres psql -E

postgres=# \dt       
********* QUERY **********
SELECT n.nspname as "Schema",
c.relname as "Name", 
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as "Type",
pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
    AND n.nspname <> 'pg_catalog'
    AND n.nspname <> 'information_schema'
    AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;        
**************************
BSB
источник
1
Кстати, TOAST используется для хранения больших значений: postgresql.org/docs/8.3/static/storage-toast.html
Дориан,
39

Войдите в систему как суперпользователь, чтобы вы могли проверить все базы данных и их схемы: -

sudo su - postgres

Затем мы можем попасть в оболочку postgresql с помощью следующей команды: -

psql

Теперь вы можете проверить весь список баз данных с помощью следующей команды: -

\l

Если вы хотите проверить размеры баз данных, также используйте: -

\l+

Нажмите, qчтобы вернуться.

Как только вы нашли свою базу данных, вы можете подключиться к ней, используя следующую команду: -

\c database_name

После подключения вы можете проверить таблицы базы данных или схему с помощью: -

\d

Теперь, чтобы вернуться к оболочке, используйте: -

q

Теперь для дальнейшего просмотра деталей определенной таблицы используйте: -

\d table_name

Чтобы вернуться к postgresql_shell, нажмите \q.

И чтобы вернуться обратно в терминал нажмите exit.

Шашишехар Хасабнис
источник
24

Если вы хотите видеть только список созданных вами таблиц, вы можете только сказать:

\dt

Но у нас также есть, PATTERNкоторые помогут вам настроить, какие таблицы показывать. Чтобы показать все, включая pg_catalogсхемы, вы можете добавить *.

\dt *

Если вы делаете: \?

\ dt [S +] [PATTERN] список таблиц

Banned_User
источник
23

использовать только видеть таблицы

=> \dt

если хотите увидеть таблицы схемы

=>\dt+

если вы хотите увидеть конкретные таблицы схем

=>\dt schema_name.* 
арийский
источник
Я уверен , что ты путаешь +с S. Последний (буква) показывает таблицы схемы. +Просто показывает дополнительную информацию.
Гаррет Уилсон
20

Сначала соединитесь с базой данных, используя следующую команду

\c database_name

И вы увидите это сообщение You are now connected to database database_name. И они запускают следующую команду

SELECT * FROM table_name;

В database_name и table_name просто обновите свою базу данных и имя таблицы

J4cK
источник
20
Я не уверен, что это отвечает на вопрос. Я думаю, что ОП пытается (пытался) узнать все таблицы в своей базе данных, а не получить все строки из определенной таблицы в своей базе данных ... верно?
прижимается
16

Если вы используете pgAdmin4 в PostgreSQL, вы можете использовать это для отображения таблиц в вашей базе данных:

select * from information_schema.tables where table_schema='public';
Рейнанте Дайтол
источник
14

Обратите внимание, что \dtодин будет перечислять таблицы в общедоступной схеме базы данных, которую вы используете. Мне нравится хранить мои таблицы в отдельных схемах, поэтому принятый ответ не работает для меня.

Чтобы перечислить все таблицы в определенной схеме , мне нужно было:

1) Подключиться к нужной базе данных:

psql mydb

2) Укажите имя схемы, для которой я хочу видеть таблицы после \dtкоманды, например:

\dt myschema.*

Это показывает мне результаты, которые меня интересуют:

               List of relations
 Schema   |       Name      | Type  |  Owner   
----------+-----------------+-------+----------
 myschema | users           | table | postgres
 myschema | activity        | table | postgres
 myschema | roles           | table | postgres
rotarydial
источник
12
select 
  * 
from 
  pg_catalog.pg_tables 
where 
  schemaname != 'information_schema' 
  and schemaname != 'pg_catalog';
Абдельхак Охамму
источник
8

\ dt (no * обязательный) - перечислит все таблицы для существующей базы данных, к которой вы уже подключены. Также полезно отметить:

\ d [имя_таблицы] - покажет все столбцы для данной таблицы, включая информацию о типе, ссылки и ключевые ограничения.

user4642897
источник
6

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

Fwiw, \d tablenameпокажет детали о данной таблице, что-то вроде show columns from tablenameMySQL, но с немного большей информацией.

JohnK
источник
5

Использование psql : \ dt

Или:

SELECT c.relname AS Tables_in FROM pg_catalog.pg_class c
        LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE pg_catalog.pg_table_is_visible(c.oid)
        AND c.relkind = 'r'
        AND relname NOT LIKE 'pg_%'
ORDER BY 1
MisterJoyson
источник
3

Прежде всего, вы должны связаться с вашей базой данных, как

моя база данных Ubuntu

используйте эту команду для подключения

 \c ubuntu

Это сообщение покажет

Msgstr "Вы подключены к базе данных" ubuntu "как пользователь" postgres "."

Сейчас же

Запустите эту команду, чтобы показать все таблицы в нем

\d+
Усман Якуб
источник
3

На мой вкус самый простой способ перечислить все таблицы в командной строке:

psql -a -U <user> -p <port> -h <server> -c "\dt"

Для данной базы данных просто добавьте имя базы данных:

psql -a -U <user> -p <port> -h <server> -c "\dt" <database_name>

Работает как на Linux, так и на Windows.

Ален Черпин
источник
3

как быстрый вкладчик

# just list all the postgres tables sorted in the terminal
db='my_db_name'
clear;psql -d $db -t -c '\dt'|cut -c 11-|perl -ne 's/^([a-z_0-9]*)( )(.*)/$1/; print'

или, если вы предпочитаете более понятный многострочный вывод json:

IFS='' read -r -d '' sql_code <<"EOF_CODE"
    select array_to_json(array_agg(row_to_json(t))) from (
        SELECT table_catalog,table_schema,table_name 
        FROM information_schema.tables
        ORDER BY table_schema,table_name ) t
EOF_CODE
psql -d postgres -t -q -c "$sql_code"|jq
Йордан Георгиев
источник
1

\ dt выведет список таблиц, и "\ pset pager off" покажет их в том же окне, не переключаясь на отдельное. Люблю эту особенность до смерти в dbshell.

lauri108
источник
0

Чтобы просмотреть сторонние таблицы в psql, запустите \dE

Ян Хантер
источник
0

Сначала укажите, к какой базе данных нужно подключиться

\c database_name

Затем это показывает все таблицы в текущей схеме:

\dt
Poonkodi
источник
-2

Сначала вы можете подключиться к своей базе данных postgres, используя postgre.app на Mac или используя postico. Запустите следующую команду:

psql -h localhost -p port_number -d database_name -U user_name -W

затем вы вводите свой пароль, это должно дать доступ к вашей базе данных

Patcho
источник