我需要知道PostgreSQL中的列类型(即varchar(20)
)。我知道我可能在psql中使用\d
的东西,但我需要用select查询来完成。
这在PostgreSQL中可能吗?查询PostgreSQL中表的模式细节?
6
A
回答
6
可以使用Postgres的使用以下查询完整的描述表:
SELECT
a.attname as Column,
pg_catalog.format_type(a.atttypid, a.atttypmod) as Datatype
FROM
pg_catalog.pg_attribute a
WHERE
a.attnum > 0
AND NOT a.attisdropped
AND a.attrelid = (
SELECT c.oid
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname ~ '^(TABLENAME)$'
AND pg_catalog.pg_table_is_visible(c.oid)
)
Tith这一点,你将检索列名和数据类型。
也可以使用-E
选项
$ psql -E
然后简单\d mytable
将输出使用的Postgres描述表查询开始PSQL客户端。它适用于每个psql describe命令。
2
是的,看看information_schema。
10
有一个简单得多在PostgreSQL的方式来获取列的类型。
SELECT pg_typeof(col)::text FROM tbl LIMIT 1
当然,表格必须至少包含一行。你只能得到没有类型修饰符的基类型(如果有的话)。如果您需要,也可以使用下面的替代方法。
您也可以使用常量函数。该manual on pg_typeof()
。
对于空(或)表,你可以使用查询系统目录pg_attribute
获取列的完整列表和它们各自的类型依次为:
SELECT attnum, attname AS column, format_type(atttypid, atttypmod) AS type
FROM pg_attribute
WHERE attrelid = 'myschema.mytbl'::regclass -- optionally schema-qualified
AND NOT attisdropped
AND attnum > 0
ORDER BY attnum;
手册上format_type()
和object identifier types像regclass
。
相关问题
- 1. PostgreSQL查询模式
- 2. 如何在PostgreSQL中查询含有注释的模式列表?
- 3. 了解postgresql/sql的细节
- 4. PostgreSQL中的宽度细节EXPLAIN命令
- 5. Django的 - 查询集获得所有相关的细节模型
- 6. 查询PostgreSQL中
- 7. 查询PostgreSQL中
- 8. 查询不提取正确的细节
- 9. TClientDataset在主细节不关闭细节查询
- 10. 的PostgreSQL - 查询表3
- 11. XML到PostgreSQL表的查询
- 12. Doctrine2/DBAL + Postgresql - public。在Doctrine查询中缺少模式|空查询的结果
- 13. PostgreSQL查询中具有模式匹配语法的参数
- 14. 节点js和postgresql查询锁?
- 15. PostgreSQL的查询
- 16. PostgreSQL的查询
- 17. LINQ查询只有那些细节
- 18. LINQ查询扁平化与子细节
- 19. PostgreSQL查询表列注释?
- 20. PostgreSQL 9.3:交叉表查询
- 21. 别名在postgresql查询中长时间重复的表达式
- 22. 模式中的子查询
- 23. 在PostgreSQL中执行单个查询的查询列表
- 24. 从视图模型查看细节
- 25. 在PostgreSQL中获取详细信息执行查询
- 26. postgreSQL中的递归查询?
- 27. PostgreSQL中的查询扩展
- 28. 在PostgreSQL中的SELECT查询
- 29. NPOCO中的Postgresql查询
- 30. curl中的postgresql查询
优秀的答案!我遇到了另一个问题,虽然:http://stackoverflow.com/questions/4336465/using-query-to-set-the-column-type-in-postgresql – David 2010-12-02 15:13:52
我不认为你需要那个正则表达式匹配,`` c.relname〜'^(TABLENAME)$'`相当于`c.relname ='TABLENAME'`。虽然很好的答案。 – 2010-12-02 18:11:20