Vous n'êtes pas identifié(e).
Pages : 1
Bonjour tout le monde,
Je travaille sous CenOS 6.4 avec un moteur PostgreSQL 9.3.2.
Je cherche un moyen de dupliquer le contenu d'un schéma (pas les données mais la structure des tables, les vues, les fonctions, les séquences, enfin tout) dans un autre.
Tout ce que j'ai trouvé tourne autour de l'utilisation d'un dump/restore ou d'un "clone schema" sur wiki mais qui ne serait pas complet.
J'aurais voulu pouvoir le faire par une procédure stockée liée à un trigger.
Est-ce possible aujourd'hui ? Existe-t'il un "projet" complet ?
Hors ligne
C'est possible à faire, mais il n'existe rien de prêt pour ça. C'est à écrire complètement.
Le plus rapide sera donc un pg_dump -s | psql. Mais vous pouvez aussi créer votre propre procédure stockée, ce qui sera bien plus long à faire.
Guillaume.
Hors ligne
Bonjour Guillaume,
La solution du dump/restore ne me convient pas dans le cas présent.
Je voudrai qu'un User (non DBA), puisse ajouter dans une table CLIENTS du schéma public des informations liées au client, notamment un nom et un "modèle" (structure d'un schéma prédéfini).
Et ensuite par un système de trigger sur la table CLIENTS, déclencher la duplication de la structure "modèle" dans un nouveau schéma au nom du client.
Il n'existe donc "rien", pas de projets, sur ce style d'exercice ?
Merci.
Hors ligne
Je voudrai qu'un User (non DBA), puisse ajouter dans une table CLIENTS du schéma public des informations liées au client, notamment un nom et un "modèle" (structure d'un schéma prédéfini).
Moi, quand je vois "ajouter dans une table des informations", je pense INSERT. Mais j'ai comme l'impression que ce n'est pas aussi simple
Et ensuite par un système de trigger sur la table CLIENTS, déclencher la duplication de la structure "modèle" dans un nouveau schéma au nom du client.
Possible, mais je ne connais pas de procédure stockée déjà écrite et disponible que vous puissiez récupérer.
Il n'existe donc "rien", pas de projets, sur ce style d'exercice ?
Pas à ma connaissance.
De toute façon, qu'une insertion dans une table déclenche la création d'objets dans la base me semble pour le moins questionnable.
Guillaume.
Hors ligne
Bonjour Guillaume,
La solution du dump/restore ne me convient pas dans le cas présent.
Je voudrai qu'un User (non DBA), puisse ajouter dans une table CLIENTS du schéma public des informations liées au client, notamment un nom et un "modèle" (structure d'un schéma prédéfini).
Et ensuite par un système de trigger sur la table CLIENTS, déclencher la duplication de la structure "modèle" dans un nouveau schéma au nom du client.
Il n'existe donc "rien", pas de projets, sur ce style d'exercice ?
Merci.
ça devrait pas être a l'application de faire ce genre de chose ?
Hors ligne
Bonjour Messieurs,
Guillaume, oui c'est bien ça, faire un insert dans une table, tout simplement.
C'était pour que le User (non DBA), puisse ajouter un schéma (client) et sa structure dans la base, lorsqu'un nouveau client arrive, sans avoir besoin de nous.
Sinon, avec le dump/restore, est-il possible de faire exécuter ces commandes par une fonction Trigger ?
Hors ligne
Oui, théoriquement possible. Certainement génial si on veut ralentir les INSERT dans cette table, mais à priori elle ne sert qu'à ça. À mon avis, c'est une erreur. Il vaut mieux avoir un outil exécuté périodiquement, qui va vérifier cette table, et lorsqu'il détecte un nouveau venu, déclenche la création de la structure nécessaire. Bien, bien préférable.
Guillaume.
Hors ligne
Guillaume,
Cette table des clients ne contiendra pas plus d'une centaine de lignes.
Sinon, avec le dump/restore, est-il possible de faire exécuter ces commandes par une fonction Trigger ?
Hors ligne
-
Dernière modification par ruizsebastien (05/12/2014 15:53:55)
Cordialement,
Sébastien.
Hors ligne
Bonjour,
Oui c'est possible mais assez compliqué (personnellement je n'ai jamais mis ça en œuvre).
Voici un exemple :
http://www.postgresql.org/message-id/3F … conway.com
Sachez quand même que ce n'est jamais bon de permettre à postgres de pouvoir exécuter des commandes OS (en dehors de ce que fait le moteur nativement bien sûr). C'est la porte ouverte à de gros problèmes de sécurité et de stabilité.
Je serais plutôt de l'avis de Guillaume : il est préférable d'utiliser un outil externe (un shell par exemple) qui vérifiera la table en question et qui, si les conditions sont réunies, déclenche la copie du schéma dans un autre avec pg_dump pg_restore.
Cordialement,
Dernière modification par ruizsebastien (05/12/2014 15:56:34)
Cordialement,
Sébastien.
Hors ligne
Bonjour,
Ok, je laisse tomber l'idée de faire du dump/restore par trigger.
Je regarde pour écrire moi même une fonction en utilisant les informations du catalogue système et autres.
En utilisant la commande : CREATE TABLE nom_table (LIKE modele.table INCLUDING ALL); la duplication se fait bien MAIS, par exemple, le nom de la clé primaire ou d'un index est différent de l'original.
Pourquoi ?
Hors ligne
Parce que le nom de la table est utilisé pour générer le nom de l'index. Nom de table différent, nom d'index différent.
Guillaume.
Hors ligne
Bonjour Guillaume,
Ok, merci, je vais gérer :-)
Dernière modification par mortimer.pw (11/12/2014 14:55:20)
Hors ligne
Merci beaucoup Guillaume, j’avais également des problèmes pour dupliquer le contenu d'un schéma.
Bonjour, je viens de découvrir votre forum et je suis encore novice dans le domaine des bases de données. Je travaille actuellement dans une entreprise spécialiste de la distribution de pièces de rechanges pour du matériel industriel et je dois me servir de plus en plus régulièrement de système d'encodage. Si vous désirez plus d'information sur mon entreprise : http://www.htm-france.fr
Hors ligne
Pages : 1