PostgreSQL: Показуйте таблиці в PostgreSQL


Відповіді:


2660

З psqlінтерфейсу командного рядка,

Спочатку виберіть свою базу даних

\c database_name

Потім це показує всі таблиці в поточній схемі:

\dt

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

SELECT * FROM pg_catalog.pg_tables;

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


102
@StephenCorwin Ні, \lце еквівалент show databasesу MySQL. dtshow tablesі lshow databases
користувач454322

12
\dtдуже корисно. Це pg_catalog.pg_tablesнабагато менше, оскільки, здається, збираються внутрішні таблиці разом із створеними користувачем для будь-якої бази даних, до якої ви трапляєтеся.
aroth

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>вибрати свою базу даних.
danio

200

Вхід як суперпользователь:

sudo -u postgres psql

Ви можете перелічити всі бази даних та користувачів за \lкомандою (список інших команд за \?).

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


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 показує лише поточну схему, добре думати про це таким чином, mysql має лише одну базу даних, але декілька схем, де postgresql може мати змішані бази даних (каталоги) та схеми. Отже, еквівалент повинен бути table_schema = 'DB_NAME';
Ралі

Не зовсім стандартний sql, не можна використовувати "||" об'єднати рядки на
mssql

122

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

1. Почніть Psql

Зазвичай для запуску psql можна виконати таку команду:

psql DBNAME USERNAME

Наприклад, psql template1 postgres

Можливо, існує одна ситуація: припустимо, ви входите в систему як корінь, а ви не пам'ятаєте ім'я бази даних. Ви можете просто ввійти спочатку в 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. підключіться до потрібного db: 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;        
**************************

1
BTW, 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] списки таблиць


23

використовувати лише таблиці

=> \dt

якщо ви хочете переглянути таблиці схем

=>\dt+

якщо ви хочете переглянути конкретні таблиці схем

=>\dt schema_name.* 

Я впевнений , що ти плутаєш +з S. Останній (літера) показує таблиці схем. +Просто показує додаткову інформацію.
Гаррет Вілсон

20

Спочатку підключіться до бази даних за допомогою наступної команди

\c database_name

І ви побачите це повідомлення - You are now connected to database database_name. І вони виконують наступну команду

SELECT * FROM table_name;

У name_name_name_name_name_upload_name_upload_name_upload_upload_upload_upload_support_name_upload_upload_uploads_uploads_uploads_uploads_uploads


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


8

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

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


6

Ви можете перелічити таблиці в поточній базі даних за допомогою \dt .

Fwiw, \d tablename покаже подробиці щодо даної таблиці, щось на зразок show columns from tablenameMySQL, але з трохи більше інформації.


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

3

Перш за все, вам належить підключитися до вашої бази даних, як

моя база даних - ubuntu

використовуйте цю команду для підключення

 \c ubuntu

Це повідомлення буде показано

"Ви тепер підключені до бази даних" 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

як швидкий oneliner

# 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 пейджер вимкнений" відобразить їх у тому ж вікні, не перемикаючись на окрему. Любіть цю особливість до смерті в dbshell.



0

Спочатку введіть базу даних, яку потрібно підключити

\c database_name

Потім, це показує всі таблиці в поточній схемі:

\dt

-2

Спочатку ви можете підключитися до своєї бази даних postgres, використовуючи postgre.app на mac або використовуючи postico. Виконайте таку команду:

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

тоді ви вводите свій пароль, це повинно надати доступ до вашої бази даних

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.