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 : Migration » Migration base de données postgres (tables et données) » 02/02/2020 23:09:29

Merci pour cette réponse .
Migration de postgres ancienne version vers postgres nouvelle version avec possibiltés d'augmenter une table ou d'en retrancher une .
Merci encore pour votre aide .
Bonne soirée

#2 Migration » Migration base de données postgres (tables et données) » 02/02/2020 00:16:23

Mangone
Réponses : 3

Bonsoir les amis .

Je vous remercie par avance . Je cherche une procédure de migration d'une base postgres avec la possibilité de de restaurer les données savegardées  dans leur intégralité mais aussi une éventuel évolution des tables.
Auriez-vous s'il vous plait une procédure.
Je suis sous Centos et je n'ai pas de Gui .
Merci pour toute aide et bon week-end

#3 Re : Général » Débutant demande aide » 11/06/2018 08:03:10

Merci pour la démonstration, elles est claire et je comprends bien votre démarche.
Le soucis que j'ai, c'est que cette table clients ou mangone comme vous l'avez appelé contenait des données et je ne voulais pas au moment de la purge que celle-ci soit ignorées parce que n'ayant pas de date (il n'existait pas de colonne date avant).
Je pense que sans passer par un pg dump et un pg restore qui garantit les "non doublon", il est presque impossible de les éviter.
Pour une table ne contenant aucune cela fonctionne convenablement mais si elle contenait des données et après avoir fait 
sql_query "update clients set mise_a_jour =(select DETECTEDLAST from département where oid=_oid and wid=_wid) where mise_a_jour is null;" , les doublons sont inévitables.

#4 Re : Général » Débutant demande aide » 10/06/2018 02:29:25

Voici mon jeu de tests:

#!/bin/bash

#SCRIPT de sauvegarde de la table clients
#A exécuter en tant que postgres ou via "sudo -u postgres script.sh"


PGPATH="/usr/bin"
QUIET="-q"

#### TODO : VARIABLE A CHANGER SI BESOIN
CPV_DB_NAME="CORTEX" #Nom de la base de données cible
CPV_DB_PORT=5345 #Numéro de port associé au cluster
REST_D="./" #Dossier ou se trouve le .dump

function sql_query(){
sudo -u postgres psql -p "$CPV_DB_PORT" -d "$CPV_DB_NAME" -c "$1"
}

#1)Ajout de colonne dans la table clients
sql_query "Alter table clients add column mise_a_jour date;"

#2)mise en place des données de la colonne MAJ
sql_query "update clients set mise_a_jour =(select DETECTEDLAST from départements where oid=_oid and wid=_wid) where mise_a_jour is null;"

#3)Sauvegarde de la table clients
sudo ./dump_clients.sh

#4)Re-création de la nouvelle table clients
sql_query "alter table clients drop constraint fk723362laad036112";
sql_query "alter table clients rename to première_table_clients";
sql_query "create table clients (_oid int8 not null, _wid int8 not null, tracks_oid int8 not null, tracks_wid int8 not null, mise_a_jour date, primary key (_oid, _wid, tracks_oid, tracks_wid))";

#5)Remplissage de la table clients
sudo -u postgres pg_restore -p $CPV_DB_PORT -d $CPV_DB_NAME -a -F c -t clients  --disable-triggers --verbose  ./clients.dump

#7)Mise en place du nouvel index
sql_query "create index idx_clients_mise_a_jour on clients(mise_a_jour)" ;

sudo -u postgres psql -p $CPV_DB_PORT -d $CPV_DB_NAME -f ./trigger.sql

Commentaire : lorsque j'execute ce script basé sur la sauvegarde de la table clients, je n'ai aucun doublon.
Lorsque je fais une insertion manuelle sans passer par un dump de cette table, j'ai des doublons de toutes les lignes même au niveau des dates incrémenter dans cette nouvelle colonne .
Mon objectif est de ne pas  dumper cet table, donc de ne pas restorer et par conséquent de ne pas avoir de doublons .


Merci par avance

#5 Re : Général » Mon Explain Analyze ne renvoie rien » 09/06/2018 00:58:12

Si je comprends bien,

Je dois . taper cette commande et effectuer la sortie vers un ficher txt ?

sudo -u postgres psql -X -P -p XXXX -d "MA_BASE explain analyze client where enddate <= ‘27/02//2017’::date; >/YY/ZZ.result_explain_analyze.txt

#6 Re : Général » Débutant demande aide » 09/06/2018 00:43:59

Voici ma fonction Trigger :

REATE OR REPLACE FUNCTION suivi_mise_a_jour()
RETURNS trigger AS
$BODY$
BEGIN
NEW.mise_a_jour:= current_date ;
RETURN NEW ;
END ;
$BODY$
LANGUAGE plpgsql;


Voici mes Triggers:

CREATE TRIGGER Before Insert_clients
BEFORE INSERT ON tracks_transmitter
FOR EACH ROW
EXECUTE PROCEDURE suivi_mise_a_jour();

CREATE TRIGGER BeforeUpdate_clients
BEFORE UPDATE ON tracks_transmitter
FOR EACH ROW
EXECUTE PROCEDURE suivi_mise_a_jour();

Ces 2 triggers fonctionnent correctement car elles remplissent la colonne mise_a_jour.

#7 Re : Général » Débutant demande aide » 08/06/2018 23:41:21

Mon test pour être précis était d'insérer une nouvelle colonne maj à une de mes tables afin que la purge de cette maj s'effectue sur la base de date (3O jours par exemple). Je précise que cette table contenait déjà des données. J'ai crée une fonction trigger et 2 triggers pour des before update ou before insert. Puisque cette table contenait des données avant, la colonne date était vide pour les données déjà présentes en base.
J'ai lancé la commande update client set maj = (select detectedlast from departement where OID = _OID and WID = _WID) where maj  is null;
à ma grande surprise, à chaque insert, j'ai un doublon de chaque ligne.
Le fait d'avoir des doublons me dérrange et je souhaite avoir qu'une entrée.
Je ne sais si j'ai été clair cette fois c-sur le jeu de test ou pas .

Merci en tous cas pour l'aide

#8 Re : Général » Mon Explain Analyze ne renvoie rien » 08/06/2018 22:22:42

En réponse à votre question, l'ai l'habitude de me connecter à la base à la base pour lancer ma commande EXPLAIN ANALYZE, je ne sais pas si la commande  psql -c "EXPLAIN ANALYZE ..."  ou  \o /.../fichier se lance dans la base ou hors de la base .

ma connexion s'effectue via cette commande: sudo -u postgres psql -P XXXX -d "MA_BASE .
à partir d'ou dois-je lancer ma commande ?

#9 Re : Général » Débutant demande aide » 08/06/2018 20:46:07

J'en prends note pour la suggestion .

J'ai pu régler le problème de la fonction trigger ainsi que les triggers before update et before insert.
Un petit rappel et une petite question pour finir cette expérience.
J'avais créé une colonne sur une table (colonne mise à jour) et créé une fonction trigger et 2 triggers qui à chaque fois qu'il ya un insert ou une mise à jour prend la date du jour et l'insère .

Question : si je pars d'un dump que je restore pas de soucis tout se passe bien  pas de doublons. Si j' insère directement ( a la main ) les lignes sont doublées.

Pourquoi postgres se comporte ainsi ?
Comment faire pour ne pas avoir de doublons .

Merci une fois de plus pour votre aide .

#10 Re : Général » Mon Explain Analyze ne renvoie rien » 08/06/2018 20:34:07

Merci pour la réponse .
ce qui qui est bizarre, c'est qu'elle ne renvoie aucun message si ce n'est un retour au prompt de la Base ?

#11 Général » Mon Explain Analyze ne renvoie rien » 08/06/2018 16:52:39

Mangone
Réponses : 8

Bonjour,

Je cherche une aide sur un problème de non renvoi de requête, certainement j'ai un problème de syntaxe.
Merci de bien vouloir me  corriger s'il vous plait .

Commande:

Explain analyze delete from client where enddate <= ‘27/02//2017’::date;


Merci d'avance

#13 Général » Copy Explain Analyze » 07/06/2018 23:12:57

Mangone
Réponses : 2

Bonjour,

J'avais juste une question sur  une éventuelle la commande "explain analyze".
je suis sur une vmware et je souhaite copier le résultat de ma commande explain analyze.

existe-t il une commande copy explain analyze ?
Si oui quelle est sa syntaxe ?


Merci d'avance

#14 Re : Général » Débutant demande aide » 07/06/2018 00:53:19

Bonsoir,

Merci pour vos aides. J'ai acquis de nouvelles connaissances sur les fonctions trigger ainsi que ls triggers.
testés, cela renvoie une entière satisfaction excepté juste une amélioration: Impossible de mettre à jour la table 'member' dans la fonction / trigger stockée

Fonction:
CREATE OR REPLACE FUNCTION suivi_mise_a_jour()
RETURNS trigger AS
$BODY$
BEGIN
NEW.mise_a_jour:= current_date ;
RETURN NEW ;
END ;
$BODY$
LANGUAGE plpgsql


Trigger:

CREATE TRIGGER BI_clients
BEFORE INSERT ON clients
FOR EACH ROW
if NEW.mise_a_jour is not null
EXECUTE PROCEDURE suivi_mise_a_jour();


Quelqu'un saurait ou est le problème ?


Merci d'avance

#15 Re : Général » Problème d'automatisation de script » 30/05/2018 22:48:20

Bonsoir Guillaume ,

Est-ce que tu penses que cette syntaxe est correcte :

function sql_query(){

  sudo -u postgres psql -p "$PG_PORT" -d "$PG_DATABASE" -c "$1"
}

#16 Re : Général » Problème d'automatisation de script » 30/05/2018 19:23:47

Bonjour Sébastien ,

Je viens de voir ta réponse et je te remercie . Je vais argumenté au niveau des problème que cela me pose .
Voici ce que j'ai pu établir comme script d'automatisation mais j'ai des messages d'erreurs au lancement:

Script:
#!/bin/bash

#SCRIPT de sauvegarde de la table clients
#A exécuter en tant que postgres ou via "sudo -u postgres Livrable.sh"

PGPATH="/usr/bin"
QUIET="-q"

#### TODO : VARIABLE A CHANGER SI BESOIN
CPV_DB_NAME="MYDATABASE" #Nom de la base de données cible
CPV_DB_PORT=5333 #Numéro de port associé au cluster
REST_D="/mnt/MYDATABASE/DUMP" #Dossier ou se trouve le .dump

function sql_query(){
  postgres -u psql -p "$CPV_DB_PORT" -d "$CPV_DB_NAME" -c "$1"
}
#1)Ajout de colonne mise_a_jour dans la table clients
sql_query "Alter table clients add column mise_a_jour date;"

#2)mise en place des données de la colonne MAJ
sql_query "update clients set mise_a_jour = (select DETECTEDLAST from numéro de carte where oid = _oid and wid = _wid) where mise_a_jour  is null;"

#3)Re-création de la nouvelle table client
sql_query "alter table clients drop constraint fk xxxxxxxxxxxxx";
sql_query "alter table clients rename to first_frist clients";
sql_query "create  table clients
        _oid int8 not null,
        _wid int8 not null,
        tracks_oid int8 not null,
        tracks_wid int8 not null,
        mise_a_jour date,
        primary key (_oid, _wid, tracks_oid, tracks_wid)";

#4)Remplissage de la table clients
pg_restore -p $CPV_DB_PORT -d $CPV_DB_NAME -a -F c -t clients  --disable-triggers --verbose -f /mnt/MYDATABASE/DUMP/clients-a-c.dump 


Je sais que toutes ces commandes tapées individuellement en ligne de commande fonctionnent. Lorsque je j'utilise cette fonction elle génére des erreurs du genre "Livrable.sh: ligne 15 $'\302\240 :command introuvable. 
La ligne 15 correspond à : postgres -u psql -p "$CPV_DB_PORT" -d "$CPV_DB_NAME" -c "$1"

Voilà les problèmes auxquels je suis confrontés.
Merci d'avance pour l'écoute et le dépannage .

#17 Re : Général » Problème d'automatisation de script » 29/05/2018 21:48:50

Hey oui Guillaume, C'est là que j'ai un problème, et c'est encore là ou je sollicite le forum  pour une aide vraiment précieuse.
Je suis preneur de toute aide dans ce sens .
Merci d'avance

#18 Re : Général » Problème d'automatisation de script » 29/05/2018 21:28:51

Bonsoir Guillaume,

Merci pour ta réponse . Il est vrai que j'ai testé toutes ces instructions, elles fonctionnent toutes.
Mon problème je veux que la lancement soit automatique et non de façon individuelle. Je veux que la 1ère instruction lance toutes les autres instructions.
Je ne sais pas si je suis clair sans mon projet ?
Je pense que si !

#19 Général » Problème d'automatisation de script » 29/05/2018 19:53:47

Mangone
Réponses : 9

onsoir,

Merci pour cette oreille attentive, merci à ceux qui nous éclairent quand on ne sait plus ou donner de la tête.
Si je suis revenu ce soir, s'est que j'ai un problème que je n'arrive pas à résoudre. Je remercie toutes contribution.
Il s'agit dee scripts qui font appel à des fichiers sql et l'objectif est pour moi de faire un lancement pour tout dérouler .
J'ai vraiment besoin de cette aide.
1) Ajout de nouvelle colonne dans la table "clients"
* Fichier .sql contenant : psql -f
Alter table client add column mise_a_jour date;

