2014-09-03 71 views
3

我曾经为几个以前的项目使用过MySQL。但现在有 决定切换到PostgreSQL。不是版本8也适用于此, 和其他操作系统,我坚持在工作。在PostgreSQL中显示表结构和表的列表

但很可惜,两个最有用的命令似乎缺少:

  • SHOW TABLES
  • DESCRIBE table

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

虽然我处于初始阶段,但我需要一个内容丰富的方式来绕过 ,并看看我尝试用不同的方法来构建这个东西。 因为我一直依靠MySQL的上述两个。

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

当然必须有。但我似乎无法从 夫妇那里找到我拥有的书籍。我挖出的所有内容都是通过做一个“WHERE 1!= 1”或者其他一些 来获得已知表名的列名 ,这样就不会返回实际的行。不是很丰富,那。 当然,我错过了一点,在某个地方。

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

+1

有一些跨DBMS的工具,会做正是你。检查出Postgres Wiki:http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools – 2014-09-03 11:01:40

回答

4

由于每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'); 
+0

谢谢你这么多帮助 – 2014-09-09 00:40:25

4

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

您想要的:从psql

\d 

\d tablename 

命令。

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

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

如果您希望以便携的方式获取代码中的表结构,您应该使用information_schema视图,这些视图是SQL标准的。见information_schema。它们可用于MySQL,PostgreSQL,Ms-SQL和大多数其他数据库。缺点是它们很容易使用,所以在浏览数据库结构时不便于快速访问。

+0

顺便说一下,在$ this-> db-> query(“DESCRIBE accounts”)这样的sql上有适当的类型;在查询版本上这样的事情可以在命令上进行,但是在代码上就可以了。 – 2014-09-03 08:31:21

+1

@ user560756这绝对没有意义,但如果您的意思是“如何从Perl DBI或其他客户端显示表结构”,则答案是“使用'information_schema'”,这是标准方法。请参阅'information_schema.tables','information_schema.columns'等。这适用于MySQL,PostgreSQL,MS-SQL等等等。 – 2014-09-03 09:56:32