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 01/09/2016 14:34:32

Agent PostgreSQL collecteur de configuration

Bonjour,

Je veux créer un agent collecteur de configuration du SGBDR PostgreSQL en bash et je ne sais comment m'en tenir ?

Est-ce que quelqu'un pourrait me donner une piste ?

Pour info, cet agent aura pour rôle de collecter toutes les informations du SGBDR à savoir par exemple les noms des machines sur lesquelles PostgreSQL est installé, les  noms de toutes les bases de données, leurs configurations respectives, les tables, tablespaces, schémas, views et index qui leur contiennent etc.

S'il y a quelqu'un qui a un lien qui pourrait m'aider aussi, ce sera génial.

Merci d'avance la communauté !!!

Hors ligne

#2 01/09/2016 15:39:06

rjuju
Administrateur

Re : Agent PostgreSQL collecteur de configuration

Pour ma part, pas plus d'aide à apporter que le mois dernier quand vous avez posé exactement la même question.

Hors ligne

#3 01/09/2016 16:07:38

Re : Agent PostgreSQL collecteur de configuration

Oui effectivement,

Mais là, je veux juste savoir comment m'y prendre et le reste, je m'en chargerai.

Sinon merci quand même !

Hors ligne

#4 02/09/2016 14:43:19

ruizsebastien
Membre

Re : Agent PostgreSQL collecteur de configuration

Bonjour,

Nous on fait ça pour alimenter une base de données référentielle.
Il faut partir d'une ou plusieurs tables de paramètrage qui contient la liste des serveurs et des user/password postgres
et ensuite il faut coder un script shell pour aller chercher à distance les informations que vous voulez avec psql ou avec des commandes OS selon le cas.
Vous pouvez stocker les infos dans une base de données pour faire du reporting.

Dernière modification par ruizsebastien (02/09/2016 14:44:12)


Cordialement,

Sébastien.

Hors ligne

#5 02/09/2016 15:16:58

Re : Agent PostgreSQL collecteur de configuration

Merci beaucoup M ruizsebastien pour cette réponse.

C'est un peu ça effectivement sauf que je voudrais stocker les infos dans des fichiers CSV, mon plus grand problème est comment m'y prendre avec le développement du script.

Quand je tape manuellement les requêtes sql, j'ai les résultats mais je comprends pas comment je dois m'y prendre automatiser tout ça vias un script bash.

J'ai cru comprendre que dans mon script, il devra y avoir les instructions qui permettront la connexion à la base et à partir de là, avec une requête dynamique, parcourir les tables du SGBDR et retourner les résultats dans un fichier CSV sauf que si je dois écrire toutes les requêtes à la main, ça ne va pas le faire.

J'ai donc pensé à créer un fichier de configuration dans lequel je vais recenser toutes les tables du SGBDR et que mon script ira cherché à la volet selon si la table est dé-commentée ou pas.

Encore une fois merci beaucoup monsieur ruizsebastien.

Hors ligne

#6 06/09/2016 10:22:56

Re : Agent PostgreSQL collecteur de configuration

Bonjour les amis,

DIEU merci, j'ai réussi à créer le script de l'agent collecteur d'informations PostgreSQL, même si il y a beaucoup à parfaire.

Je vous mets en copie mon script qui, je ne l'aurai jamais imaginé, est si simple à écrire.
Le voici ci-dessous:

#!/bin/bash

list_of_tables=(
information_schema.columns
informations_schema.views
informations_schema.schemata
information_schema.tables
pg_tables
pg_tablespace
pg_database
pg_indexes
pg_views
)

for i in $"{list_of_tables[@]}";
do
    psql -c "COPY SELECT * FROM $i) TO '/path/$i.csv' WITH CSV HEADER";

done

path = le chemin du répertoire dans lequel vous souhaitez copier les résultats de la requête SELECT

N'hésitez pas à me donner des conseils pour améliorer le script.

Je sais par exemple qu'il faut un utilisateur qui a les privilèges de se connecter sur le serveur PostgreSQL et le droit SELECT sur toutes les tables.
Si vous vous voyez d'autres améliorations, vraiment n'hésitez à m'aider.

Merci d'avance la communauté !

Dernière modification par Cheikhou Fofana (06/09/2016 14:09:42)

Hors ligne

#7 13/09/2016 10:59:49

Re : Agent PostgreSQL collecteur de configuration

Bonjour les amis.
Je reviens vers vous pour exposer un autre problème.


Après exécution du script que je vous avais mis en copie la semaine dernière, je n'obtiens pas les tables des autres bases de données sur le serveur.
En effet, le script ne m'affiche que les tables de la base postgres or il y a sur le serveur il y a d'autres bases de données.


Normalement, toutes les tables de toutes les bases de données sur le serveur doivent se trouver dans la tables pg_tables, non ?

Hors ligne

#8 13/09/2016 11:13:49

ruizsebastien
Membre

Re : Agent PostgreSQL collecteur de configuration

eh non, il faut faire les requêtes dans chaque base.
pg_tables et pg_class donnent des informations différentes si on est dans telle ou telle base.


Cordialement,

Sébastien.

Hors ligne

#9 13/09/2016 11:33:06

rjuju
Administrateur

Re : Agent PostgreSQL collecteur de configuration

Au passage, la liste des bases de données sur lesquelles on peut se connecter peut être récupérée avec la requête suivante :

SELECT datname FROM pg_database WHERE datallowconn;

À vous de voir si vous voulez inclure les bases de template et la base postgres ou pas.

Hors ligne

#10 13/09/2016 17:27:34

Re : Agent PostgreSQL collecteur de configuration

Merci beaucoup tous les deux.

Vous êtes supers tous les deux.

Hors ligne

#11 14/09/2016 11:58:40

Re : Agent PostgreSQL collecteur de configuration

Bonjour,


Je finis jamais de vous solliciter mes amis.

Ma requête aujourd'hui est que j'ai créé un curseur en plpgsql qui me récupère la liste des databases comme suit:


--drop function dbCursor();
CREATE OR REPLACE FUNCTION dbCursor() RETURNS char AS $$
DECLARE
      curseur refcursor;
      dbname pg_database.datname%TYPE;
BEGIN
    OPEN curseur FOR execute ('SELECT datname FROM pg_database');
    LOOP
        FETCH curseur INTO dbname;

        IF NOT FOUND THEN
            EXIT;
        END IF;
        RAISE NOTICE 'Dbname: %', dbname;
        COPY (SELECT * FROM information_schema.tables) TO '/home/developer/FOFANA/Agent PostgreSQL/result/information_schema.tables.csv' WITH CSV HEADER DELIMITER ';' NULL '-';
       
    END LOOP;
    CLOSE curseur;

    RETURN NULL;
     
END;
$$ LANGUAGE plpgsql;

SELECT dbCursor();


Je demande maintenant comment je dois faire pour me connecter avec aucune des base et y exécuter la requête SELECT * FROM pg_tables;   ?


Je peine avec le code depuis, je me suis rendu conte que la commande psql ne fonctionnait pas dans mon code.


Si quelqu'un a la solution, je lui en serai très reconnaissant.


MERCI D'AVANCE LES AMIS !!!

Hors ligne

#12 14/09/2016 16:58:45

rjuju
Administrateur

Re : Agent PostgreSQL collecteur de configuration

Vous n'avez pas d'autre choix que d'ouvrir une connexion spécifique sur chaque base. Si votre script est en bash, cela veut dire avec psql.

La connexion se fait ainsi :

psql [options] nom_base

Hors ligne

Pied de page des forums