Ok solved it.

What I was trying to do was simply to copy a csv into a Postgres database. (db and schema already existing, not the table)


The problem was (in terminal)

old way :

 ogr2ogr PG:"dbname='insee' port=5432 host='localhost' user='thomas' password='xxxxxxxx' schemas='wip'" test_file.csv

works


new way :

gdal vector convert test_file.csv PG:"dbname='insee' port=5432 host='localhost' user='thomas' password='xxxxxxxx' schemas='wip'"

don't work, I need to add the --append option, even to create the table from scratch (but is that the intended way ?)


Another problem was that with the Python API, with the :

format=PostgreSQL option

it won't be enough, I still need to specify PG: before my connection string or gdal will search for a file or directory named as the connection string.


Thanks a lot !



Le 22/08/2025 à 19:21, Even Rouault a écrit :

Thomas,

are you sure you really used --overwrite in the terminal and not --overwrite-layer ? The latter one is the one you want to use in this scenario of opening an existing datasource and overwriting its layer. And in python this will be overwrite_layer=True

Even

Le 22/08/2025 à 19:13, Thomas Szczurek-Gayant via gdal-dev a écrit :

Hi,


I've a question with the python API of gdal 3.11 new programs and PostgreSQL driver.


I can run this in a terminal

gdal vector convert --overwrite base-cc-evol-struct-pop.csv PG:"dbname='insee' port=5432 host='localhost' user='thomas' password='xxxxxx' schemas='wip' tables='rp_population_import'"

 and everything is working fine.

But if I try from the python API with

gdal.Run("vector", "convert", format="PostgreSQL", overwrite=True, input="base-cc-evol-struct-pop.csv", output="dbname='insee' port=5432 host='localhost' user='thomas' password='xxxxxxxx' schemas='wip' tables='rp_population_import'")

Python throw this error as if gdal/postgres actually try to create a new db:

ERROR 1: PostgreSQL driver doesn't currently support database creation.
Please create database with the `createdb' command.
ERROR 1: PostgreSQL driver failed to create dbname='insee' port=5432 host='localhost' user='thomas' password=XXXXXXXXXXXX schemas='wip' tables='rp_population_import'
Traceback (most recent call last):
  File "/home/thomas/repos_git/bd_insee/python/__main__.py", line 63, in <module>     gdal.Run("vector", "convert", format="PostgreSQL", overwrite=True, input="base-cc-evol-struct-pop.csv", output="dbname='insee' port=5432 host='localhost' user='thomas' password='xxxxxx' schemas='wip' tables='rp_population_import'")
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/thomas/miniforge3/envs/bd_insee/lib/python3.13/site-packages/osgeo/gdal.py", line 3353, in Run
    raise RuntimeError("Algorithm.Run() failed: %s" % GetLastErrorMsg())
RuntimeError: Algorithm.Run() failed: PostgreSQL driver failed to create dbname='insee' port=5432 host='localhost' user='thomas' password=XXXXXXXXXXXX schemas='wip' tables='rp_population_import'


Does anyone have a clue or it's me doing it bad ?

Thanks !


_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev
--
http://www.spatialys.com
My software is free, but my time generally not.
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to