我曾在几个以前的项目中使用过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表"?
答案 0 :(得分:25)
SHOW TABLES
和DESCRIBE TABLE
是特定于MySQL的管理命令,与标准SQL无关。
你想要:
\d
和
\d+ tablename
来自psql
的命令。
这些是在客户端实现的。我自己发现这很奇怪,并且希望有一天能将它们作为内置SQL命令在服务器端移动。
其他客户提供了浏览结构的其他方法 - 例如,PgAdmin-III。
如果您希望以可移植的方式在代码中获取表结构,则应使用information_schema
视图,这些视图是SQL标准的。见information_schema
。它们可以在MySQL,PostgreSQL,Ms-SQL和大多数其他数据库中使用。缺点是它们使用起来比较狡猾,因此当您只是浏览数据库结构时,它们不便于快速访问。
答案 1 :(得分:13)
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');