FYI Jeremy Palmer has just submitted a fix for that: https://github.com/OSGeo/gdal/pull/6896

Le 30/11/2022 à 16:12, Daniel Mannarino a écrit :

Hello!


I'm having trouble using the temporary table option of ogr2ogr:https://gdal.org/drivers/vector/pg.html#layer-creation-options

Ultimately I am trying to load data from a Shapefile into a temporary table, enrich the rows in the temporary table, and then copy from the temporary table into a final table. However I cannot get Postgres and ogr2ogr to work together. It sounds to me from the logs that they disagree on the table name. In my example code below I have removed everything that is to happen after loading the data (enriching, copying) for clarity.


Very little is said about the temporary table option on the web, but from the source (and Postgres logs) it looks like ogr2ogr assumes a schema of "pg_temp_1":https://github.com/OSGeo/gdal/blob/dc39f7d68095621842a2547ab06c60a03fd34a19/ogr/ogrsf_frmts/pg/ogrpgdatasource.cpp#L1865-L1872


It sounds to me from the Postgres docs this isn't safe to assume, but let's say it is for the moment.


Here is my simplified script:

#!/bin/bash

set -e


PGHOST="<host>"

PGDATABASE="<db>"

PGUSER="<user>"

PGPASSWORD="<pass>"

PGPORT=<port>


LOCAL_FILE="/vsizip/test.shp.zip"

SRC_LAYER="test"

FID_NAME="gfw_fid"

GEOMETRY_NAME="geom"

TEMP_SCHEMA="pg_temp_1"

TEMP_TABLE="bazinga"



ogr2ogr -f "PostgreSQL" PG:"password=$PGPASSWORD host=$PGHOST port=$PGPORT dbname=$PGDATABASE user=$PGUSER" \

"$LOCAL_FILE" "$SRC_LAYER" \

-lco GEOMETRY_NAME="$GEOMETRY_NAME" \

-lco SPATIAL_INDEX=NONE \

-lco FID="$FID_NAME" \

-lco TEMPORARY=ON \

-nlt PROMOTE_TO_MULTI \

-nln "$TEMP_SCHEMA.$TEMP_TABLE" \

   -t_srs EPSG:4326 \

--config PG_USE_COPY YES \

-makevalid -update


# End of script



Here is the Postgres log from attempting to run this script with the Shapefile in the PS:


# START LOG

2022-11-28 21:16:51.206 UTC [504] LOG:  statement: set client_encoding to 'UTF8'

2022-11-28 21:16:51.209 UTC [504] LOG:  execute <unnamed>: SHOW client_encoding

2022-11-28 21:16:51.239 UTC [504] LOG:  execute <unnamed>: SELECT n.nspname FROM pg_proc p JOIN pg_namespace n ON n.oid = p.pronamespace WHERE proname = 'postgis_version'

2022-11-28 21:16:51.245 UTC [504] LOG:  execute <unnamed>: SELECT version()

2022-11-28 21:16:51.246 UTC [504] LOG:  execute <unnamed>: SHOW standard_conforming_strings

2022-11-28 21:16:51.250 UTC [504] LOG:  execute <unnamed>: SELECT oid, typname FROM pg_type WHERE typname IN ('geometry', 'geography') AND typtype='b'

2022-11-28 21:16:51.323 UTC [504] LOG:  execute <unnamed>: SELECT postgis_version()

2022-11-28 21:16:51.326 UTC [504] LOG:  execute <unnamed>: SET ENABLE_SEQSCAN = ON

2022-11-28 21:16:51.342 UTC [504] LOG:  execute <unnamed>: SELECT 1 FROM information_schema.tables WHERE table_name = 'geometry_columns' LIMIT 1

2022-11-28 21:16:51.345 UTC [504] LOG:  execute <unnamed>: SELECT 1 FROM information_schema.tables WHERE table_name = 'spatial_ref_sys' LIMIT 1

2022-11-28 21:16:51.354 UTC [504] LOG:  execute <unnamed>: SELECT ST_Srid('POINT EMPTY'::GEOMETRY)

2022-11-28 21:16:51.356 UTC [504] LOG:  execute <unnamed>: SELECT current_schema()

2022-11-28 21:16:51.394 UTC [504] LOG:  execute <unnamed>: BEGIN

