我正在尝试将数据库从服务器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)
-
我尝试在新服务器上手动导入这些记录,而不是导入整个转储文件。我收到了同样的错误消息。
-
我也一直在检查,看看定义了什么pk。。。
testdb=#选择
pg_attribute.attname,
格式类型(pg_attribute.atttypid,pg_attrit.atttypmod)
来自pg_index、pg_class、pg_attribute、pg_namespace
哪里
pg_class.oid=“tbl1”::regclass AND
indrelid=pg_class.oid与
nspname='public'与
pg_class.relnamespace=pg_namespace.oid与
pg_attribute.attrelid=pg_class.oid与
pg_attribute.attnum=任何(pg_index.indkey)
和不适;
attname | format_type
---------+-------------
(0 rows)
问题:
-
我不太确定它在错误消息中的名称“设备、组和参数”在哪里。。。这些对应什么?我假设字段名,但如何验证?
-
还有什么建议可以检查以排除故障吗?我只是四处寻找这张桌子上的外国钥匙等。??但任何建议都将不胜感激。
我没有建立这个数据库,所以我不确定所有的关系等等。
谢谢