Як перерахувати всі бази даних та таблиці за допомогою psql?


1171

Я намагаюся навчитися адмініструванню PostgreSQL і почав вчитися користуватися інструментом psqlкомандного рядка.

Коли я входжу в систему psql --username=postgres, як перерахувати всі бази даних та таблиці?

Я спробував \d, dі , dS+але нічого не перераховано. Я створив дві бази даних та кілька таблиць з pgAdmin III, тому я знаю, що їх слід перерахувати.


1
Якщо ви хочете отримати доступ до нього через командний рядок, запустітьpsql -l
adriaan

Цей коментар, безумовно, повинен бути однією з найкращих відповідей! Якщо вам потрібен auth, ви також можете psql --username=postgres -l.
Уліссе БН

Відповіді:


1543

Зверніть увагу на наступні команди:

  • \listабо \l: список усіх баз даних
  • \dt: список усіх таблиць у поточній базі даних

Ви ніколи не побачите таблиці в інших базах даних, ці таблиці не будуть видимі. Вам потрібно підключитися до правильної бази даних, щоб побачити її таблиці (та інші об'єкти).

Для переключення баз даних:

\connect database_name або \c database_name

Дивіться посібник про psql .


131
Ви можете використовувати \c db_nameдля підключення до певної бази даних.
eikes

17
\dtне відображається список усіх таблиць у поточній базі даних (здається, виключає ті, яких не знайдено search_pathпринаймні 9.2)
Джек Дуглас

22
\dt *.відображатиме всі таблиці у всіх схемах, не змінюючи шлях пошуку.
danpelota

19
\ l + - це моє улюблене - воно також показує використання диска.
Лестер Чеун

1
У Windows я можу перелічити бази даних за допомогою цієї команди, psql -U username -lале це не працює з косою версією.
NoNameПроведений

350

Тут перелічені бази даних:

SELECT datname FROM pg_database
WHERE datistemplate = false;

Тут перераховані таблиці в поточній базі даних

SELECT table_schema,table_name
FROM information_schema.tables
ORDER BY table_schema,table_name;

11
Ви маєте рацію, але питання стосувалося мета-команд інструменту psql. \ dt набагато простіше, ніж набрати будь-який запит.
Френк Хайкенс

19
Я думаю, що це ВЕЛИКИЙ відповідь, тому що він може бути виконаний з командного рядка Linux, на відміну від необхідності бути в інтерпретаторі psql, який іноді зависає для мене за допомогою ExtraPutty.
Любов і мир - Джо Кодесвелл

2
Також врятував мій день. Для мого конкретного випадку я додаю, WHERE table_schema = 'public'тому що я хочу скинути просто власні таблиці.
Ренра

29
Якщо ви запускаєте psql зі знаком -E, він відображатиме справжній запит, коли ви використовуєте метакоманду.
Дібстер

Це хороша відповідь. Хоча ОП хотів метакоманди, я гуглю за це, і це привело мене до цього питання.
Викиньте рахунок

109

У Postgresql ці термінальні команди перераховують наявні бази даних

el@defiant$ /bin/psql -h localhost --username=pgadmin --list

Або команда, сказана простіше:

psql -U pgadmin -l

Ці команди друкують це на терміналі:

                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 kurz_prod | pgadmin  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 pgadmin   | pgadmin  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(5 rows)

Це доступні бази даних.

У PSQL ці команди перераховують наявні таблиці

Ви повинні вказати базу даних, перш ніж ви зможете перераховувати таблиці в цій базі даних.

el@defiant$ psql -U pgadmin -d kurz_prod

Це приведе вас до терміналу psql:

kurz_prod=#

Використовуйте \dзначення команди показувати всі таблиці, представлення та послідовності

kurz_prod=# \d

Це відбитки:

           List of relations
Schema |  Name   |   Type   |  Owner
--------+---------+----------+---------
public | mytable | table    | pgadmin
public | testing | sequence | pgadmin
(2 rows)

Потім, щоб вийти з терміналу psql, введіть \qта натисніть клавішу Enter. Або Ctrl-Dте ж саме. Це таблиці в цій базі даних.


4
\ d не просто перераховує таблиці:\d[S+] list tables, views, and sequences
Джек Дуглас

3
Для мене це "правильна" відповідь, оскільки вона не вимагає того, щоб ви вже були підключені до існуючої бази даних.
aardvarkk

71

\lтакож є скороченим для \list. Існує досить багато косої команди, яку ви можете перелічити в psql, використовуючи \?.


35

Щоб отримати більше інформації про список баз даних та таблиць, ви можете:

\l+ для переліку баз даних

                                                                    List of databases
    Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   | Tablespace |                Description
------------+----------+----------+-------------+-------------+-----------------------+---------+------------+--------------------------------------------
 pgbench    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 29 MB   | pg_default |
 postgres   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 6073 kB | pg_default | default administrative connection database
 slonmaster | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 1401 MB | movespace  |
 slonslave  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 32 MB   | pg_default |
 template0  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 5785 kB | pg_default | unmodifiable empty database
            |          |          |             |             | postgres=CTc/postgres |         |            |
 template1  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 5985 kB | pg_default | default template for new databases
            |          |          |             |             | postgres=CTc/postgres |         |            |
 test       | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 13 MB   | pg_default |
(7 rows)

і

\d+ перерахувати всі таблиці в поточній схемі search_path у поточній базі даних.

test=# \dn+ --list schemas
                          List of schemas
  Name  |  Owner   |  Access privileges   |      Description       
--------+----------+----------------------+------------------------
 public | postgres | postgres=UC/postgres+| standard public schema
        |          | =UC/postgres         | 
schema1 | postgres | postgres=UC/postgres+| 
        |          | =UC/postgres         | 
(2 row)

test=# set search_path to schema1, public;
SET
test=# \d+
                                  List of relations
     Schema  |      Name       | Type  |    Owner     |    Size    | Description
    ---------+-----------------+-------+--------------+------------+-------------
     public  | all_units       | table | postgres     | 0 bytes    |
     public  | asset           | table | postgres     | 16 kB      |
     public  | asset_attribute | table | postgres     | 8192 bytes |
     public  | food            | table | postgres     | 48 kB      |
     public  | name_log        | table | postgres     | 8192 bytes |
     public  | outable         | table | ordinaryuser | 0 bytes    |
     public  | outable2        | table | ordinaryuser | 0 bytes    |
     public  | test            | table | postgres     | 16 kB      |
     public  | usr             | table | postgres     | 5008 kB    |
     schema1 | t1              | table | postgres     | 0 bytes    |
    (10 rows)

33

З pg_Admin ви можете просто запустити наступне у вашій поточній базі даних, і він отримає всі таблиці за вказаною схемою:

SELECT * 
FROM information_schema.tables 
WHERE table_type = 'BASE TABLE' 
    AND table_schema = 'public' 
ORDER BY table_type, table_name

Ви отримаєте список усіх постійних таблиць (як правило, таблиць, які ви шукаєте). Ви можете отримати лише назви таблиць, якщо змінити *підстановку на лише table_name. Загальнодоступність table_schema- це схема за замовчуванням для більшості баз даних, якщо ваш адміністратор не встановив нову схему.


3
Незважаючи на те, що це правда, це стосується іншого клієнта, ніж про те, про що заявляла ОП.
dezso

Для мене це спрацювало чудово, і, хоча мій випадок використання не був саме тим, про що вимагала ОП, це допомогло мені отримати список таблиць під час підключення через обгортку (в Julialang LibPQ.jl )
Vass

19

Можливо, що ви вставили таблиці в схему, яка не знаходиться у вашому шляху пошуку, або за замовчуванням, тобто, загальнодоступні, і тому таблиці не відображатимуться за допомогою \ dt. Якщо ви використовуєте схему, яку називають, скажімо, дані, ви можете виправити це, запустивши,

alter database <databasename> set search_path=data, public;

Вийдіть і введіть psql і тепер \ dt також покаже вам таблиці в даних схеми.


1
Що ж, простий set search_path=data, public;теж зробив би трюк :)
dezso

@dezso, це робить зміни назавжди або просто в цьому сеансі psql?
Джон Пауелл

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