我可以从数据类型中选择一个字段/列吗?
Postgres 7.4(是的,我们正在升级)
SELECT *
FROM tbl_name
WHERE tbl_name.column = 'timestamp with time zone'
我可以从数据类型中选择一个字段/列吗?
Postgres 7.4(是的,我们正在升级)
SELECT *
FROM tbl_name
WHERE tbl_name.column = 'timestamp with time zone'
这需要元数据。
select column_name
from information_schema.columns
where table_schema='your_schema'
and table_name='tbl_name'
and data_type='timestamp without time zone'
order by ordinal_position;
ETA:如果您想要表中列名与上面列表匹配的实际数据,您可以设置一个用户定义的函数来获取这些列名,将它们放在逗号分隔的列表中,然后从tbl_name 适当(当然,如果您使用稍微在数据库之外的脚本语言工作,这会容易得多)。
我最近不得不这样做。为了简化事情,我定义了两个视图:
CREATE VIEW view_table_columns AS
SELECT n.nspname AS schema, cl.relname AS table_name,
a.attname AS column_name, ty.typname AS data_type,
a.attnotnull AS nnull,
a.atthasdef AS hasdef,
descr.description AS descr, cl.oid AS tableoid, a.attnum AS colnum
FROM pg_attribute a
JOIN pg_class cl ON a.attrelid = cl.oid AND cl.relkind = 'r'::"char"
JOIN pg_namespace n ON n.oid = cl.relnamespace
JOIN pg_type ty ON ty.oid = a.atttypid
LEFT JOIN pg_description descr
ON descr.objoid = cl.oid AND descr.objsubid = a.attnum
WHERE a.attnum > 0 AND NOT a.attisdropped
AND n.nspname !~~ 'pg_%'::text
AND n.nspname <> 'information_schema'::name;
COMMENT ON VIEW view_table_columns IS 'Lista all fields of all tables';
CREATE VIEW view_table_columns2 AS
SELECT view_table_columns.*,
( SELECT count(*) AS count
FROM pg_index
WHERE pg_index.indrelid = pg_index.tableoid AND
(view_table_columns.colnum = ANY (pg_index.indkey::smallint[]))) AS indexes
FROM view_table_columns;
COMMENT ON VIEW view_table_columns2 IS 'Adds to view_table_columns info about indexed fields';
这包括,对于表中的每个字段,以下信息: