Устранение нарушения уникальности первичного ключа в источниках данных, производных от SQLite (SpatiaLite, GeoPackage).
Добавлено: 23 июн 2020, 12:14
Ошибка проявляется в Qgis версии 2.xx при сохранении слоя SQLite (SpatiaLite, GeoPackage) после добавления новых объектов с неуникальным id, или разбиения/разделения составных геометрий или разделения простых геометрий существующих объектов. Предлагаемый сценарий для версии 2.xx предотвращает возникновение этой ошибки.
Код нужно поместить в файл startup.py (создать новый или добавить к существующему) в папке python в папке профиля пользователя и в последующих сессиях qgis ошибка не возникнет.
Увы, решение уже не столь актуально, как 2-3 года назад, но лучше поздно, чем никогда, пока qgis2 все еще остается в деле.
Код: Выделить всё
#this startup script for qgis 2.xx prevents violation of the
#unique ID constraint when committing a SQLite-based data source
#dr_gis at mail.ru
from qgis.core import QgsMapLayerRegistry
from qgis.utils import iface
def filterSQLiteBasedSource(l):
if l and l.type()==0 and l.dataProvider().storageType() in ('GPKG', 'SQLite', 'SpatiaLite'):
l.beforeCommitChanges.connect(dropId)
def dropId():
for f in iface.activeLayer().editBuffer().addedFeatures():
iface.activeLayer().changeAttributeValue(f,0,None,None)
QgsMapLayerRegistry.instance().layerWasAdded.connect(filterSQLiteBasedSource)
Увы, решение уже не столь актуально, как 2-3 года назад, но лучше поздно, чем никогда, пока qgis2 все еще остается в деле.