在PostgreSQL中显示表结构和表列表[重复]

Posted

技术标签:

【中文标题】在PostgreSQL中显示表结构和表列表[重复]【英文标题】:Show table structure and list of tables in PostgreSQL [duplicate] 【发布时间】:2014-10-27 15:29:17 【问题描述】:

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

但是很遗憾,似乎缺少两个最有用的命令:

SHOW TABLES DESCRIBE table

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

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

我不敢相信 PostgreSQL 没有办法告诉我 当前数据库的表结构是通过远程执行的简单 SQL 查询。

肯定有。但我似乎无法从这对夫妇中找到 我有的书。我挖出的只是一些超级蹩脚的黑客来获取列名 通过执行“WHERE 1 != 1”或类似的操作来获取已知的表名 这样就不会返回实际的行。不是很丰富,那个。 我肯定在某个地方错过了重点。

所以请赐教。请告诉我,PostgreSQL 风格的 SQL 是什么? 使用查询来探索给定数据库的表结构?什么是 “SHOW TABLES”和“DESCRIBE table”的 PostgreSQL 翻译?

【问题讨论】:

有一些跨 DBMS 工具可以为您做到这一点。查看 Postgres Wiki:wiki.postgresql.org/wiki/… 【参考方案1】:

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

你想要:

\d

\d+ tablename

来自psql的命令。

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

其他客户端提供其他方式来浏览结构 - 例如,PgAdmin-III。

如果您想以一种可移植的方式在代码中获取表结构,您应该使用 SQL 标准的 information_schema 视图。见information_schema。它们在 MySQL、PostgreSQL、Ms-SQL 和大多数其他数据库中可用。缺点是它们使用起来比较复杂,所以当您只是浏览数据库结构时,它们不方便快速访问。

【讨论】:

顺便说一句,sql 上有正确的类型,比如 $this->db->query("DESCRIBE accounts");在查询版本上这样的东西在命令上是可以的,但是当你在上面编码时。 @user560756 这绝对没有意义,但如果你的意思是“我如何从 Perl DBI 或其他客户端显示表结构”,答案是“使用information_schema”,这是标准方式。请参阅information_schema.tablesinformation_schema.columns 等。这适用于 MySQL、PostgreSQL、MS-SQL 等。 我还想补充一点,“tablename”或“Tablename”应该更好,因为如果您的表格有大写字母,否则它不会找到它。错误也将是:没有找到任何名为“表名”的关系 - 当您键入它时,保留大小写。因此很难弄清楚出了什么问题。【参考方案2】:

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

【讨论】:

以上是关于在PostgreSQL中显示表结构和表列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

怎样将postgresql数据迁移到oracle中

在 postgresql 中显示主表列表

在 PostgreSQL 中为特定模式和表所有者创建表的过程是啥

怎样设置PostgreSQL中字段和表名对大小写敏感

怎样设置PostgreSQL中字段和表名对大小写敏感

Qt 模型的树视图和表视图