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 05/04/2009 16:45:07

kamouka
Membre

Nom de tables et mots reservés

Bonjour,

J'utilise Postgresql 8.3 sous windows XP. Je souhaite créer une table nommée "table" dans une base de données afin de pouvoir y restaurer  ensuite des données via un pg_restore. Je n'ai pas la main sur ce dump et donc le nom de table "table" m'est imposé.

Je peux créer la table en faisant un :
CREATE TABLE "table" (...);

Mais ensuite le pg_restore :

pg_restore -d mabase -a -t "table"  mabase.dmp
ou
pg_restore -d mabase -a -t table mabase.dmp

se plante avec une erreur de syntaxe sur le nom de la table.

Existe-t-il une option qui permet de désactiver ce contrôle sur le nom de table ou une solution de contournement?

Merci.

Hors ligne

#2 05/04/2009 17:07:43

gleu
Administrateur

Re : Nom de tables et mots reservés

Je n'ai pas ce problème. Pouvez-vous indiquer précisément le message d'erreur obtenu ?


Guillaume.

Hors ligne

#3 05/04/2009 18:13:13

kamouka
Membre

Re : Nom de tables et mots reservés

Merci pour la réponse.
Je viens de ré-essayer la requête sous psql:

gr=#
gr=# CREATE TABLE table (c1 integer);
ERROR:  syntax error at or near "table"
LIGNE 1 : CREATE TABLE table (c1 integer);
                       ^
gr=# CREATE TABLE "table" (c1 integer);
CREATE TABLE
gr=#

(Dans psql le repère de l'erreur est sous le mot "table").

Sous pgAdmin j'ai le même résultat avec en plus le code d'erreur :

ERROR:  syntax error at or near "table"
LINE 1: CREATE TABLE table (c1 integer);
                     ^

********** Erreur **********

ERROR: syntax error at or near "table"
État SQL :42601
Caractère : 14

En espérant que cela vous éclaire.

Hors ligne

#4 05/04/2009 18:18:16

kamouka
Membre

Re : Nom de tables et mots reservés

J'ai oublié de mettre le message d'erreur dans pg_restore :

C:\Travail>pg_restore -d mabase -a -t "table"  mabase.dmp
pg_restore: [programme d'archivage (db)] Erreur pendant le traitement de la TOC (« PROCESSING TOC ») :
pg_restore: [programme d'archivage (db)] Erreur à partir de l'entrée TOC 2711 ; 0 16995 TABLE DATA table postgres
pg_restore: [programme d'archivage (db)] could not execute query: ERROR:  syntax error at or near "table"
LIGNE 2 : COPY table (...
               ^
    Command was:
COPY table (...
ATTENTION : erreurs ignorées lors de la restauration : 1

C:\Travail>

Hors ligne

#5 05/04/2009 19:04:49

gleu
Administrateur

Re : Nom de tables et mots reservés

Pour psql, comme pour pgAdmin, vous devez mettre le nom de la table entre guillemets si vous utilisez des mots réservés (ce qui est une mauvaise pratique, mais d'après votre premier message, vous y êtes « contraints »).

Pour pg_restore, je n'ai vraiment pas ce problème. Quelle version exacte de PostgreSQL avez-vous ? si vous avez une version antérieure à la 8.3.7, pouvez-vous tester avec cette version ? il est possible que ce soit un bug corrigé.


Guillaume.

Hors ligne

#6 05/04/2009 23:07:27

kamouka
Membre

Re : Nom de tables et mots reservés

J'utilise bien une version 8.3.7 de pg_restore. Mais le dump a été fait avec une version 8.1. Je vais essayer de le refaire (le dump) avec une version 8.3.7.

Hors ligne

#7 05/04/2009 23:09:25

gleu
Administrateur

Re : Nom de tables et mots reservés

De préférence, toujours utiliser le pg_dump de la version où vous allez restaurer car elle profite des dernières améliorations.


Guillaume.

Hors ligne

#8 06/04/2009 22:06:15

kamouka
Membre

Re : Nom de tables et mots reservés

J'ai pu refaire un dump de la table "table" vers un script sql (sans compressio).
En modifiant dans le script le 'copy table (..' en 'copy "table" (...' le script a correctement fonctionné et les données ont été insérées.
Je vais me satisfaire de cette solution pour l'instant.
Merci de votre aide.

Hors ligne

Pied de page des forums