PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Erreur ERROR: relation with OID XXXXXX does not exist

Technique - Langages Procéduraux (PL) | Erreur ERROR: relation with OID XXXXXX does not exist

Par Patrice le 19/06/2007 - 08:36

Bonjour,
J'ai cette erreur en executant une procédure stocké. Cette erreur se produit toujour à la 2eme éxécution de la Procedure stockée. Si l'on recompile la procédure stockée avant de la relancer on a pas d'erreur.

ERROR: relation with OID 184491 does not exist
État SQL :42P01
Contexte : SQL statement "insert into TMP_DOCENT select * from docent where docent_cle = $1 "
PL/pgSQL function "fct_transfererdoc" line 24 at SQL statement

Pour info : TMP_DOCENT est une table temporaire créée avec une CREATE TEMPORARY de la façon suivante.
create temporary table tmp_docent() inherits (docent);

La version de PostgresSQL : PostgreSQL 8.0.4 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Cela fait partie de la FAQ,

Guillaume Lelarge/ = 11 Septembre, 2007 - 15:53

Cela fait partie de la FAQ, élément 4.19:
http://www.postgresql.org/docs/faqs.FAQ.html#item4.19

PL/PgSQL met en cache les fonctions. Un effet de bord malencontrueux est que, si une fonction PL/pgsql accède à une table temporaire et que cette table est ensuite supprimée et recréée, un prochain appel à la fonction échouera car le contenu de la fonction en cache pointera toujours vers l'ancienne table temporaire.

La solution est donc d'utiliser EXECUTE pour accèder à des tables temporaires à partir de PL/pgsql. Cette instruction fera que la requête sera analysée à chaque exécution.

--
Guillaume.


© PostgreSQLFr, tous droits réservés.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.