Quando insiro novos elementos (recursos) em outra camada do Postgres, posso fazer isso de duas maneiras:
- Desenhando novos elementos (com 'Adicionar recurso') que eu raramente ou
- Copiando (ou recortando) alguns elementos de outra camada do Postgre (camada de origem) e colando-a na camada de destino, que faço frequentemente
No primeiro exemplo, o salvamento das edições funciona normalmente porque essa camada é gid da sequência do banco de dados postgre * nextval ('layer_name_gid_seq' :: regclass) *
No segundo exemplo, recebi um erro ao salvar edições, porque ao copiar o elemento da camada de origem para a camada de destino, o qgis copiava o gid do elemento da camada de origem. Ao tentar salvar edições, este erro é retornado:
Não foi possível confirmar as alterações na camada „Cjevovodi“
Erros: ERRO: 1 recurso (s) não adicionado.
Erros do provedor:
erro PostGIS ao adicionar recursos: ERRO: o valor duplicado da chave viola a restrição exclusiva "cjevovodi_okill_pkey"
DETALHE: A chave (gid) = (5) já existe.
Tentei copiar * nextval ('layer_name_gid_seq' :: regclass) * no campo gid, mas essa sequência não pode ser colada no campo gid, pois o campo é definido como numérico.
Alguém sabe uma maneira simples de copiar elementos da camada de origem (com gid existente) atribuir novo gid?
Obrigado!
Respostas:
Não consigo reproduzir isso no QGIS 2.2 Windows, c3a2817.
Se outras versões se comportarem de maneira diferente ou se você continuar com esse problema, provavelmente poderá configurar um gatilho do PostgreSQL na tabela como uma solução alternativa:
Usando esta tabela de exemplo:
Aqui está uma função de gatilho que atribuirá uma nova
gid
quando necessário:Vinculando a função à tabela ...
Isso atribuirá automaticamente novos IDs onde os
gid
já existem. Por exemplo, a seguinte consulta agora duplicará todos os dados na tabela em vez de falhar:Obviamente, essa abordagem pode comprometer a intenção da sua chave primária, portanto, use-a com cuidado.
fonte
Selecione os recursos da camada de origem e salve os selecionados (Salvar selecionados como ...) no shapefile. Adicione o shapefile salvo no projeto QGIS e abra a tabela de atributos, exclua o campo "gid" e salve o shapefile. Selecione os recursos no shapefile e copie-os na sua camada de trabalho.
fonte