Cuando ingreso nuevos elementos (características) en otra capa de Postgres, puedo hacerlo de dos maneras:
- Dibujar nuevos elementos (con 'Agregar función') que rara vez hago o
- Copiar (o cortar) algunos elementos de otra capa de Postgre (capa de origen) y pegarlo en la capa de destino, lo que hago con frecuencia
En el primer ejemplo, el almacenamiento de ediciones funciona normalmente porque esta capa obtiene gid de la secuencia de base de datos postgre * nextval ('layer_name_gid_seq' :: regclass) *
En el segundo ejemplo, recibí un error al guardar las ediciones, porque al copiar el elemento de la capa de origen a la capa de destino, qgis copió gid del elemento de la capa de origen. Al intentar guardar las ediciones, se devuelve este error:
No se pudieron confirmar los cambios en la capa "Cjevovodi"
Errores: ERROR: 1 características no agregadas.
Errores del proveedor:
error PostGIS al agregar características: ERROR: el valor de clave duplicada viola la restricción única "cjevovodi_okill_pkey"
DETALLE: La clave (gid) = (5) ya existe.
Intenté copiar * nextval ('layer_name_gid_seq' :: regclass) * en field gid, pero esta secuencia no se puede pegar en field gid ya que el campo se define como numérico.
¿Alguien sabe una forma sencilla de copiar elementos de la capa de origen (con gid existente) asignar nuevo gid?
¡Gracias!
Respuestas:
No puedo reproducir esto en QGIS 2.2 Windows, c3a2817.
Si otras versiones se comportan de manera diferente, o si continúa teniendo este problema, probablemente pueda configurar un desencadenador PostgreSQL en la tabla como una solución alternativa:
Usando esta tabla de ejemplo:
Aquí hay una función de activación que asignará una nueva
gid
cuando sea necesario:Vinculando la función a la tabla ...
Esto asignará automáticamente nuevas ID donde
gid
ya exista. Por ejemplo, la siguiente consulta ahora duplicará todos los datos en la tabla en lugar de fallar:Por supuesto, este enfoque puede comprometer la intención de su clave principal, así que úsela con cuidado.
fuente
Seleccione entidades de la capa de origen y guarde seleccionado (Guardar seleccionado como ...) en shapefile. Agregue shapefile guardado en el proyecto QGIS y abra la tabla de atributos, luego elimine el campo "gid" y guarde shapefile. Seleccione entidades en shapefile y cópielas en su capa de trabajo.
fuente