2) Mise en place de données dans la table clients
*Fichier .sql contenant : psql -f
update tracks_transmitter set mise_a_jour = (select DETECTEDLAST from client where oid = _oid and wid = _wid) where mise_a_jour  is null;

3) Un Pg-dump

#!/bin/bash

#SCRIPT DE SAUVEGARDE DE LA TABLE clients

PGPATH="/usr/bin"
QUIET="-q"

#### TODO : VARIABLE A CHANGER SI BESOIN
CPV_DB_NAME="MYDATABASE" #Nom de la base de données cible
CPV_DB_PORT=5544 #Numéro de port associé au cluster
REST_D="/mnt/MyPC/DUMP" #Dossier ou se trouve le .dump
#Restauration

sudo -u postgres pg_dump -p $CPV_DB_PORT -d $CPV_DB_NAME -a -F c -t clients  --disable-triggers --verbose -f /mnt/MyPC/DUMP/client-a-c.dump 

Voilà mes amis, je cherche à automatiser tout cela .
Je vous remercie de bien vouloir m'aider s'il vous plait

#20 Site PostgreSQL.fr » Index pour optimiser des requêtes de suppression à partir de dates » 24/05/2018 23:11:26

Mangone
Réponses : 1

Bonjour mes amis,

Je cherche à optimiser des requêtes de suppression de données basées sur une date (exemple 3 mois). ces requêtes sont effectuées sur une table qui contient une colonne date. Comme vous vous imaginez, je suis vraiment un novice en la matière. Quelqu'un pourrait  m'aiguiller ou m'aider à trouver un tester un exemple d'index qui optimisera mes requêtes qui durent des heures pour une suppression de lignes ?
Je vous remercie par avance .

