Vous n'êtes pas identifié(e).
Pages : 1
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.
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.
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
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
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';
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;
Merci pour vos réponse
Je pense que je vais faire un seul tablespace pour mon serveur, ce sera plus simple en developpement
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
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.
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
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 ?
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
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.
Je vous ai envoyé un mail avec ce qu'il fallait pour faire passer le script.
Merci pour votre implication
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
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).
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
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)
Merci,
J'avais essayé avec "SBR_V3", 'SBR_V3', \'SBR_V3\' mais pas \"SBR_V3\"
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é
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
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) ?
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
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
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.
Pages : 1