我对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
问题: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));
注意: 小写的“ my_table”和“ my_identity_field”如果它们不是小写的(所有字母),我会报错
您不需要set identity_insertPostgres。
set identity_insert
只需将数据插入表中即可。
但是,您需要做的是使用以下setval()功能重新同步序列(“自动增量”)列后面的序列:
setval()
select setval(pg_get_serial_sequence('my_table', 'my_serial_column'), (select max(my_serial_column) from my_table) );
如果该列未定义为,serial而是“仅”具有从序列中获取的默认值,则需要“手动”提供序列名称
serial
select setval('my_sequence_name', (select max(my_serial_column) from my_table) );
编辑
这是一个SQLFiddle示例:http ://sqlfiddle.com/#!15/690ea/1