Показать структуру таблицы и список таблиц в PostgreSQL
Я использовал MySQL для нескольких предыдущих проектов. Но теперь
решил перейти на PostgreSQL. Не то, что версия 8 также работает над этим,
а также другие ОС, которые я застрял на работе.
Но, увы, две из самых полезных команд, кажется, отсутствуют:
-
SHOW TABLES
-
DESCRIBE table
Поскольку моя прототипирующая БД находится на моем сервере NetBSD дома, в то время как моя
данные, ожидающие быть на основе, работают, так что я должен подключиться через
Perl/DBI и XML-RPC (не psql, увы). ИТ-отдел здесь просто говорит: "Используйте
MS-Access ", поэтому не помогайте там.
Пока я нахожусь на начальной стадии, мне нужен информативный способ промахнуться
вокруг и посмотреть, что, как я пытаюсь разными способами построить эту вещь.
Для этого я всегда полагался на два выше из MySQL.
Я не могу поверить, что PostgreSQL не может сказать мне, что
текущая структура таблицы БД осуществляется через простые SQL-запросы, выполненные удаленно.
Конечно, должно быть. Но я не могу понять, что
книги, которые у меня есть. Все, что я раскопал, было некоторым ультра-хромым взломом, чтобы получить имена столбцов
для уже известного имени таблицы, сделав "WHERE 1!= 1" или некоторые такие
так что никакие фактические строки не могут быть возвращены. Не очень информативно, что.
Наверняка я пропустил точку, где-то.
Так просветите меня, пожалуйста. Что, скажите, это PostgreSQL-ish SQL
запросы, которые используются для изучения данной структуры таблицы БД? Что
перевод PostgreSQL для "SHOW TABLES" и "DESCRIBE table"?
Ответы
Ответ 1
Согласно документации
SELECT
table_schema || '.' || table_name as show_tables
FROM
information_schema.tables
WHERE
table_type = 'BASE TABLE'
AND
table_schema NOT IN ('pg_catalog', 'information_schema');
для большего удобства сделайте это как функцию
create or replace function show_tables() returns SETOF text as $$
SELECT
table_schema || '.' || table_name as show_tables
FROM
information_schema.tables
WHERE
table_type = 'BASE TABLE'
AND
table_schema NOT IN ('pg_catalog', 'information_schema');
$$
language sql;
Таким образом, мы можем получить таблицы, используя
select show_tables()
Для описания таблицы
select column_name, data_type, character_maximum_length
from INFORMATION_SCHEMA.COLUMNS where table_name ='table_name';
как функция
create or replace function describe_table(tbl_name text) returns table(column_name
varchar, data_type varchar,character_maximum_length int) as $$
select column_name, data_type, character_maximum_length
from INFORMATION_SCHEMA.COLUMNS where table_name = $1;
$$
language 'sql';
select * from describe_table('a_table_name');
Ответ 2
SHOW TABLES
и DESCRIBE TABLE
являются специфичными для MySQL командами администратора и не имеют ничего общего со стандартным SQL.
Вы хотите:
\d
а также
\d+ tablename
команды от psql
.
Они реализованы на стороне клиента. Я нахожу это странным и хотел бы переместить их на стороне сервера в качестве встроенных команд SQL однажды.
Другие клиенты предоставляют другие способы просмотра структуры - например, PgAdmin-III.
Если вам нужен переносимый способ получить структуру таблицы в коде, вы должны использовать представления information_schema
, которые являются стандартом SQL. Смотрите information_schema
. Они доступны в MySQL, PostgreSQL, Ms-SQL и большинстве других БД. Недостатком является то, что они более удобны в использовании, поэтому они не удобны для быстрого доступа, когда вы просто просматриваете структуру БД.