tbl_cities
我使用以下代码创建了它:
CREATE TABLE IF NOT EXISTS public.tbl_Cities
(City_ID SERIAL NOT NULL,
City_Name VARCHAR(100) NOT NULL,
City_State_Region VARCHAR(100),
ID_Country INT NOT NULL,
CONSTRAINT PK_City_ID PRIMARY KEY (City_ID));
现在我想查询这些列及其数据类型的完全相同的顺序,以确保列名是什么以及真正的列顺序是什么(无需回滚到语句CREATE TABLE
)。INSERT
在我即将编写和执行的语句的上下文中。
要了解此信息,我执行:
SELECT column_name, data_type FROM information_schema.columns
WHERE table_name = 'tbl_cities';
但是我得到的输出顺序与现实中存在的列不同。
我也尝试过对列进行排序,但我知道的唯一参数是
ORDER BY column_name
. 在这种情况下,它会导致列在现实中存在的正确顺序。
SELECT column_name, data_type FROM information_schema.columns
WHERE table_name = 'tbl_cities'
ORDER BY column_name;
我的问题是:实现列在表中的实际顺序的正确语法是什么,以防按字母顺序排列它们会返回不同的结果/顺序。
我发现了这个问题,但它涉及 SQL Server,我需要在 PostgreSQL v14.7 上执行此操作。
我不仅对不同的答案持开放态度information_schema.columns
,而且对其他任何类型的答案都持开放态度:
SELECT * FROM pg_catalog.pg_tables;
在 Postgres 中,目录表是信息的真正来源。特别是对于这种情况:
pg_attribute
. 列attnum
表示列的物理顺序(=逻辑顺序):手册:
信息模式是相同的标准化视图。但是从
pg_attribute
. _ 而且更快。我使用“系统目录信息函数”
format_type()
来获取确切的数据类型,其中包括修饰符并且也适用于数组类型和域。你会想要的。想想varchar(25)[]
...生产相同的东西
information_schema.columns
并不那么简单(或快速)。关于专栏的手册information_schema.columns.data_type
:看:
information_schema
对于这样的问题,我更愿意使用: