我试图将数据库从服务器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');
返回的错误是:
错误:设备,组和参数的组合无效
每条记录都有相同的错误。
以下是表格定义:
testdb=# \d+ tbl1;
Table "public.tbl1"
Column | Type | Modifiers | Storage | Stats target | Description
------------+------------------------+-----------+----------+--------------+-------------
device_id | integer | | plain | |
group_name | character varying(255) | | extended | |
param_id | integer | | plain | |
value | character varying(255) | | extended | |
看起来类似工作的其他记录,没有任何问题。例如:
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
我迄今为止所做的事情:
origdb=# select * from tbl1 where device_id = 15; device_id | group_name | param_id | value -----------+------------+----------+-------------- 15 | regX | 13 | 4323 15 | device | 1 | aatd 15 | regX | 14 | ttdf (3 rows)
我尝试在新服务器上手动导入这些记录,而不是导入整个转储文件。我收到相同的错误消息。
我也一直在查看已定义的内容...
testdb =#SELECT
pg_attribute.attname, format_type(pg_attribute.atttypid,pg_attribute.atttypmod) FROM pg_index,pg_class,pg_attribute,pg_namespace 哪里 pg_class.oid =' tbl1' :: regclass AND indrelid = pg_class.oid AND nspname =' public'和 pg_class.relnamespace = pg_namespace.oid AND pg_attribute.attrelid = pg_class.oid AND pg_attribute.attnum = any(pg_index.indkey) 和indisprimary;attname | format_type ---------+------------- (0 rows)
问题:
我不太确定它在哪里获取名称"设备,组和参数"在错误消息中......这些对应于什么?我假设字段名称,但我该如何验证呢?
有关要检查哪些问题以解决问题的任何建议?我只是四处寻找这张桌子上的任何外键等等。但任何建议将不胜感激。 我没有建立这个数据库,所以我不确定所有的关系等。
感谢。
答案 0 :(得分:0)
这看起来像一个阻止这些特定插入并显示自定义消息的触发器。 触发器可以在原始数据库中禁用,但不能在新数据库中禁用。 使用以下命令查看用户创建的触发器:
SELECT * FROM pg_trigger;