在示例中创建列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
类型的任何方式。
答案 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子句中包含模式。您可以在不同的模式中使用相同名称的表和列。