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 : PSQL » Mauvaise mise en forme fichier.csv après extraction de ma BDD » 17/03/2016 20:24:45

Votre script (ou batch) si j'ai bien compris extrait les données de la base, les envoi sur la sortie standard qui est redirigée vers un fichier ?


Dans ce cadre, oui vous pouvez utiliser COPY en redirigeant sa sortie vers la sortie standard via la clause TO STDOUT.


Si vous avez repris les [] et | de la page de référence de la commande (documentation) oui il faut les supprimer mais ils ont un sens qu'il vaut mieux comprendre quand on lit la page.


Rapidement les caractères [] signifient que ce qu'il y a à l'intérieur est optionnel. Et le caractère '|' siginifie un choix entre plusieurs possibilités. Tout cela est expliqué dans la documentation.


Dans votre cas vous pouvez essayer (si j'ai bien compris ce que vous voulez obtenir... pas sûr...) la commande:

COPY t_transcodage(tfa_cod, tfa_al, code_dep_compta) TO STDOUT WITH (FORMAT csv, DELIMITER ';');

#2 Re : PSQL » Mauvaise mise en forme fichier.csv après extraction de ma BDD » 17/03/2016 16:58:45

Bonjour,


vous ne dites pas quelle(s) commande(s) vous utilisez dans votre fichier SQL qui expliquerait la sortie décrite (tout dans la 1ère colonne).


À priori vous devriez pouvoir utiliser la commande COPY ... TO STDOUT WITH ...

#3 Re : PL/pgSQL » Trigger sur vue » 29/02/2016 20:00:06

Bonsoir,


bizarre ce logiciel... ;-)


