【发布时间】:2021-01-21 05:22:53
【问题描述】:
我想将我的 OwnCloud 数据库移动到新服务器,但在恢复过程中操作失败。
pg_restore: [archive program (db)] COPY failed for table "oc_storages": ERROR: value of a duplicate key breaks unique constraint "storages_id_index"
DETAIL: The key "(id) = (local :: / var / www / owncloud_data /)" already exists.
确实,对 oc_sorages 数据库的简单查询表明存在重复。
ocl=# select * from oc_storages where id ~* 'owncloud_data';
id | numeric_id | available | last_checked
--------------------------------+------------+-----------+--------------
local::/var/www/owncloud_data/ | 491 | 1 |
local::/var/www/owncloud_data/ | 838 | 1 |
(2 rows)
但与此同时,postgresql 设法根据 id (storages_id_index) 为该表创建索引。 PostgreSQL 怎么可能接受这个表中的这个重复项?
ocl=# SELECT indexname, indexdef FROM pg_indexes WHERE tablename = 'oc_storages';
indexname | indexdef
-------------------+-------------------------------------------------------------------------------------
oc_storages_pkey | CREATE UNIQUE INDEX oc_storages_pkey ON public.oc_storages USING btree (numeric_id)
storages_id_index | CREATE UNIQUE INDEX storages_id_index ON public.oc_storages USING btree (id)
(2 rows)
如何摆脱这种僵局:删除两个值之一?哪个?
提前致谢。
欧内斯特。
【问题讨论】:
-
你在做什么?恢复到新分配的数据库? -> 检查编码/排序规则。
-
你试过Reindex在表/indexes上吗?
标签: postgresql indexing unique