我需要编写一个脚本,从PostgreSQL数据库输出我不知道结构的数据.什么查询将返回数据库中所有表的名称?什么查询将列出表中所有列的名称?
nad*_*000 46
数据库查询工具psql是PostgreSQL发行版的一部分,提供表描述功能.
# psql postgres postgres
psql (9.1.0)
Type "help" for help.
postgres=# -- list all tables:
postgres=# \d
List of relations
Schema | Name | Type | Owner
--------+-----------+-------+----------
public | my_table | table | postgres
public | my_table2 | table | postgres
(2 rows)
postgres=# -- describe table:
postgres=# \d my_table
Table "public.my_table"
Column | Type | Modifiers
--------+---------+-----------
col1 | integer |
col2 | text |
Run Code Online (Sandbox Code Playgroud)
你可以得到的其余psql命令\?:
postgres=# \?
General
\copyright show PostgreSQL usage and distribution terms
\g [FILE] or ; execute query (and send results to file or |pipe)
\h [NAME] help on syntax of SQL commands, * for all commands
\q quit psql
Query Buffer
\e [FILE] [LINE] edit the query buffer (or file) with external editor
\ef [FUNCNAME [LINE]] edit function definition with external editor
\p show the contents of the query buffer
\r reset (clear) the query buffer
\s [FILE] display history or save it to file
\w FILE write query buffer to file
Input/Output
\copy ... perform SQL COPY with data stream to the client host
\echo [STRING] write string to standard output
\i FILE execute commands from file
\o [FILE] send all query results to file or |pipe
\qecho [STRING] write string to query output stream (see \o)
Informational
(options: S = show system objects, + = additional detail)
\d[S+] list tables, views, and sequences
\d[S+] NAME describe table, view, sequence, or index
\da[S] [PATTERN] list aggregates
\db[+] [PATTERN] list tablespaces
\dc[S] [PATTERN] list conversions
\dC [PATTERN] list casts
\dd[S] [PATTERN] show comments on objects
\ddp [PATTERN] list default privileges
\dD[S] [PATTERN] list domains
\det[+] [PATTERN] list foreign tables
\des[+] [PATTERN] list foreign servers
\deu[+] [PATTERN] list user mappings
\dew[+] [PATTERN] list foreign-data wrappers
\df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions
\dF[+] [PATTERN] list text search configurations
\dFd[+] [PATTERN] list text search dictionaries
\dFp[+] [PATTERN] list text search parsers
\dFt[+] [PATTERN] list text search templates
\dg[+] [PATTERN] list roles
\di[S+] [PATTERN] list indexes
\dl list large objects, same as \lo_list
\dL[S+] [PATTERN] list procedural languages
\dn[S+] [PATTERN] list schemas
\do[S] [PATTERN] list operators
\dO[S+] [PATTERN] list collations
\dp [PATTERN] list table, view, and sequence access privileges
\drds [PATRN1 [PATRN2]] list per-database role settings
\ds[S+] [PATTERN] list sequences
\dt[S+] [PATTERN] list tables
\dT[S+] [PATTERN] list data types
\du[+] [PATTERN] list roles
\dv[S+] [PATTERN] list views
\dE[S+] [PATTERN] list foreign tables
\dx[+] [PATTERN] list extensions
\l[+] list all databases
\sf[+] FUNCNAME show a function's definition
\z [PATTERN] same as \dp
Formatting
\a toggle between unaligned and aligned output mode
\C [STRING] set table title, or unset if none
\f [STRING] show or set field separator for unaligned query output
\H toggle HTML output mode (currently off)
\pset NAME [VALUE] set table output option
(NAME := {format|border|expanded|fieldsep|footer|null|
numericlocale|recordsep|tuples_only|title|tableattr|pager})
\t [on|off] show only rows (currently off)
\T [STRING] set HTML <table> tag attributes, or unset if none
\x [on|off] toggle expanded output (currently off)
Connection
\c[onnect] [DBNAME|- USER|- HOST|- PORT|-]
connect to new database (currently "postgres")
\encoding [ENCODING] show or set client encoding
\password [USERNAME] securely change the password for a user
\conninfo display information about current connection
Operating System
\cd [DIR] change the current working directory
\timing [on|off] toggle timing of commands (currently off)
\! [COMMAND] execute command in shell or start interactive shell
Variables
\prompt [TEXT] NAME prompt user to set internal variable
\set [NAME [VALUE]] set internal variable, or list all if no parameters
\unset NAME unset (delete) internal variable
Large Objects
\lo_export LOBOID FILE
\lo_import FILE [COMMENT]
\lo_list
\lo_unlink LOBOID large object operations
Run Code Online (Sandbox Code Playgroud)
CTT*_*CTT 37
SELECT table_name
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
AND table_schema NOT IN
('pg_catalog', 'information_schema');
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'YourTablesName';
Run Code Online (Sandbox Code Playgroud)
此页面提供了一些有关从information_schema检索信息的重要信息:http://www.alberton.info/postgresql_meta_info.html
使用ANSI information_schema视图
select * from information_schema.tables
select * from information_schema.columns
Run Code Online (Sandbox Code Playgroud)
我知道这是在线程启动后的5年,但我想为目前为止提出的解决方案添加一些细微的变化,以防它帮助其他人(最终,这是我必须提出的).
上面的潜在问题是,如果对具有数百个表和数千个字段的数据库天真地实现,开发人员可能首先查询该组表,然后在循环内查询每个表的所有字段.这会破坏数据库服务器.我知道没有人特别建议使用循环,但没有人警告过它.坦率地说,它有点隐含在答案结构的方式中,因为它们有效地说"首先查询所有表,然后查询所有字段".转换为代码,该过程实际上不能是循环之外的任何东西.
完成原始问题的更好方法(imo)是运行如下查询:
SELECT table_schema, table_name, column_name
FROM information_schema.columns
WHERE table_schema in ('a', 'b', 'c', 'd')
Run Code Online (Sandbox Code Playgroud)
其中a,b,c,d,...是表格中你需要清楚表达的模式.
这为您提供了一个未规范化的数据集,但这并不重要,因为您无论如何都要使用应用程序 - 在应用层以您需要的方式解析结果并且您只需点击它数据库服务器有一个超轻量级查询,而不是循环内的数百个.
无论如何,希望能帮助别人!
| 归档时间: |
|
| 查看次数: |
61604 次 |
| 最近记录: |