首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >设置IDENTITY_INSERT postgresql

设置IDENTITY_INSERT postgresql
EN

Stack Overflow用户
提问于 2014-01-27 08:02:05
回答 1查看 19.2K关注 0票数 21

我不熟悉postgresql脚本。

我已经在ms sql server中使用了此脚本:

代码语言:javascript
运行
复制
SET IDENTITY_INSERT my_table ON
INSERT INTO my_table (
  my_identity_field,
  field1,
  field2
) 
SELECT 
  fieldA,
  fieldB
FROM
  my_other_table
WHERE
  fieldC = some_value
SET IDENTITY_INSERT my_table OFF

问:在IDENTIFY_INSERT中的脚本“SET table_name ON/OFF”是什么?

谢谢

解决:

代码语言:javascript
运行
复制
INSERT INTO my_table (
  my_identity_field,
  field1,
  field2
) 
SELECT 
  fieldA,
  fieldB
FROM
  my_other_table
WHERE
  fieldC = some_value;

SELECT 
setval(pg_get_serial_sequence('my_table', 'my_identity_field'), 
(SELECT MAX(my_identity_field) FROM my_table));

注: 'my_table‘和'my_identity_field’在小写中,如果它们不是小写(全部字母),我就会出错。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-27 08:07:15

在Postgres您不需要set identity_insert

只需将数据插入表中即可。

但是,您需要做的是使用setval()函数重新同步串行(“自动增量”)列后面的序列:

代码语言:javascript
运行
复制
select setval(pg_get_serial_sequence('my_table', 'my_serial_column'), 
              (select max(my_serial_column) from my_table) 
       ); 

如果列未定义为serial,而是“仅”从序列中获取默认值,则需要“手动”提供序列名称。

代码语言:javascript
运行
复制
select setval('my_sequence_name', (select max(my_serial_column) 
                                   from my_table)
       ); 

编辑

下面是一个SQLFiddle示例:http://sqlfiddle.com/#!15/690ea/1

票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21375651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档