尝试将记录插入postgresql数据库时出现“无效组合字段1字段2字段3”错误消息
我正在尝试将数据库从服务器a还原到服务器B。由于某些原因,导入在3条特定INSERT语句上失败:尝试将记录插入postgresql数据库时出现“无效组合字段1字段2字段3”错误消息,sql,import,insert,postgresql-9.2,database-restore,Sql,Import,Insert,Postgresql 9.2,Database Restore,我正在尝试将数据库从服务器a还原到服务器B。由于某些原因,导入在3条特定INSERT语句上失败: INSERT INTO tbl1 (device_id, group_name, param_id, value) VALUES (15, 'regX', 13, '4323'); INSERT INTO tbl1 (device_id, group_name, param_id, value) VALUES (15, 'device', 1, 'aatd'); INSERT INTO tbl1 (
INSERT INTO tbl1 (device_id, group_name, param_id, value) VALUES (15, 'regX', 13, '4323');
INSERT INTO tbl1 (device_id, group_name, param_id, value) VALUES (15, 'device', 1, 'aatd');
INSERT INTO tbl1 (device_id, group_name, param_id, value) VALUES (15, 'regX', 14, 'ttdf');
返回的错误为:
错误:设备、组和参数的组合无效
每个记录都是相同的错误
表定义如下所示:
其他看起来类似的记录可以正常工作,没有问题。例如:
INSERT INTO tbl1 (device_id, group_name, param_id, value) VALUES (103, 'regX', 13, '130');
事实上,数据库/导入文件有900多条记录,只有这3条记录失败
如何创建转储文件/如何导入转储文件:
出口:
pg_dump --create -U postgres origdb > outputfile.sql
然后在新服务器上,要导入:
psql -f outputfile.sql -U postgres
到目前为止,我所尝试的:
我已经确认,在原始数据库中,这些记录存在,并且与dump命令生成的记录相匹配。
以下是原始数据库中的数据:
我尝试在新服务器上手动导入这些记录,而不是导入整个转储文件。我收到了相同的错误消息
我也在检查pk的定义
testdb=SELECT
pg_attribute.attname,
格式为pg\u attribute.atttyped,pg\u attribute.atttypmod
从pg_索引、pg_类、pg_属性、pg_名称空间
哪里
pg_class.oid='tbl1'::regclass和
indrelid=pg_类oid和
nspname=‘公共’和
pg_class.relnamespace=pg_namespace.oid和
pg_attribute.attrelid=pg_class.oid和
pg_attribute.attnum=anypg_index.indkey
和初级的
attname | format_type
---------+-------------
(0 rows)
问题:
我不太确定在错误消息中从何处获取设备、组和参数的名称。。。这些对应什么?我假设字段名,但如何验证这一点
有没有关于要检查什么以排除故障的建议?我只是四处寻找这张桌子上的外键等等。??但如有任何建议,我们将不胜感激。
我没有建立这个数据库,所以我不确定所有的关系等等
谢谢 这看起来像是阻止这些特定插入并显示自定义消息的触发器。 可以在原始数据库中禁用触发器,但不能在新数据库中禁用。 使用以下命令查看用户创建的触发器:
SELECT * FROM pg_trigger;
啊!!有趣的我确实在那张表中看到了一些看起来可疑的触发器。问:为什么你说我不能在新数据库中禁用触发器?谢谢我的意思是,在最初被禁用的地方,现在在新的地方被激活。您可以禁用表tbl1的所有触发器:ALTER table tbl1 disable TRIGGER USER
attname | format_type
---------+-------------
(0 rows)
SELECT * FROM pg_trigger;