如果ARRAY,PostgreSQL数据类型没有意义?

时间:2014-12-09 15:57:25

标签: arrays postgresql

在示例中创建列bitint[]时...

ALTER TABLE table_name ADD COLUMN column_name bigint[];

...然后检索列数据类型...

SELECT data_type FROM information_schema.columns 
WHERE table_name='table_name' AND column_name='column_name';

...对于设置为数组的每种类型,查询返回值ARRAY

由于类型始终返回ARRAY,当使用ALTER无意义的ARRAY别名时会产生初始数据类型吗?

...或...

我们应该简单地使用以下内容吗?

ALTER TABLE table_name ADD COLUMN column_name ARRAY;

使用...

SELECT * FROM information_schema.columns 
WHERE table_name='table_name' AND column_name='column_name';

...似乎没有透露任何暗示该列是BIGINT类型的任何方式。

1 个答案:

答案 0 :(得分:0)

它不是ARRAY的毫无意义的别名。细节只是在不同的视图中:" information_schema"。" element_types"。

The documentation包含此查询,该查询加入"列"和" element_types"。

SELECT c.column_name, c.data_type, e.data_type AS element_type
FROM information_schema.columns c LEFT JOIN information_schema.element_types e
     ON ((c.table_catalog, c.table_schema, c.table_name, 'TABLE', c.dtd_identifier)
       = (e.object_catalog, e.object_schema, e.object_name, e.object_type, e.collection_type_identifier))
WHERE c.table_schema = '...' AND c.table_name = '...'
ORDER BY c.ordinal_position;

在原始查询中,您忽略了架构,可能是因为您知道所有表都在" public"架构。但实际上,您需要在WHERE子句中包含模式。您可以在不同的模式中使用相同名称的表和列。