Страница 1 из 1

PKGNG восстановление базы

Добавлено: 2015-01-13 15:38:19
joesm
Повреждена БД pkgng
Проявилось после обноления pkg до 1.4.4

Код: Выделить всё

# pkg version
pkg: sqlite error while executing DROP INDEX deps_unique;CREATE UNIQUE INDEX dep
s_unique ON deps(name, version, package_id); in file pkgdb.c:2262: UNIQUE constr
aint failed: deps.name, deps.version, deps.package_id
Взял резервную копию из /var/backups/pkg.sql.xz
После восстановления

Код: Выделить всё

[root@ns /var/db/pkg]# pkg version
pkg: sqlite error while executing CREATE TABLE licenses (id INTEGER PRIMARY KEY,
 license TEXT NOT NULL UNIQUE );CREATE TABLE pkg_licenses_assoc (package_id INTE
GER REFERENCES packages(id) ON DELETE CASCADE ON UPDATE CASCADE, license_id INTE
GER REFERENCES licenses(id) ON DELETE RESTRICT ON UPDATE RESTRICT, PRIMARY KEY (
package_id, license_id));CREATE VIEW pkg_licenses AS SELECT origin, license FROM
 packages INNER JOIN pkg_licenses_assoc ON packages.id = pkg_licenses_assoc.pack
age_id INNER JOIN licenses ON pkg_licenses_assoc.license_id = licenses.id;CREATE
 TRIGGER license_insert INSTEAD OF INSERT ON pkg_licenses FOR EACH ROW BEGIN INS
ERT OR IGNORE INTO licenses(license) values (NEW.license);INSERT INTO pkg_licens
es_assoc(package_id, license_id) VALUES ((SELECT id FROM packages where origin =
 NEW.origin), (SELECT id FROM categories WHERE name = NEW.name));END; in file pk
gdb.c:2262: table licenses already exists
У кого есть опыт восстановления БД?

Re: PKGNG восстановление базы

Добавлено: 2015-01-13 18:40:52
ононимус
Как вы восстанавливали? Оно вам пишет что таблицу создать не может потому как она уже есть.

Re: PKGNG восстановление базы

Добавлено: 2015-01-13 22:32:09
guest
joesm писал(а):Повреждена БД pkgng
Проявилось после обноления pkg до 1.4.4

Код: Выделить всё

# pkg version
pkg: sqlite error while executing DROP INDEX deps_unique;CREATE UNIQUE INDEX dep
s_unique ON deps(name, version, package_id); in file pkgdb.c:2262: UNIQUE constr
aint failed: deps.name, deps.version, deps.package_id
Взял резервную копию из /var/backups/pkg.sql.xz
После восстановления

Код: Выделить всё

[root@ns /var/db/pkg]# pkg version
pkg: sqlite error while executing CREATE TABLE licenses (id INTEGER PRIMARY KEY,
 license TEXT NOT NULL UNIQUE );CREATE TABLE pkg_licenses_assoc (package_id INTE
GER REFERENCES packages(id) ON DELETE CASCADE ON UPDATE CASCADE, license_id INTE
GER REFERENCES licenses(id) ON DELETE RESTRICT ON UPDATE RESTRICT, PRIMARY KEY (
package_id, license_id));CREATE VIEW pkg_licenses AS SELECT origin, license FROM
 packages INNER JOIN pkg_licenses_assoc ON packages.id = pkg_licenses_assoc.pack
age_id INNER JOIN licenses ON pkg_licenses_assoc.license_id = licenses.id;CREATE
 TRIGGER license_insert INSTEAD OF INSERT ON pkg_licenses FOR EACH ROW BEGIN INS
ERT OR IGNORE INTO licenses(license) values (NEW.license);INSERT INTO pkg_licens
es_assoc(package_id, license_id) VALUES ((SELECT id FROM packages where origin =
 NEW.origin), (SELECT id FROM categories WHERE name = NEW.name));END; in file pk
gdb.c:2262: table licenses already exists
У кого есть опыт восстановления БД?
что будет если выполнить:

Код: Выделить всё

# pkg shell
> SELECT name, version, package_id FROM deps GROUP BY name, version, package_id HAVING count(*) > 1 ;
<что-то выдаст?>
>.q
#

Re: PKGNG восстановление базы

Добавлено: 2015-01-14 9:14:50
joesm

Код: Выделить всё

$ pkg shell
SQLite version 3.8.7 2014-10-17 11:24:17
Enter ".help" for usage hints.
sqlite> select name, version, package_id from deps group by name, version, packa
ge_id having count(*) > 1;
gio-fam-backend|2.34.3|4
sqlite>

Re: PKGNG восстановление базы

Добавлено: 2015-01-14 11:33:44
guest
joesm писал(а):

Код: Выделить всё

$ pkg shell
SQLite version 3.8.7 2014-10-17 11:24:17
Enter ".help" for usage hints.
sqlite> select name, version, package_id from deps group by name, version, packa
ge_id having count(*) > 1;
gio-fam-backend|2.34.3|4
sqlite>
порт devel/gio-fam-backend удален после апдейта glib20, видимо Вы не читали /usr/ports/UPDATING
и возможно неудачно обновили ПО

два варианта, поправить базу так:
1)

Код: Выделить всё

# sqlite3 /var/db/pkg/local.sqlite "delete from deps where origin='devel/gio-fam-backend';"
или попробовать так:
2)

Код: Выделить всё

# pkg_delete gio-fam-backend-\*

Re: PKGNG восстановление базы

Добавлено: 2015-01-14 14:09:29
joesm
Спасибо. Помогло.