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 Re : Général » Transaction annulée » 14/06/2012 16:23:44

arthurr a écrit :

Question bête : pourquoi ne pas sortir de transaction et passer en autocommit ? il ne reste plus qu'a gérer (ou pas) les erreurs de traitements.

C'est une solution mais si on a une coupure de courant pendant le traitement, il ne faut pas que les modifications soit commiter.



Marc Cousin a écrit :

brse: plus simple: si vous créez un nouveau savepoint avec le même nom que l'ancien, il le remplace.

J'ai essayé mais ce n'est pas le cas.
Regardez la dernière ligne de cette page : http://docs.postgresql.fr/9.1/sql-savepoint.html


En gros, tout les savepoints sont gardés en mémoire et du coup, au bout de 10.000 savepoints, j'ai une erreur concernant la mémoire.


PS : j'ai oublier de préciser, c'est à travers le JDBC en java que mes requêtes sont exécutées.

#2 Re : Général » Transaction annulée » 13/06/2012 14:45:46

Bonjour,


Merci pour vos réponse, apparement le plus simple dans mon cas est l'utilisation des savepoints.


J'aurais une petite question à ce sujet, avant de créer un savepoint, pour économiser de la place, je supprime le précédent avec un "RELEASE SAVEPOINT mon_pointdesauvegarde". Si mon_pointdesauvegarde n'existe pas, Postgres se met en erreur. Est-il possible de faire un "RELEASE SAVEPOINT IF EXIST mon_pointdesauvegarde" ou quelques chose qui serait équivalent ?


Merci

#3 Général » Transaction annulée » 12/06/2012 16:41:47

brse
Réponses : 9

Bonjour,


j'ai une fonction java qui fait une série de insert et fait un seul commit tout à la fin de la fonction.
Avec Oracle, si je rencontre un problème (duplication de clé par exemple), l’exception est ignorée et je continu le traitement normalement (on affiche les erreurs dans la log).