#21 Re : Général » Question sur Foreign Key » 16/05/2018 23:41:44

Merci Gleu,

Je vais tester, je te fais un retour demain .

#22 Général » Question sur Foreign Key » 16/05/2018 21:50:29

Mangone
Réponses : 2

Bonsoir à tous,

Je souhaite faire une restauration à partir d'une base dumper et je voulais savoir s'il est possible de faire une restauration selective  en ligne de commande (Sans les Foreign Key) ?
Si oui quelle serait cette commande ?

Merci d'avance
Bon match

#23 Re : Général » Débutant demande aide » 23/04/2018 20:13:39

Merci Julien  pour le retour.
Je suis une vraie bille, c'est pourquoi je demande conseils aux expert.
Je ne connais pas postgresql voilà pourquoi je fais du bricolage et sollicite votre aide.


CREATE FUNCTION suivi_mise_a_jour() RETURNS TRIGGER AS $BODY$
        BEGIN
-- Insertion date de dernière mise à jour
IF NEW.date:= current_timestamp ;
RETURNS NEW ;
END IF;
$BODY$ LANGUAGE plpgsql

CREATE TRIGGER suivi_mise_a-jour BEFORE INSERT OR UPDATE ON ma_table
    FOR EACH ROW EXECUTE PROCEDURE suivi_mise_a_jour);