2022-11-28 21:16:51.415 UTC [504] LOG:  execute <unnamed>: SELECT c.oid FROM pg_class c JOIN pg_namespace n ON c.relnamespace=n.oid WHERE c.relname = 'bazinga' AND n.nspname = 'pg_temp_1'

2022-11-28 21:16:51.418 UTC [504] LOG:  execute <unnamed>: SELECT c.oid FROM pg_class c JOIN pg_namespace n ON c.relnamespace=n.oid WHERE c.relname = 'bazinga' AND n.nspname = 'pg_temp_1'

2022-11-28 21:16:51.439 UTC [504] LOG:  execute <unnamed>: SELECT c.relname, n.nspname, c.relkind, a.attname, t.typname, postgis_typmod_dims(a.atttypmod) dim, postgis_typmod_srid(a.atttypmod) srid, postgis_typmod_type(a.atttypmod)::text geomtyp, array_agg(pg_get_constraintdef(s.oid))::text att_constraints, a.attnotnull, d.description FROM pg_class c JOIN pg_attribute a ON a.attrelid=c.oid JOIN pg_namespace n ON c.relnamespace = n.oid AND c.relkind in ('r','v','m','f') AND NOT ( n.nspname = 'public' AND c.relname = 'raster_columns' ) JOIN pg_type t ON a.atttypid = t.oid AND (t.typname = 'geometry'::name OR t.typname = 'geography'::name) LEFT JOIN pg_constraint s ON s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND (pg_get_constraintdef(s.oid) LIKE '%geometrytype(% = %' OR pg_get_constraintdef(s.oid) LIKE '%ndims(% = %' OR pg_get_constraintdef(s.oid) LIKE '%srid(% = %') LEFT JOIN pg_description d ON d.objoid = c.oid AND d.classoid = 'pg_class'::regclass::oid AND d.objsubid = 0 GROUP BY c.relname, n.nspname, c.relkind, a.attname, t.typname, dim, srid, geomtyp, a.attnotnull, c.oid, a.attnum, d.description ORDER BY c.oid, a.attnum

2022-11-28 21:16:51.452 UTC [504] LOG:  execute <unnamed>: SELECT srid FROM spatial_ref_sys WHERE auth_name = 'EPSG' AND auth_srid = 4326

2022-11-28 21:16:51.545 UTC [504] LOG:  execute <unnamed>: CREATE TEMPORARY TABLE "bazinga" ( "gfw_fid" SERIAL, PRIMARY KEY ("gfw_fid"), "fid" NUMERIC(11,0), "geom" geometry(MULTIPOLYGON,4326) )

2022-11-28 21:16:51.575 UTC [504] LOG:  execute <unnamed>: COMMENT ON TABLE "pg_temp_1"."bazinga" IS NULL

2022-11-28 21:16:51.575 UTC [504] ERROR:  relation "pg_temp_1.bazinga" does not exist

2022-11-28 21:16:51.575 UTC [504] STATEMENT:  COMMENT ON TABLE "pg_temp_1"."bazinga" IS NULL

2022-11-28 21:16:51.585 UTC [504] ERROR:  current transaction is aborted, commands ignored until end of transaction block

2022-11-28 21:16:51.585 UTC [504] STATEMENT:  COPY "pg_temp_1"."bazinga" ("geom", "fid") FROM STDIN;

2022-11-28 21:16:51.587 UTC [504] LOG:  execute <unnamed>: ROLLBACK


# END LOG



I have tried many variations of quoting the table and schema name to no avail (including

-nln "\"$TEMP_SCHEMA\".\"$TEMP_TABLE\"" \

).


I also tried wrapping the whole thing in a transaction by specifying

-doo PRELUDE_STATEMENTS="BEGIN;" \

-doo CLOSING_STATEMENTS="COMMIT;" \


Can anyone explain how to get this to work? I actually first tried to create a temporary table by myself with -doo, but ran into other problems and will leave that for another thread.


Thanks!

Daniel Mannarino


PS: Here's the Shapefile I'm using:https://github.com/wri/gfw-data-api/blob/master/tests/fixtures/test.shp.zip

PPS: I am running PostgreSQL 12 (specifically the postgis/postgis:12-2.5-alpine Docker image) and running ogr2ogr from Homebrew's GDAL 3.5.3 package on MacOS 12.6 (amd64).


_______________________________________________
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