我試圖從服務器A向服務器B恢復數據庫。由於某種原因,導入在3條特定INSERT語句上失敗:嘗試將記錄插入postgrsql數據庫時出現「無效組合字段1字段2字段3」錯誤消息
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');
返回的錯誤是:
ERROR: Invalid combination of device, group, and parameter
這是同樣的錯誤每個記錄。
這裏的表的定義是什麼樣子:看起來類似的工作,沒有問題
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
我到目前爲止試過的東西:
- 我已經確認在原始數據庫中存在這些記錄,並且匹配dump命令生成的內容。 下面是數據看起來像在原來的數據庫:
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=# SELECT
pg_attribute.attname, format_type(pg_attribute.atttypid, pg_attribute.atttypmod) FROM pg_index, pg_class, pg_attribute, pg_namespace WHERE pg_class.oid = 'tbl1'::regclass AND indrelid = pg_class.oid AND nspname = 'public' AND pg_class.relnamespace = pg_namespace.oid AND pg_attribute.attrelid = pg_class.oid AND pg_attribute.attnum = any(pg_index.indkey) AND indisprimary;attname | format_type ---------+------------- (0 rows)
問題:
我不太肯定它的在錯誤信息中獲取名稱「設備,組和參數」......這些對應的是什麼?我假設字段名稱,但我怎麼能驗證這一點?
關於還需要檢查以排除故障的任何建議?我只是狩獵尋找這張桌子上的任何外鍵等。但任何建議,將不勝感激。 我沒有製作這個數據庫,所以我不確定所有的關係等。
謝謝。
啊!有趣。我確實在該表中看到了一些看起來可疑的觸發器。問題:爲什麼你說我不能在新的數據庫中禁用觸發器?謝謝! – dot
我的意思是,在原始殘疾但現在在新的激活。您可以禁用表tbl1的所有觸發器: 'ALTER TABLE tbl1 DISABLE TRIGGER USER' – Teixi