#24 Re : Général » Débutant demande aide » 23/04/2018 19:52:45

Re à tous et toutes,

Merci pour les conseils.
Pouvez-vous me dire si cette fonction marchera avec mon trigger s'il vous plait ?
Si cela ne marche pas , que dois-je corriger ?
Merci d'avance pour votre aide .

Code

CREATE FUNCTION suivi_mise_a_jour() RETURNS TRIGGER AS $BODY$
        BEGIN
-- Insertion date de dernière mise à jour

IF NEW.date IS NULL THEN
RAISE EXCEPTION NEW.date ne peut pas être NULL ;
END IF ;
NEW.date:= current_timestamp ;
RETURNS NEW ;
END ;
$BODY$ LANGUAGE plpgsql

CREATE TRIGGER suivi_mise_a-jour BEFORE INSERT OR UPDATE ON ma_table
    FOR EACH ROW EXECUTE PROCEDURE suivi_mise_a_jour);

#25 Re : Général » Débutant demande aide » 19/04/2018 07:34:22

Bonjour,

J'ai suivi les liens, voilà ce que je vous présente et qui ne fonctionne pas pour le moment. Je ne sais si je m'y prends mal ou pas certainement oui . Merci de m'assister s'il vous plait

CREATE TRIGGER nom_du_trigger BEFORE UPDATE ON ma_table
FOR EACH ROW SET NEW.ma_5e_colonne = [date];

La question que je me pose excusé mon manque de culture !!!
1) Me faut il une fonction trigger avant de créer un trigger ?
je pose cette question parce que quand je vais sur trigger, je n'ai pas ou coller ce bout de code.

Dois-créer une nouvelle fonction trigger si oui comment la créer ?
Comment faire marcher ce bout de code .

Merci de bien vouloir me donner un coup de pouce s'il vous plait .

Pied de page des forums

Propulsé par FluxBB