Как вывести список баз данных и таблиц PostgreSQL с помощью psql
При администрировании серверов баз данных PostgreSQL одной из наиболее распространенных задач, которую вы, вероятно, будете выполнять, является перечисление баз данных и их таблиц.
PostgreSQL поставляется с интерактивным инструментом, psqlкоторый позволяет вам подключаться к серверу и выполнять запросы к нему. При использовании psqlвы также можете воспользоваться его мета-командами. Эти команды полезны для сценариев и администрирования командной строки. Все мета-команды начинаются с обратного слэша без кавычек и также известны как команды обратного слэша.
В этой статье объясняется, как использовать базы данных и таблицы на сервере PostgreSQL psql.
Листинг баз данных
Вы можете подключиться к серверу PostgreSQL, используя psqlкоманду как любой системный пользователь. В зависимости от конфигурации сервера пользователю может потребоваться ввести свой пароль для подключения к терминалу psql. Чтобы получить доступ к терминалу psql от имени пользователя, в который вы вошли, просто введите psql.
Когда пакет PostgreSQL установлен, создается административный пользователь с именем «postgres». По умолчанию этот пользователь может подключиться к локальному серверу PostgreSQL без пароля.
Чтобы получить доступ к psqlтерминалу как пользователь «postgres», запустите:
sudo -u postgres psql
Команда sudo позволяет запускать команды в качестве другого пользователя.
Из терминала psql выполните мета-команду \l или \list, чтобы вывести список всех баз данных:
Вывод будет включать количество баз данных, имя каждой базы данных, ее владельца, кодирование и привилегии доступа:
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+---------+---------+----------------------- odoo | odoo | UTF8 | C | C.UTF-8 | postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 | template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 rows)
Сервер PostgreSQL имеет три базы данных, созданные по умолчанию: template0, template1 и postgres. Первые два — это шаблоны, которые используются при создании новых баз данных.
Если вы хотите получить информацию о размерах баз данных, табличных пространствах по умолчанию и описаниях, используйте \l+ или \list+. Размер базы данных будет показан, только если текущий пользователь может подключиться к нему.
Чтобы получить список всех баз данных без доступа к оболочке psql, используйте переключатель -c, как показано ниже:
sudo -u postgres psql -c "\l"
Другой способ составить список баз данных — использовать следующий оператор SQL:
SELECT datname FROM pg_database;
В отличие от мета-команды \l, приведенный выше запрос покажет только имена баз данных:
datname ----------- postgres odoo template1 template0 (4 rows)
Таблицы списков
Чтобы получить список всех таблиц конкретной базы данных сначала необходимо подключиться к нему с помощью мета-команды \c или \connect. Пользователь, вошедший в систему как терминал psql, должен иметь возможность подключаться к базе данных.
Например, чтобы подключиться к базе данных с именем «odoo», вы должны набрать:
\c odoo
Как только база данных переключена, используйте мета-команду \dt для вывода списка всех таблиц базы данных:
Вывод будет включать количество таблиц, имя каждой таблицы и ее схему, тип и владельца:
List of relations Schema | Name | Type | Owner --------+-----------------------------------------------------+-------+------- public | base_import_import | table | odoo public | base_import_mapping | table | odoo public | base_import_tests_models_char | table | odoo . public | web_editor_converter_test_sub | table | odoo public | web_tour_tour | table | odoo public | wizard_ir_model_menu_create | table | odoo (107 rows)
Если база данных пуста, вывод будет выглядеть так:
No relations found.
Для получения информации о размерах таблиц и описаний используйте \dt+.
Заключение
Вы узнали, как составлять список баз данных и таблиц PostgreSQL с помощью команды psql.
Не стесняйтесь оставлять комментарии, если у вас есть какие-либо вопросы.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Как в PostgreSQL вывести все названия таблиц и определенные столбцы из каждой?
Подскажите, не знаю как выполнить SQL запрос так, чтобы я обратился ко всем таблицам в схеме, выбрал оттуда значения определенных столбцов и затем записал бы в переменную в виде: 1)table_name-column
2)table_name-column
- Вопрос задан более года назад
- 973 просмотра
Комментировать
Решения вопроса 1
Дмитрий @iMedved2009
Не люблю людей
SELECT table_name, column_name FROM information_schema.columns WHERE table_catalog = 'имя базы' and table_schema = 'public' order by table_name;
Ответ написан более года назад
Комментировать
Нравится Комментировать
Ответы на вопрос 2
Нужные Вам данные хранятся здесь information_schema.columns. Запрос довольно простой: поиск по схеме и объединение двух колонок.
Ответ написан более года назад
Комментировать
Нравится Комментировать
mayton2019 @mayton2019
Bigdata Engineer
Сбор мета-данных по БД — это та часть SQL которая не урегулирована стандартом. И каждый вендор БД делают свои имена справочников таблиц. У Постгреса это будет information_schema.columns у Oracle — ALL_TAB_COLUMNS и т.д.
Среди CLI инструментов тоже нет единого видения как собирать данные о схеме. Разные команды листинга.
Единственную попытку стандартизировать я видел в семействе Java JDBC драйверов. Там с помощью интерфейсов DatabaseMetaData, ResultSet и Connection программист может собрать мету о таблицах.
Получить список таблиц конкретной базы данных postgres?
Есть несколько баз, нужно для конкретной базы (по имени) вывести все таблицы. Помогите, пожалуйста, составить запрос.
- Вопрос задан более трёх лет назад
- 3387 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 1
Руководитель разработки Postgres Professional
Вот такой запрос выведет список имен таблиц (а также имен схем, где они расположены) для текущей БД.
SELECT n.nspname, c.relname FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind = 'r' AND n.nspname NOT IN('pg_catalog', 'information_schema');
Посмотреть список таблиц другой БД (не той, к которой подключен) – нельзя. Нужно подключаться к каждой БД отдельно.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Как посмотреть структуру таблицы sql
Можно посмотреть колонки таблицы и тип данных через, например, pgAdmin .
Также через psql можно выполнить запрос вида:
SELECT column_name, column_default, data_type FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'super_table';
Этот запрос вернёт название колонки, её значение по умолчанию, а также тип данных.