PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 26/06/2019 09:52:10

pifor
Membre

Erreur pg_restore "opérateur n'existe pas"

Bonjour

Nous utilisons :

# select version();
                                                    version
---------------------------------------------------------------------------------------------------------------
 PostgreSQL 9.4.4 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16), 64-bit
(1 ligne)

avec:

# select postgis_full_version();
NOTICE:  Function postgis_topology_scripts_installed() not found. Is topology support enabled and topology.sql installed?
                                                                postgis_full_version
----------------------------------------------------------------------------------------------------------------------------------------------------
 POSTGIS="2.1.8 r13780" GEOS="3.4.2-CAPI-1.8.2 r3921" PROJ="Rel. 4.9.1, 04 March 2015" GDAL="GDAL 1.9.2, released 2012/10/08" LIBXML="2.7.6" RASTER
(1 ligne)

Nous exportons une base avec pg_dump et nous l'importons avec pg_restore.
Avant de lancer pg_restore, je supprime la base cible et je la recrée vide.
Le pg_restore est lancé sans option particulière:

pg_restore -v -d <base> -h <hostname> -p <port> -U <compte superuser> <fichier dump>.

pg_restore a plusieurs erreurs du type suivant:

pg_restore: [programme d'archivage (db)] could not execute query: ERREUR:  l'opérateur n'existe pas : public.geometry && public.geometry
LIGNE 1 : SELECT $1 && $2 AND _ST_Intersects($1,$2)
                    ^
ASTUCE : Aucun opérateur ne correspond au nom donné et aux types d'arguments.
Vous devez ajouter des conversions explicites de type.
REQUÊTE : SELECT $1 && $2 AND _ST_Intersects($1,$2)
CONTEXTE : fonction SQL « st_intersects » durant « inlining »
    La commande était : CREATE MATERIALIZED VIEW dr_vue_cons_geo_zone_batie_hors_zae AS
 WITH zone_bati_hors_zae AS (
         SELECT sbat.gid,
    ...
 

La base source et la base cible ont exactement la même version PostgreSQL et la même version de PostGIS.
On est bloqué sur cette erreur car la seule référence que j'ai trouvé pour ce type d'erreur est liée à des upgrades  mais on ne fait pas d'upgrade.

Est-ce que quelqu'un a une piste ?

Merci.

Dernière modification par pifor (26/06/2019 09:54:43)


Pierre

Hors ligne

#2 26/06/2019 16:07:09

rjuju
Administrateur

Re : Erreur pg_restore "opérateur n'existe pas"

Bonjour,

PostgreSQL 9.4.4

vous avez 19 versions mineures de retard, soit plus de 4 ans.  Je vous conseille vivement de mettre à jour au plus vite.



Quelle version de pg_restore utilisez-vous ?  Postgis est-il bien installé dans le schéma public?

Hors ligne

#3 26/06/2019 16:23:17

pifor
Membre

Re : Erreur pg_restore "opérateur n'existe pas"

C'est bien pg_restore 9.4.4 qui est utilisé. PostGIS est bien installé dans le schéma public.
On a aussi du retard dans la version de postGIS: j'ai réussi à faire fonctionner pg_restore en utilisant une version plus récente d'une fonction:

diff postgis--2.1.8.sql.26062019 postgis--2.1.8.sql
3461c3461
<       AS 'SELECT $1 && $2 AND _ST_Intersects($1,$2)'
---
>       AS 'SELECT $1 OPERATOR(@extschema@.&&) $2 AND @extschema@._ST_Intersects($1,$2)'

et en modifiant le paramètrage de l'extension:

diff postgis.control.26062019 postgis.control
5c5,6
< relocatable = true
---
> relocatable = false
> schema = public

Dernière modification par pifor (26/06/2019 16:23:59)


Pierre

Hors ligne

Pied de page des forums