Могу ли я выбрать поле из типа данных? - PullRequest
1 голос
/ 29 июня 2011

Можно ли выбрать поле / столбец из типа данных?

Postgres 7.4 (да, мы обновляем)

SELECT *
FROM tbl_name
WHERE tbl_name.column = 'timestamp with time zone'

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Это требует метаданных.

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 соответствующим образом (конечно, это намного проще, если вы работаете на языке сценариев немного за пределами базы данных).

1 голос
/ 30 июня 2011

Я должен был сделать это недавно. Для простоты я определил два представления:

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';

Это включает в себя для каждого поля в ваших таблицах следующую информацию:

  • имя схемы
  • имя таблицы
  • имя столбца
  • имя_типа типа
  • может быть обнуляем?
  • имеет значение по умолчанию?
  • описание (комментарий)
  • tableoid (удобно, если вам нужно получить больше данных из каталога)
  • номер столбца (то же самое)
  • индексов (во втором представлении - количество индексов, которые ссылаются на этот столбец)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...