我不熟悉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
问:在IDENTIFY_INSERT中的脚本“SET 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’在小写中,如果它们不是小写(全部字母),我就会出错。
发布于 2014-01-27 08:07:15
在Postgres您不需要set identity_insert
。
只需将数据插入表中即可。
但是,您需要做的是使用setval()
函数重新同步串行(“自动增量”)列后面的序列:
select setval(pg_get_serial_sequence('my_table', 'my_serial_column'),
(select max(my_serial_column) from my_table)
);
如果列未定义为serial
,而是“仅”从序列中获取默认值,则需要“手动”提供序列名称。
select setval('my_sequence_name', (select max(my_serial_column)
from my_table)
);
编辑
下面是一个SQLFiddle示例:http://sqlfiddle.com/#!15/690ea/1
https://stackoverflow.com/questions/21375651
复制相似问题