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 04/10/2018 15:01:20

databasename\r

Bonjour

Quand je fait \l liste la base de données, certaine base est "databasename\r".
J'essaie de le supprimer mais il y a une erreur "database name does not exist"

Merci à vous

Hors ligne

#2 05/10/2018 10:25:48

gleu
Administrateur

Re : databasename\r

Quel ordre exécutez-vous ?

Hors ligne

#3 05/10/2018 10:32:12

Re : databasename\r

bonjour,

quand je fait \l pour lister les bases existants le résultat est comme ci dessous

postgres
comptable
comptable-_1\r
compltable_2\r

je me demande d'où vient le \r  en fin du nom de la base.
Et en plus quand je fait

drop database comptable_1

le resultat m'a dit "database  does not exist"

Merci beacoup pour votre réponse

Hors ligne

#4 05/10/2018 14:15:23

gleu
Administrateur

Re : databasename\r

Du coup, il manque le \r.Personnellement, je testerais "DROP DATABASE "comptable-_1\\r;"

Hors ligne

#5 05/10/2018 14:22:44

Re : databasename\r

Merci beaucoup pour votre réponse

Avant le nom de la base crée  est comptable_1.
Mais il se passe quelque chose que je ne sais pas le nom de la base devient comptable_1\r
Et je ne peux pas la supprimer

Hors ligne

#6 05/10/2018 15:36:48

jmarsac
Membre

Re : databasename\r

Cela me fait penser à une fin de ligne Windows, copiée/collée dans un script unix.
Si dans psql vous faites
CREATE DATABASE base_1;
puis
\l
qu'obtenez-vous ?

Hors ligne

#7 05/10/2018 15:54:39

dverite
Membre

Re : databasename\r

\r peut être un retour chariot (code 13) exprimé en séquence d'échappement. En fait le nom de la base serait comptable_1 suivi du caractère de code 13. Pour savoir comment/pourquoi c'est arrivé il faudrait analyser avec quelle méthode/outil cette table a été créée.


C'est vérifiable avec une requête:

select c, ascii(c) from 
 (select regexp_split_to_table(datname, '') as c 
 from pg_database where datname like 'comptable\_1%') s;

Cette requête sort chaque caractère du nom de la base séparément avec son code.

Si le dernier caractère est bien le code 13, on pourrait utiliser par exemple la syntaxe unicode suivante pour  supprimer la base:

DROP DATABASE U&"comptable_1\000d";

ou la renommer

ALTER DATABASE U&"comptable_1\000d" RENAME TO "autre_nom";

000d étant le code Unicode hexa correspondant à 13.

Voir la doc https://docs.postgresql.fr/10/sql-syntax.html

Hors ligne

#8 08/10/2018 08:44:04

Re : databasename\r

Bonjour,


C'est résolu.  La base a été supprimer en suivant le conseil de dverite ci-dessous.

C'est vérifiable avec une requête:

select c, ascii(c) from
(select regexp_split_to_table(datname, '') as c
from pg_database where datname like 'comptable\_1%') s;
Cette requête sort chaque caractère du nom de la base séparément avec son code.

Si le dernier caractère est bien le code 13, on pourrait utiliser par exemple la syntaxe unicode suivante pour  supprimer la base:

DROP DATABASE U&"comptable_1\000d";
ou la renommer

ALTER DATABASE U&"comptable_1\000d" RENAME TO "autre_nom";

Merci à vous

Hors ligne

Pied de page des forums