Como posso atualizar ogr2ogr para incluir o driver PostgreSQL?

28

Estou tentando usar ogr2ogr para fazer upload de um shapefile para uma instalação remota do PostGres. Quando eu executei este comando:

celenius:~ celenius$ ogr2ogr -f PostgreSQL PG:"host=255.34.00.00 user=postgres dbname=mydb password=***" Dropbox/data/roads.shp;

Recebi a seguinte mensagem de erro:

Unable to find driver `PostgreSQL'.
The following drivers are available:
  -> `ESRI Shapefile'
  -> `MapInfo File'
  -> `UK .NTF'
 ...
  -> `SVG'
  -> `CouchDB'
  -> `Idrisi'
  -> `ARCGEN'
  -> `SEGUKOOA'
  -> `SEGY'

(Omiti alguns dos drivers, pois eles não são relevantes). Existe uma maneira de atualizar ogr2ogr para incluir o PostgreSQL? Estou usando um Mac com OS 10.7.4

djq
fonte

Respostas:

25

Usando o Homebrew, você deve:

brew install gdal --with-postgresql

ou com versões mais antigas do gdal:

brew install gdal --with-postgres

Se você já instalou o gdal com o brew antes, mas sem o suporte ao postgresql, apenas

brew desinstalar gdal

Andrea Cremaschi
fonte
2
uma pequena correção:brew install gdal --with-postgresql
BenjaminGolder
O QGIS ainda funcionará com o homebrew GDAL?
Simbamangu
@Simbamangu Claro: homebrew é apenas um gerenciador de pacotes, de modo que as versões GDAL distribui são os mesmos que você pode construir-se a partir da fonte
Andrea Cremaschi
2
Como você procederia em uma máquina Windows? Idealmente, usando um virtualenv
RutgerH 7/16/16
2
Qual é a solução para Windows, por favor?
Denis Stephanov
5

Economize um pouco de dor e use os binários / estruturas da Kyngchaos para OSX .GDAL-Complete é o que você está procurando.

Outra opção é usar o HomeBrew .

Ragi Yaser Burhum
fonte
AFAIK é isso que eu usei. Não instalei de outra maneira.
DJQ
Este arquivo existe: /Library/Frameworks/GDAL.framework/Versions/Current/Libraries/libpq.dylib e o que o comando 'what ogrinfo' retorna do terminal?
Ragi Yaser Burhum
which ogrinforetorna /usr/local/bin/ogrinfo. Eu instalei o GDAL e outros do KyngChaos antes de instalar o QGis.
DJQ
O arquivo libpq que eu mencionei existe nesse local?
Ragi Yaser Burhum
1
Se libpq.dylib não estiver lá (a biblioteca do cliente PostgreSQL), a biblioteca OGR não será carregada.
Ragi Yaser Burhum 14/09/12
4

supondo que você tenha compilado o gdal a partir do código-fonte, inclua --with-pg = / path / para / pg_config ao configurar o gdal.

./configure -with-pg=/path/to/pg_config ...

./make clean

./make

./make install

EDIT: Observe que pg_configdeve estar no mesmo diretório que seus outros binários do PostgreSQL, como psql, etc. Observe também este detalhe da resposta do user259060 abaixo: você deve verificar se está instalada uma versão apropriada do postgresql-server-dev (por exemplo, no Ubuntu use apt list --installed | grep postgresql-server-devse não encontrado, use apt-cache search postgresql-server-deve instale o pacote correspondente com sudo apt-get install postgresql-server-dev).

dmci
fonte
Parece que recebo "PostgreSQL support: yes" na ./configuresaída, mas tentando ogr2ogr -f PostgreSQLdar ERROR 1: Unable to find driver 'PostgreSQL'. Além disso, no PostgreSQLinogrinfo --formats
adamczi 14/11
você executou o ldconfig após a instalação?
DMCI
1
Veja a edição da resposta sobre a instalação do postgresql-server-dev ,, que deve lidar com o erro.
thayer
2

Recebi a mesma mensagem enquanto estava no Windows.

Ele estava reclamando sobre o tipo de aspas (simples versus duplo) que eu estava usando em torno da cadeia de conexão. Mudar as aspas corrigiu o problema.

Michael
fonte
2

Existe a possibilidade de você ver algo como "Suporte ao PostgreSQL: no", mesmo que você tenha configurado a fonte usando "--with-pg = / path / to / pg_config" ... nesse caso, execute o sudo apt- instale o postgresql-server-dev-all e tente novamente.

user259060
fonte
1

Ao ler o documento de formatos vetoriais ogr2ogr , parece que você precisa instalar a biblioteca do cliente PostgreSQL (libpq).

Essa pergunta semelhante parece fornecer algumas dicas para resolver um problema semelhante, apenas com as ligações do Python.

RyanDalton
fonte