如何在PostgreSQL中仅列出表的属性名称

时间:2012-11-22 22:32:40

标签: sql database postgresql metadata

我知道我可以使用\ d列出架构。 但是,我需要创建一个前端应用程序来显示表的属性名称。如何在PostgreSQL中获取唯一的属性名称?

谢谢!

1 个答案:

答案 0 :(得分:4)

您需要在pg_cataloginformation_schema架构下查询相应的表。 运行psql -E ...,然后psql显示内部命令中使用的元数据查询,如\d, \dt, \dv, ...

information_schemapg_catalog相同,但更多的是portalbe(在SQL标准中定义)。如果您的应用仅使用postgres,那么我将使用pg_catalog而不是information_schema

例如,此查询显示attribute

的列
SELECT a.attname,
  pg_catalog.format_type(a.atttypid, a.atttypmod),
  (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128)
   FROM pg_catalog.pg_attrdef d
   WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef),
  a.attnotnull, a.attnum
FROM pg_catalog.pg_attribute a
WHERE a.attrelid = 'attribute'::regclass AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum

更新: 您可以使用这样的简单查询:

SELECT attname 
FROM pg_catalog.pg_attribute 
WHERE attrelid = 'attribute'::regclass AND attnum > 0 AND NOT attisdropped

或使用等效查询:

SELECT column_name 
FROM information_schema.columns 
WHERE table_name = 'attribute' 
ORDER BY ordinal_position

如果在多个模式中具有相同名称的同一个表,则还需要用户模式名称,并且查询稍微复杂一些。