Je souhaite conservé ce système avec Postgres, mais s’il rencontre une erreur, toutes les requêtes suivantes sont ignorées (ERREUR: la transaction est annulée, les commandes sont ignorées jusqu'à la fin du bloc).


Est-il possible d’ignorer cette erreur et de ne pas bloquer les requêtes suivantes en conservant des performances assez semblables ?


Merci

#4 Général » Espaces dans un champ character » 11/06/2012 14:43:00

brse
Réponses : 1

Bonjour,


Sur une de mes tables j'ai un champs de type character(16) qui se complète avec des espaces (fonctionnement normal).

Par contre, quand je fais un select, le champ retourné ne contient aucun espace superflus.

Ma question : Comment faire pour récupérer le champ en entier (la chaine + les espaces superflus)?



Merci




Exemple : (Postgres 9.1)       
create table PARAM_RUB
(
    OID         VARCHAR (20)    not null,
    CDRUB       CHAR(16)        not null,
);                                                                                                             
insert into param_rub (oid, cdrub) values ('15203','FILLER          ');   


Quand je recherche à récupéré le champ cdrub entouré par un caractère 'a' (pour voir ce qu'il me retourne), j'ai "aFILLERa" au lieu de "aFILLER          a".
select 'a' ||cdrub || 'a' from param_rub where oid = '15203';

#5 Général » Tablespace et droit » 01/06/2012 11:20:10

brse
Réponses : 1

Encore moi avec mes tablespaces....


J'ai créé pour mon serveur 2 tablespaces (DATA et INDX) et je souhaite les utiliser dans ma base.
Pour ce faire je créé ma base avec le tablespace DATA (le plus utilisé) et à la création des index je les place dans le tablespace INDX.


Sauf que j'ai cette erreur :
psql:D:/Design_env/SBR/nouveauScript/schema/create_index.sql:20: ERREUR:  droit refusé pour le tablespace INDX


Voici mes scripts de création :

Les tablespaces et BDD sont créé avec l'utilisateur postgres (superutilisateur)
CREATE TABLESPACE "INDX" LOCATION 'CHEMIN_INDX';

CREATE TABLESPACE "DATA" LOCATION 'CHEMIN_DATA';

CREATE DATABASE "BRSE"
  WITH ENCODING = 'UTF8'
       TABLESPACE = "DATA"
       LC_COLLATE = 'French_France.1252'
       LC_CTYPE = 'French_France.1252'
       CONNECTION LIMIT = -1;



Les index sont créé avec un utilisateur de connexion qui a tous les droits sur le schéma
create unique index AK_CAN on CAN (CDCAN asc) tablespace INDX;

#6 Re : Général » tablespace serveur ou bdd » 01/06/2012 10:41:27

Merci pour vos réponse


Je pense que je vais faire un seul tablespace pour mon serveur, ce sera plus simple en developpement

#7 Re : Général » tablespace serveur ou bdd » 01/06/2012 10:02:55

rjuju a écrit :

Et également quelle est le volume de donnée à stocker ?

En volume sur Oracle par BDD (un seul schéma) :
50 tables pour un total de maxi de 1Go de données et en moyenne 100Mo

#8 Re : Général » tablespace serveur ou bdd » 01/06/2012 09:54:17

En fait sous Oracle, je gère deux tablespaces par base de données. Ils sont donc liés à la base de données.


Je suis en train de faire une migration vers Postgres de ces BDD et souhaite garder le même fonctionnement (ou le plus proche possible) que sous Oracle. Le problème c'est qu'avec PG, les tablespaces sont liés au serveur et non à la base de données.


Je voulais savoir s'il était préférable d'utiliser le même tablespace pour toutes les BDD du serveur ou de créé un tablespace par base pour se rapprocher du fonctionnement d'Oracle.


En gros, quel solution est la plus performante.


En terme de nombres de systèmes disques, j'utilises le même pour mes tests mais les clients sont susceptibles d'en utiliser plusieurs.

#9 Général » tablespace serveur ou bdd » 01/06/2012 09:26:43

brse
Réponses : 7

Bonjour,


Je suis à la recherche de la meilleur solution pour le stockage tablespace :
Faut-il créer des tablespaces pour chaque base de données d'un serveur (dans mon cas 2 par BDD) ou est-ce que j'ai meilleur temps mettre toutes mes BDD sur les mêmes tablespace ?


Pour information : Mon serveur peut contenir au moins 6 BDD avec chacune au moins 5 schemas (nombres en augmentation).


Je n'arrive pas à me rendre compte si c'est énorme en quantité sur le tablespace


Merci

#10 Re : Général » pg_dump, pg_restore sur schema différent » 31/05/2012 17:48:39

rjuju a écrit :

Si vous faîtes le dump en mode plain, vous pouvez éditer votre fichier pour modifier le nom du schéma.

Est-il possible du ne pas faire le dump en mode plein, c'est à dire en demandant d'exporter le schéma x mais sans mettre le nom du schéma dans le fichier ?

#11 Général » pg_dump, pg_restore sur schema différent » 31/05/2012 17:23:57

brse
Réponses : 3

Bonjour,

Le sujet a peut être déjà été traité mais je n'ai rien trouvé.


Je fais un dump comme ci-dessous de l'un de mes schéma de ma base et je souhaite le réimporté sur un autre schéma (faire une duplication du schéma en gros). Sauf que dans mon dump, j'ai le nom de mon schéma avant mes tables et du coup l'import dans mon nouveau shéma ne fonctionne pas.


pg_dump -h localhost -p 5432 -U postgres -f EXPORT_FILENAME.dmp -Fc -x -O -n MON_SCHEMA MA_BASE

pg_restore -h localhost -p 5432 -U postgres -d MA_BASE -x -n MON_NOUVEAU_SCHEMA EXPORT_FILENAME.dmp


Il me faudrait soit qu'il n'y ai pas le nom de mon schéma dans mon dump, soit que je puisse dire d'importer le premier schéma dans le deuxième (comme sous Oracle FROMUSER=.... TOUSER=.... avec la fonction imp).


Connaissez-vous quelques chose pour ce problème


Précision : dans mon cas c'est sur la même base de données mais en réalité le dump viendra d'un schéma x d'une base vers un schéma y d'une autre base


Merci

#12 Re : PSQL » Erreur dans la log » 30/05/2012 17:45:28

Le problème c'est que je suis obligé d'utiliser l'UTF8, j'ai montré le cas avec un accents mais je suis susceptible d'avoir d'autre cas de caractère qui ne peuvent pas être encoder en latin1 ou ISO.

#13 Re : PSQL » Erreur dans la log » 30/05/2012 17:14:35

Je vous ai envoyé un mail avec ce qu'il fallait pour faire passer le script.

Merci pour votre implication

#14 Re : PSQL » Erreur dans la log » 30/05/2012 16:04:13

Je suis sous windows et je ne connais pas la commande pour connaitre l'encodage du fichier.
Notepad++ me dit qu'il est en ANSI
Eclipse me dit en Cp1252

#15 Re : PSQL » Erreur dans la log » 30/05/2012 15:40:49

Je précise que je génère certains script INSERT automatiquement depuis une base de données Oracle et du coup le fichiers de sortie est en ANSI (ASCII).

#16 Re : PSQL » Erreur dans la log » 30/05/2012 15:37:44

mon_script.sql : 36
insert into LNG values ('2', '0', 'fr', 'Français');

Ca bloque avec le caractère 'ç'


En modifiant l'encodage de mon fichier en UTF8, la requête passe mais je ne comprend pas pourquoi sans la redirection et encodage ANSI, le script passe aussi

#17 Re : PSQL » Erreur dans la log » 30/05/2012 15:24:54

Je reviens vers vous car j'ai une nouvelle erreur lié à celle-ci.


En redirigeant la sortie comme indiqué ci-dessus la log est correcte cependant j'ai cette erreur qui apparait :
psql:D:/.../mon_script.sql:36: ERREUR:  séquence d'octets invalide pour l'encodage « UTF8 » : 0xe76169


A chaque fois que j'essaie d'insérer des caractères spéciaux dans ma base UTF8, j'obtiens l'erreur.
Sans la redirection de la log, les requêtes fonctionnent.

J'ai essayer de mettre SET client_encoding = 'UTF8'; dans mes fichiers SQL (http://www.developpez.net/forums/d60930 … ding-utf8/) mais cela ne change rien.


J'ai également essayer de mettre chcp 1252 avant de faire le psql (http://forums.postgresql.fr/viewtopic.php?id=986) mais aucun changement.


Avez-vous une solution pour ce problème sans modifier l'encodage de ma base (je suis obligé d'utiliser UTF8)

#18 Re : Général » pg_dump et schéma » 30/05/2012 11:16:46

Merci,


J'avais essayé avec "SBR_V3", 'SBR_V3', \'SBR_V3\' mais pas \"SBR_V3\" sad

#19 Re : Général » pg_dump et schéma » 30/05/2012 11:13:27

Excusez moi pour l'oublie.


Ma base de donnée s'appelle SBR et le schéma que je veux exporter SBR_V3


Commande qui m'exporte tous sans problème :
pg_dump -h localhost -p 5432 -U postgres -f EXPORT_FILENAME.dmp -Fc -x SBR


Commande qui me génère l'erreur :
pg_dump -h localhost -p 5432 -U postgres -f EXPORT_FILENAME.dmp -Fc -x -n SBR_V3 SBR


Erreur : pg_dump: Aucun schéma correspondant n'a été trouvé

#20 Général » pg_dump et schéma » 30/05/2012 11:03:26

brse
Réponses : 5

Bonjour,


Lorsque je met le paramètre -n SCHEMA dans un de mes scripts pg_dump, j'ai une erreur comme quoi le schéma n'existe pas.
Si je ne le met pas, il m'exporte tous mes schéma.


J'ai vérifié, je n'ai pas fait d'erreur dans le nom du schéma.


Quelqu'un aurait une explication ?


Merci

#21 Re : PSQL » Erreur dans la log » 30/05/2012 10:57:25

Merci ça fonctionne pour la commande psql.

En complément, est-il possible de faire la même chose dans un script sql (parfois dans mon script je change de log avec \o) ?

#22 PSQL » Erreur dans la log » 30/05/2012 10:15:12

brse
Réponses : 14

Bonjour,

J'exécute une commande psql depuis un script windows comme ceci :
psql -h localhost -p 5432 -d brse -U postgres -f "ma_requete.sql" -o ma_log.log

Mon problème : sur l'invite de commande, ça m'affiche toutes les requetes qui ne passent pas et l'erreur alors que sur mon fichier de log j'ai l'inverse (que celle qui passe).
Par exemple pour un insert, dans la log j'aurais "insert" (si il passe) par contre si j'ai un problème j'aurais sur l'invite de commande l'erreur et rien en log.

Est-il possible de mettre dans le fichier log tout ce qui s'affiche sur mon invite de commande (erreur, warning, infos, ....) ?

J'ai essayé de combiner avec le paramètre -a, -L, ... mais ça ne change rien pour mon fichier log.

Merci

#23 Re : Général » psql et paramètres » 25/05/2012 14:40:35

J'ai réussi en créant une nouvelle variable comme tu m'as dit mais sans mettre de " ou ' sur les variables et ça fonctionne :

\set script :oraclescript:sep:adminDir:sep'create_schema.sql'


Merci de votre aide

#24 Général » psql et paramètres » 25/05/2012 14:10:39

brse
Réponses : 2

Bonjour,

Dans un script bin, j'exécute une commande psql avec passage de paramètre afin de faire passer un script sql situé dans un fichier comme ci dessous :
psql -h localhost -p 5432 -U postgres -f "mon_script.sql" -o ma_log.log -d postgres --set postgrescript=%POSTGRE_SCRIPT% --set sep=%SEP%

Le script sql en question crée un utilisateur et fait appel à un autre fichier sql grâce à la comme \i comme ci dessous.


\set monautreScript monautreScript.sql
\i :'oraclescript':"sep":"monautreScript"

Mon problème :
Que ce soit la commande \i ou \echo, je n'arrive pas à concatener 2 (ou plusieurs) variables. A chaque fois on me rajoute un espace à la fin de chaque variable.
Du coup dans le cas présenté ci dessus, la commande \i s'arrête au dossier parent et ne prend pas le fichier en entré (elle ne prend en compte que la variable oraclescript, pas les deux autres).

Est-ce que quelqu'un à une solution ?

Merci

PS : Je ne peux pas mettre dans une seule variable avec le chemin de mon script car ce serait trop de travail.

Pied de page des forums

Propulsé par FluxBB