PostgreSQL中如何不指定列名且跳过IDENTITY列执行插入?
解决PostgreSQL中不指定列名插入自增表的问题
你的问题核心是PostgreSQL要求VALUES子句的元素数量必须和目标表的列数完全匹配,而SQL Server会自动忽略IDENTITY列的位置,直接匹配后续列。在PostgreSQL里可以通过以下方式实现需求:
方法:用DEFAULT占位自增列位置
在VALUES列表中给自增列(Id)的位置传入DEFAULT关键字,让PostgreSQL自动生成该列的自增值,后续元素按列定义顺序对应其他列:
INSERT INTO public.test VALUES (DEFAULT, 'testData');
原理说明
- PostgreSQL的
GENERATED ALWAYS AS IDENTITY列允许接受DEFAULT值,此时数据库会自动触发自增逻辑生成ID。 - 这种写法既不需要指定列名,又严格遵循了表的列定义顺序,完全符合你的需求。
如果后续修改表的列定义(比如新增列),只要保持VALUES列表的元素顺序和列顺序一致,并对新增的有默认值的列用DEFAULT占位,就能继续用这种方式插入。
内容的提问来源于stack exchange,提问作者mustafa
相关产品推荐
相关产品推荐