Si les vues ne peuvent pas être utilisées (et peut être même si elles le pouvaient - rafraîchir la vue matérialisée à chaque update sur les tables sources n'est peut être pas une bonne idée - à voir)
je pencherais plutôt vers une solution où les triggers sont posés sur les tables sources auteur et editeur et non pas sur la vue v_auteur_editeur car, si je
comprends bien, il s'agit de substituer une table à la vue actuelle. Donc pas la peine de se compliquer la vie en partant d'une vue qui n'est pas la source de l'information.
En plus poser des triggers sur une vue me paraît bien plus compliqué que sur une table.


Sauf si la vue est ce qui est utilisé pour mettre à jour les données et que ce fait n'est pas modifiable (codé dans l'application sur laquelle on n'a pas la main).

#4 Re : Général » ignorer un trigger » 12/02/2016 19:53:43

Bonsoir,


pour désactiver un trigger il n'y a pas à ma connaissance d'autres possibilités que d'utiliser ALTER TABLE ... DISABLE TRIGGER ...
De plus cette commande prend un verrou (SHARE ROW EXCLUSIVE) de telle manière qu'aucune autre session ne puisse modifier la table de manière concurrente ce qui peut être embêtant si il y a pas mal d'accès simultané.


Les solutions alternatives ? Quelques pistes:


    - Le trigger pourrait être mis sur l'INSERT non ?
    - Un trigger est-il nécessaire ? Pourquoi ne pas faire une requête ad-hoc lorsque vous avez besoin du dernier commentaire ? Problème de performance ? Ajout d'un index sur la table commentaires (CREATE INDEX ON commentaires(id_objet, date_creation)) ?
    - Créer une table spécifique qui ne stocke qu'une référence sur le dernier commentaire de chaque objet (à mettre à jour par exemple via un/des trigger(s) sur la table principale commentaires):

CREATE TABLE last_commentaires(
      id_objet integer
    , id_last_commentaire integer

    , PRIMARY KEY(id_objet, id_last_commentaire)
    , FOREIGN KEY(id_objet) REFERENCES objets(id_objet)
          ON DELETE CASCADE
    , FOREIGN KEY(id_last_commentaire) REFERENCES commentaires(id_commentaire)
          ON DELETE CASCADE
);

#5 Re : Optimisation » ptimisation de requête update » 11/02/2016 10:13:41

Mais la requête ci-dessus fait un simple update, qui plus est sur 0 ligne. C'est pourquoi je ne comprends pas ces écritures dans le journal de transaction.
Sauf si il y a une activité par ailleurs sur la base en parallèle...

#6 Re : Optimisation » ptimisation de requête update » 10/02/2016 21:03:30

Oui la fréquence des checkpoints est plus espacée ce qui fait qu'ils interfèrent moins avec les requêtes. Dans votre cas j'imagine que l'augmentation est telle qu'aucun checkpoint
n'intervient pendant la requête qui peut profiter à 100% de la bande passante ainsi libérée.


L'augmentation de la fréquence des checkpoints n'augmente pas a priori le risque de pertes de données. Par contre il augmente le volume de données que chaque checkpoint aura
à traiter (écrire sur disque). Son impact sera à ce moment là plus important (notamment sur les malheureuses requêtes qui auront la malchance d'être effectuées en même temps).


Et en cas de crash le volume à rejouer des journaux de transaction sera plus important parce que les données qu'ils contiennent n'auront pas été écrites dans les tables de données.


Par contre j'aimerais bien qu'on m'explique en quoi la requête présentée remplie le journal de trasaction au point de déclencher le chekpoint.

#7 Re : Optimisation » ptimisation de requête update » 10/02/2016 15:06:29

Bonjour,


une alternative possible, intéressante ou pas en fonction de comment sont alimentées les tables sources (fréquences et volume), est de remplacer
ces calculs lourds par des triggers qui mettent à jour le ou les calculs au fil de l'eau. À voir...

#8 Re : Optimisation » ptimisation de requête update » 08/02/2016 19:27:04

Bonjour,


si vous lisez l'anglais vous pouvez aller voir cette page pour vous aider dans vos réglages. Certains réglages varient en fonction de l'OS.


work_mem est fixé à une valeur relativement basse parce que c'est un paramètre qui s'applique à chaque session (même à chaque opération de tri - il peut y en avoir plusieurs simultanément sur une même session).
Vous pouvez probablement l'augmenter avec profit (car il est utilisé pour les tris qui apparaissent dans votre requête) si vous êtes sûr qu'il y aura un nombre restreint d'utilisateurs ou
pouvez baisser ce nombre (max_connections).

#9 Re : Général » Ma vue sur une foreign table ne fonctionne pas » 08/02/2016 18:20:19

Bon, je crois comprendre ce qu'il se passe. Le comportement constaté provient du système de réécriture des règles qu'utilise les vues. Voir la doc.


Les requêtes réécrites par le système de vue sont  exécutées sous l'utilisateur propriétaire de la vue.


Une des solutions est bien de mettre l'utilisateur qui accède la vue comme propriétaire ce qui n'est pas un problème a priori, si ?


Dans le cas présenté c'est très perturbant: l'utilisateur X peut accèder aux données de la table mais pas via une vue qui ne fait qu'accèder la table.


Tout cela devrait être confirmé par des utilisateurs plus expérimentés que moi.

#10 Re : Général » Ma vue sur une foreign table ne fonctionne pas » 08/02/2016 17:52:42

Mais existe t-il un moyen pour dire a la vue d'utiliser les privilèges du rôle connecté et non celui du propriétaire de la vue?

Mais c'est le cas automatiquement, c'est le contraire qui demande des instructions particulières (SET ROLE, SET SESSION AUTHORIZATION).


Attendons l'avis des autres participants au forum.

#11 Re : Général » Ma vue sur une foreign table ne fonctionne pas » 08/02/2016 17:18:39

Que vous arriviez à avoir sous le même utilisateur un select fonctionnel sur la table étrangère et pas sur la vue (qui fait un simple select sur la table) qui a  pourtant le droit SELECT.... est étonnant.


Désolé mais pour le moment je n'ai plus trop d'idées...


Ne désepérez pas il passera bien quelqu'un dans le coin qui saura mettre le doigt sur là ou ça coince.

#12 Re : Général » Ma vue sur une foreign table ne fonctionne pas » 08/02/2016 16:15:22

Le \dp tf_test_tes ci-dessus indique que la table se trouve dans le schema proprietaire. Votre vue fait référence à une table qui se trouve dans le schéma symphonie.
Ramenez vous de quelconques données, que ce soit sous user_app ou proprietaire, de cette vue ?


SECURITY DEFINER permet d'indiquer à PostgreSQL qu'il doit exécuter la fonction avec les privilèges du propiétaire de la fonction et pas, comme par défaut, avec les privilèges de l'utilisateur qui exécute la fonction.

#13 Re : Général » Ma vue sur une foreign table ne fonctionne pas » 08/02/2016 15:41:28

Mmm.... mystère....


Que donne le \dp sur la vue et la table après le GRANT ? Un \dv vf_test_tes également pourrait peut être aider.


Vous confirmez que pour l'utilisateur user_app un SELECT sur la table étrangère ramène des données (alors que la vue rapporte l'erreur ci-dessus) ?


Quelle est la définition de la vue si ce n'est pas confidentiel ? La vue n'utiliserait pas une fonction définie avec la clause SECURITY DEFINER ?


Vous indiquiez précédemment que vous n'utilisiez que le schema public. Pourtant je vois encore un schema symphonie dans la sortie du \det ci-dessus.

#14 Re : Général » Ma vue sur une foreign table ne fonctionne pas » 08/02/2016 13:10:28

Sous une session propriétaire octroyer les droits suivants:


GRANT SELECT ON tf_test_tes, vf_test_tes TO user_app;

puis réessayer les commandes \dp et SELECT sous une session user_app.

#15 Re : Général » Ma vue sur une foreign table ne fonctionne pas » 08/02/2016 11:34:52

Bonjour,


c'est un peu confus ;-)


Pour essayer de vous répondre, pouvez vous donner le résultat des commandes suivantes (sous psql et sous une même session):

\des
\deu
\det
\dp votre_vue
\dp la_table_referencee_par_la_vue
SELECT session_user, current_user;
SELECT une_colonne FROM votre_vue LIMIT 1;

#16 Re : Général » Télécharger la base donnée à partir d'un serveur distant » 05/02/2016 19:02:15

Bonjour,


c'est parce qu'à défaut d'indication le client psql se connecte sous le nom d'utilisateur sous lequel vous le lancer (ici root). Et visiblement cet utilisateur n'existe pas pour le serveur PostgreSQL
(PostgreSQL a sa propres liste d'utilisateurs, il n'y a pas obligatoirement correspondance avec la liste des utilisateurs système).


Vous devez vous connecter sous le nom d'un utilisateur au sens PostgreSQL qui a les droits de connexion sur la base de données cible. Avec psql vous indiquez cet utilisateur avec l'option -U.


Vous devriez lire un peu la doc sur le sujet. Un man psql vous aidera également.

#17 Re : Général » Ma vue sur une foreign table ne fonctionne pas » 05/02/2016 13:20:38

Il n'est pas nécessaire de mettre l'utilisateur comme propriétaire, l'octroi du privilège SELECT devrait suffire.


Je suppose que le GRANT SELECT ON VF_TEST_TES TO user_app n'a pas été pris en compte pour une raison ou une autre.


Sous psql (je ne sais pas avec pgAdmin3 que je n'utilise pas) vous pouvez faire un \dp VF_TEST_TES pour voir qui peut accèder la vue.

#18 Re : Général » Ma vue sur une foreign table ne fonctionne pas » 05/02/2016 12:30:04

Merci pour ces 1ers éléments (je pensais surtout aux 2 requêtes SELECT sur la table étrangère et sur la vue ainsi qu'au(x) erreur(s) éventuelle(s) renvoyée(s) au client).


En l'état je vois que la table étrangère est créée dans le schéma courant et que la vue effectue sa requête sur une table qui est dans le schéma "symphonie". Les 2 schémas sont les mêmes ?


Et la requête dans la vue sélectionne une colonne TYPE que je ne vois pas dans la table.


Si vous pouvez montrer les 2 requêtes qui ne renvoient pas les mêmes résultats et les éventuelles erreurs ca aiderait probablement.

#19 Re : Général » Ma vue sur une foreign table ne fonctionne pas » 05/02/2016 11:40:40

Bonjour,


pouvez vous donner des précisions et notamment les requêtes effectuées et au minimum la ou les erreurs rapportées ?

#20 Re : Général » COPY FROM local file » 03/02/2016 17:58:37

Bonjour,


les fichiers à  importer doivent être accessibles par le serveur (fichiers locaux ou sur un système de fichier "monté" localement au serveur, attention à l'encoding). C'est le cas ?


Aussi je suis étonné par l'argument de quote:

...quote E'\b'...

Le caractère de quotation est backspace ? Il y a quelque chose qui m'échappe...

#21 Re : Général » Connexion PSQL distante » 03/02/2016 12:53:10

Bonjour,


question bête mais comme vous ne précisez pas sait-on jamais: avez vous rechargé la configuration (pg_ctl reload) ?


Attention aussi à l'ordre des règles dans pg_hba.conf: la 1ère règle qui correspond est celle qui sera retenue par le serveur.
Vous pouvez donc, si vous ne l'avez pas encore fait, jeter un oeil sur les règles au dessus de celle présentée pour voir si l'une d'elles ne "matche" pas.


Assurez vous également que l'adresse IP que vous indiquez est bien celle qui est présentée au serveur.

#22 Re : Général » Accès par localhost vs mondomaine.tld » 31/01/2016 17:46:30

Bonjour,


quelle est la valeur du paramètre listen_addresses (SHOW listen_addresses) ?

#23 Re : PL/pgSQL » Faire un pg_dump en modifiant le nom de la table » 28/01/2016 17:21:34

Je ne sais pas si l'option a été étudiée mais vous pouvez aussi déclarer dans la base1 un serveur distant vers la base2, créer une table distante (CREATE FOREIGN TABLE) et faire vos requêtes de mises à jour à partir de cette table distante.


C'est la solution la plus "clean" me semble t-il. Certes il y a une phase de mise en place mais pas délirante.

#24 Re : PL/pgSQL » Faire un pg_dump en modifiant le nom de la table » 28/01/2016 16:19:09

Bonjour,


vous ne pouvez pas faire un simple ALTER TABLE OldName RENAME TO NewName après avoir récupéré la table d'origine tel que ?


Sinon, à l'inverse, il est peut être possible avant de lancer le dump de dupliquer dans BDD1 la table d'origine sous le nouveau nom souhaité:

CREATE TABLE NewName (LIKE OldName INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES);
INSERT INTO NewName SELECT * FROM OldName;

Voir la doc de CREATE et notamment les options possibles de la clause LIKE.


Il y a aussi la solution du COPY TO et COPY FROM.

#25 Re : Installation » Serveur postgres sous Linux Serveur 14.04 Ubuntu non écouté » 24/01/2016 23:25:41

Bonjour,


visiblement le problème se situe dans le paramétrage du fichier pg_hba.conf.


Pour vous aider il serait bien d'en savoir un peu plus sur le contenu de ce fichier et de connaître l'ip à partir de laquelle vous tentez la connexion.


Sinon pour que les modifications du fichier pg_hba.conf soient prises en compte un simple SIGHUP suffit. Ce dernier peut être envoyé par le mécanisme système qui gère les daemons:
systemctl reload postgresql par exemple pour un système géré par systemd. Pas besoin de redémarrer le serveur PostgreSQL et encore moins le serveur dans son intégralité
(quoique l'effet recherché sera atteint mais c'est un  un peu écraser une mouche avec un marteau ;-)).

Pied de page des forums

Propulsé par FluxBB