2012-09-17 51 views
1

在PostgreSQL中,我們可以使用客戶端終端中的\d命令列出數據庫中的表,但它在客戶端JDBC程序中失敗。可能嗎?爲什麼?爲什麼不?「 d」在jdbc程序中失敗

+0

要詳細說明@ a_horse_with_no_name的答案,所有反斜槓命令都是'psql',而不是服務器端理解的。通過運行'psql -E',你可以看到他們做了什麼,但是通常有一種比psql'更方便或標準的方式來實現 - 例如通過'information_schema',而'psql'通常會使用'pg_catalog' 。 –

+0

@CraigRinger「便攜式」是什麼意思?一個Postgres與另一個Postgres有什麼區別?跨操作系統? – manuzhang

+0

在不同的SQL數據庫系統之間可移植,大多數情況下,您需要在MS SQL Server,Oracle,MySQL等上運行。您使用較少移植麻煩的標準內容更多。在'pg_catalog'的情況下,它也從Pg主版本轉換爲Pg主版本,而'information_schema'沒有接近任何地方(它的結構由SQL標準設置)。儘可能使用'information_schema'可以使升級變得更容易。 –

回答

3

\d是一個psql命令,不是SQL語句。

要獲取數據庫中可用的表,您應該使用JDBC API,例如DatabaseMetaData.getTables()

或者,您可以運行

select table_schema, table_name 
from information_schema.tables 

要獲得表名的列表。

1

選擇SCHEMANAME,relname

從pg_stat_user_tables和

這將列出所有用戶表,

INFORMATION_SCHEMA.TABLES將列出所有用戶表和表屬於架構 「INFORMATION_SCHEMA和pg_catalog」

+0

確切的,謝謝! – manuzhang