2014-09-03 146 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