在PostgreSQL中显示表结构和表列表

时间:2014-09-03 07:53:57

标签: postgresql

我曾在几个以前的项目中使用过MySQL。但现在有了 决定改用PostgreSQL。不是说版本8也适用于此, 我在工作中坚持使用其他操作系统。

但是,有两个最有用的命令似乎丢失了:

  • SHOW TABLES
  • DESCRIBE table

因为我的原型数据库在家里的NetBSD服务器上,而我的 等待基于的数据正在起作用,因此我必须通过连接 Perl / DBI和XML-RPC(不是psql,唉)。这里的IT部门只是说,"使用 MS-Access",所以没有帮助。

虽然我处于初始阶段,但我需要一个信息丰富的方式来犯错误 当我尝试不同的方式来构建这个东西时,看看是什么。 为此,我一直依赖MySQL的上述两个。

我无法相信PostgreSQL无法告诉我是什么 当前DB的表结构是通过远程执行的简单SQL查询。

肯定必须有。但我似乎无法从这对夫妇身上找到答案 我有的书。我挖出来的只是一些非常蹩脚的黑客来获取专栏名称 对于一个已知的表名,通过做一个" WHERE 1!= 1"或者其他一些 这样就不会返回实际的行。信息量不大。 当然,我在某个地方错过了这一点。

请赐教。请注意,PostgreSQL-ish SQL是什么 查询一个用于探索给定数据库的表结构?什么是 PostgreSQL翻译为" SHOW TABLES"和" DESCRIBE表"?

2 个答案:

答案 0 :(得分:25)

SHOW TABLESDESCRIBE TABLE是特定于MySQL的管理命令,与标准SQL无关。

你想要:

\d

\d+ tablename
来自psql

命令。

这些是在客户端实现的。我自己发现这很奇怪,并且希望有一天能将它们作为内置SQL命令在服务器端移动。

其他客户提供了浏览结构的其他方法 - 例如,PgAdmin-III。

如果您希望以可移植的方式在代码中获取表结构,则应使用information_schema视图,这些视图是SQL标准的。见information_schema。它们可以在MySQL,PostgreSQL,Ms-SQL和大多数其他数据库中使用。缺点是它们使用起来比较狡猾,因此当您只是浏览数据库结构时,它们不便于快速访问。

答案 1 :(得分:13)

根据Documentation

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');