Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试将记录插入postgresql数据库时出现“无效组合字段1字段2字段3”错误消息_Sql_Import_Insert_Postgresql 9.2_Database Restore - Fatal编程技术网

尝试将记录插入postgresql数据库时出现“无效组合字段1字段2字段3”错误消息

尝试将记录插入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 (

我正在尝试将数据库从服务器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 (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;