SET IDENTITY_INSERT postgresql

pos*_*eat 14 sql postgresql

我不熟悉postgresql脚本.

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

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
Run Code Online (Sandbox Code Playgroud)

问题:PostgreSQL中的脚本'SET IDENTIFY_INSERT [table_name] ON/OFF'是什么?

谢谢

解决了 :

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));
Run Code Online (Sandbox Code Playgroud)

注意: 'my_table'和'my_identity_field'小写如果它们不是小写(所有字母),我会收到错误

a_h*_*ame 21

你不需要set identity_insertPostgres.

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

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

select setval(pg_get_serial_sequence('my_table', 'my_serial_column'), 
              (select max(my_serial_column) from my_table) 
       ); 
Run Code Online (Sandbox Code Playgroud)

如果列未定义为a serial但"only"具有从序列中获取的默认值,则需要"手动"提供序列名称

select setval('my_sequence_name', (select max(my_serial_column) 
                                   from my_table)
       ); 
Run Code Online (Sandbox Code Playgroud)

编辑

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