Почему я получаю сообщение об ошибке «Ошибка: ограничение UNIQUE: gpkg_contents.identifier» при попытке:
UPDATE gpkg_contents SET identifier = 'labs' WHERE lower(table_name) = lower('labss') AND identifier = 'labss';
, хотя я не нарушаю это уникальное ограничение:
sqlite> select table_name,identifier from gpkg_contents ;
table_name identifier
---------- ----------
dims dims
pol pol
parcel-lin parcel-lin
parcel parcel
grid grid
bounds bounds
labss labss
установка идентификатора, отличного от 'labs', работает нормально. Например:
UPDATE gpkg_contents SET identifier = 'labs2' WHERE lower(table_name) = lower('labss') AND identifier = 'labss';
схема таблицы выглядит следующим образом:
sqlite> .schema gpkg_contents
CREATE TABLE gpkg_contents (table_name TEXT NOT NULL PRIMARY KEY,data_type TEXT NOT NULL,identifier TEXT UNIQUE,description TEXT DEFAULT '',last_change DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),min_x DOUBLE, min_y DOUBLE,max_x DOUBLE, max_y DOUBLE,srs_id INTEGER,CONSTRAINT fk_gc_r_srs_id FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys(srs_id));
Файл базы данных sqlite