在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 TABLES
和 DESCRIBE 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.tables
、information_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中显示表结构和表列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章