Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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
Pages : 1