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).

#26 Re : Général » probleme de user avec copy to » 22/04/2011 11:43:24

Merci Super,

j'ai essayé et bien évidement çà a marché.

J'avais lu effectivement sur la doc du copy la différence des deux mais je n'avais pas pensé à çà.



Merci beaucoup à vous.

#27 Général » probleme de user avec copy to » 22/04/2011 11:35:47

gilou974
Réponses : 2

Bonjour à tous !


Il me faut exécuter un copy to d'un select mais j'ai un problème au niveau de l'utilisateur au moment de la création du fichier.

Je suis logué en gilou et j'exécute :

psql -c "copy (select nm_soc_soc from societaire where id_soc = 100) to '/home/gilou/soc.csv' with delimiter ';'" -h 192.168.1.114 socaf -p 4040 -U gilou

et en retour j'obtiens :

ERREUR:  n'a pas pu ouvrir le fichier « /home/gilou/soc.csv » en écriture : Permission non accordée.

Je suis bien dans le dossier /hmoe/gilou pourtant.

Je cherche un peu et j'essaie de donner des droits plus étendus sur le dossier (777 comme çà j'isole les problèmes de droits) et je m'apperçois qu'en fait le fichier
crée en sortie appartient à l'utilisateur postgres.?

Mon pb donc si quelqu'un aurait une piste : comment dois-je procéder pour que le résultat du copy soit associé à l'utilisateur gilou ????

J'ai regardé la doc sur COPY TO /FROM mais pas de mention de user.


Merci par avance.

#28 Re : Général » Fonctions imbriquées -- optimisation » 10/01/2011 21:40:47

Merci encore

juste pour dire, en suivant les conseils et en mettant tout dans une seule et grosse requete le tps d'exécution tombe, que dis-je : CHUTE à 14 secondes....... ;-)

#29 Re : Général » Fonctions imbriquées -- optimisation » 10/01/2011 18:56:15

OUI

en fait c ce que je voulais dire ...... mais pas comme il le fallait

merci encore

#30 Re : Général » Fonctions imbriquées -- optimisation » 10/01/2011 17:39:56

Tout d'abord merci à vous,

on est donc d'accord mieux vaut une procédure très longue que plusieures petites fonctions dès lors que l'on peut tout réaliser en sql...

Merci encore

#31 Général » Fonctions imbriquées -- optimisation » 10/01/2011 16:35:34

gilou974
Réponses : 7

Bonjour à tous et meilleurs voeux pour 2011 ......

Voilà, je dois réaliser des écritures d'à nouveaux et pour ce faire je dispose de quatres fonction comme suit

1) Celle en entrée qui donne tous les societaires consernés :

CREATE OR REPLACE FUNCTION parcours_plancomptable(annee integer, idutilisateur integer)
  RETURNS integer AS
$BODY$

DECLARE
    nbLigne integer;                -- nombre de lignes crées pour un plan comptable
    nbLigneTotal integer :=0;            -- nombre de lignes totales crées pour l'execution du script
    soctaire RECORD;                -- Ligne contenant un societaire
    idNaturePiece integer := 9;            -- id nature piece : A nouveau
BEGIN
     -- Création pîece comptable --
    INSERT INTO piece_comptable(id_pct, id_npc, bl_valide_pct)
        VALUES (nextval('piece_comptable_id_seq'), idNaturePiece, false);
       
    FOR soctaire IN (
        SELECT distinct soc.id_plc FROM societaire soc
            JOIN ligne_ecriture le ON soc.id_plc = le.id_plc
            WHERE st_etat_soc IN ('SP', 'DO', 'EX') AND nm_soc_soc <10000
            AND EXTRACT(YEAR FROM le.d_dateecriture_lec) = annee - 1 AND id_grp not between 36 and 51
            ORDER BY soc.id_plc ASC)
    LOOP
        EXECUTE 'SELECT parcours_groupe(' || soctaire.id_plc || ', currval(''piece_comptable_id_seq''), ' || annee || ', ' || idUtilisateur || ')' INTO nbLigne;
        nbLigneTotal := nbLigneTotal + nbLigne;
    END LOOP;
    RETURN nbLigneTotal;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION parcours_plancomptable(integer, integer) OWNER TO postgres;

2 ) une pour les groupes comptables

CREATE OR REPLACE FUNCTION parcours_groupe(idplancomptable integer, idpiececomptable bigint, annee integer, idutilisateur integer)
  RETURNS integer AS
$BODY$
DECLARE
    solde numeric(18,2) := 0.00;         -- variable récupéré de la fonction solde_groupe()
    grp RECORD;                -- Ligne contenant un groupe pour tout les groupes sauf (7,8,9,10,11,12)
    ligneEcriture RECORD;            -- Ligne contenant un groupe uniquement pour les groupes (7,8,9,10,11,12)
    cotis RECORD;                -- Ligne contenant un groupe uniquement pour les groupes (22,23,24,25,26,27)
    txt text :='';                -- log
    dateEcriture date;            -- Date avec annee courante
    lbl text :='';                -- libelle de la ligne ecriture
    debit numeric(18,2) := 0.00;        -- Debit pour la ligne écriture
    credit numeric(18,2) := 0.00;        -- Debit pour la ligne ecriture
    nbLigne integer :=0;            -- Compte le nombre de ligne crée
    idJournal integer := 3;            -- Identifiant du journal : A NOUVEAU
    anneeN1 integer := 0;            -- Annee + 1
    anneeSolde integer := 0;        -- Annee - 1
    trancheGar integer := 0;        -- Tranche garantie
    idJournalCotis integer := 16;        -- Identifiant du journal : COTISATION EXERCICE
    lblCotisation text := '';        -- Libelle de la ligne écriture cotisation
    soldeCotis numeric(18,2) := 0.00;    -- Solde d'un des groupes COTIS_
    debitCotis numeric(18,2) := 0.00;    -- Debit d'un des groupes COTIS_
    creditCotis numeric(18,2) := 0.00;    -- Credit d'un des groupes COTIS_
    dateEcritureCotis date;            -- Date pour les lignes écriture des groupes COTIS_
    groupeCotis integer := 66;        -- Groupe COMPTABILITE GENERALE
    totalCotis numeric(18,2) := 0.00;    -- Total de tout les soldes groupe des cotisations
BEGIN   
    -- Déclaration des variables --
    anneeN1 = annee + 1;                            -- Annee + 1
    anneeSolde = annee - 1;                            -- Annee -1
    dateEcriture := to_date(annee || '-01-01', 'YYYY-MM-DD');         -- Date au 01/01/anneeCourante
    lbl := 'A NOUVEAU AU 1/1/' || annee;                    -- Creation libelle
    lblCotisation := 'COTISATION EXERCICE ' || anneeSolde;            -- Création libelle cotisation
    dateEcritureCotis := to_date(anneeSolde || '-12-31', 'YYYY-MM-DD');    -- Date au 31/12/anneeCourante -1

    -- Génération des lignes écritures --
    --execute la fonction solde_groupe pour tous les groupes hormis ceux de fdg, de HB et de cotis ainsi que les fonds restituables
    FOR grp IN (SELECT g.id_grp
        FROM groupe g
        WHERE g.id_grp NOT IN (7,8,9,10,11,12,13,22,23,24,25,26,27)     -- 7 => FDG_S - 8 => FDG_T - 9 => FDG_G - 10 => FDG_P - 11 => FDG_M - 12 => FDG_NP -
        AND g.id_grp NOT BETWEEN 36 AND 51 )                                -- 13 => FondsRest - 22 => COTIS_S - 23 => COTIS_T - 24 => COTIS_G - 25 => COTIS_P -
                                        -- 26 => COTIS_M - 27 => COTIS_EX_NC
    LOOP
        EXECUTE 'SELECT solde_groupe(' || grp.id_grp || ', ' || anneeSolde || ', ' || idPlanComptable || ')' INTO solde;
       
        IF (solde<>0 OR solde <> NULL) THEN                    -- Si solde != 0 alors injecte une ligne
           
            IF (solde > 0) THEN
                debit := solde;
                credit := 0.00;
            ELSE
                debit := 0.00;
                credit := ABS(solde);
            END IF;
           
            INSERT INTO ligne_ecriture(
                id_lec, id_pct, id_grp, id_plc, id_jnx, id_bqe, d_dateecriture_lec,
                st_lbl_lec, nm_debit_lec, nm_credit_lec, d_datesaisie_lec, nm_tranchegar_lec,
                st_anneegar_lec, nm_numremise_lec, nm_numcheque_lec, id_usr,
                bl_transfere_lec)
            VALUES (nextval('ligne_ecriture_id_seq'), idPieceComptable, grp.id_grp, idPlanComptable, idJournal, null, dateEcriture,
                lbl, debit, credit, NOW(), 0,
                annee, null, null, idUtilisateur,
                false);
               
            nbLigne    := nbLigne + 1;
            --RAISE NOTICE 'Log pour le groupe %  avec le plan comptable % (solde %) ', grp.id_grp, idPlanComptable, solde;
        END IF;
    END LOOP;
   
    -- Pour chaque ligne ecriture dont l'année correspond à l'année courante et au groupe de Fonds de Garantie
   
    FOR ligneEcriture IN (SELECT le.id_grp, le.nm_debit_lec, le.nm_credit_lec, le.nm_tranchegar_lec, st_anneegar_lec FROM ligne_ecriture le
        WHERE (EXTRACT(YEAR FROM le.d_dateecriture_lec)) = '2010'
        AND le.id_plc = idPlanComptable
        AND le.id_grp IN (7,8,9,10,11,12)) -- 7 => FDG_S - 8 => FDG_T - 9 => FDG_G - 10 => FDG_P - 11 => FDG_M - 12 => FDG_NP
    LOOP
    EXECUTE 'SELECT solde_groupe(' || grp.id_grp || ', ' || anneeSolde || ', ' || idPlanComptable || ')' INTO solde;
        IF (solde<>0 OR solde <> NULL) THEN
            IF (ligneEcriture.nm_tranchegar_lec <> null) THEN
                trancheGar := ligneEcriture.nm_tranchegar_lec;
            ELSE
                trancheGar := 0;
            END IF;
           
            INSERT INTO ligne_ecriture(
                id_lec, id_pct, id_grp, id_plc, id_jnx, id_bqe, d_dateecriture_lec,
                st_lbl_lec, nm_debit_lec, nm_credit_lec, d_datesaisie_lec, nm_tranchegar_lec,
                st_anneegar_lec, nm_numremise_lec, nm_numcheque_lec, id_usr,
                bl_transfere_lec)
            VALUES (nextval('ligne_ecriture_id_seq'), idPieceComptable, ligneEcriture.id_grp, idPlanComptable, idJournal, null, dateEcriture,
                lbl, ligneEcriture.nm_debit_lec, ligneEcriture.nm_credit_lec, NOW(), trancheGar,
                ligneEcriture.st_anneegar_lec, null, null, idUtilisateur,
                false);
               
            nbLigne    := nbLigne + 1;
            --RAISE NOTICE 'Log pour le groupe %  avec le plan comptable % (solde %): %', grp.id_grp, idPlanComptable, solde, txt;
        END IF;
    END LOOP;

    -- On calcul le solde total pour les groupes cotisation. Si le solde est négatif erreur
    EXECUTE 'SELECT solde_groupeCotis(' || idPlanComptable || ', '|| annee ||')' INTO totalCotis;
    IF (totalCotis > 0) THEN
        RAISE EXCEPTION 'ERREUR la somme des soldes groupes des cotisations est négatif';
        RETURN nbLigne;
    END IF;
   
    -- Pour les groupes de cotisation : COTIS_S, COTIS_T, COTIS_G, COTIS_P, COTIS_M, COTIS_EX_NC
    FOR cotis IN (SELECT le.id_grp, le.nm_debit_lec, le.nm_credit_lec, le.nm_tranchegar_lec, st_anneegar_lec FROM ligne_ecriture le
        WHERE (EXTRACT(YEAR FROM le.d_dateecriture_lec)) = annee
        AND le.id_plc = idPlanComptable
        AND le.id_grp IN (22,23,24,25,26,27))         -- 22 => COTIS_S - 23 => COTIS_T - 24 => COTIS_G - 25 => COTIS_P - 26 => COTIS_M - 27 => COTIS_EX_NC
    LOOP
        EXECUTE 'SELECT solde_groupe(' || cotis.id_grp || ', ' || anneeSolde || ', ' || idPlanComptable || ')' INTO soldeCotis;

        IF (soldeCotis < 0) THEN
            debitCotis := soldeCotis;
            creditCotis := 0.00;
        ELSE
            debitCotis := 0.00;
            creditCotis := ABS(soldeCotis);
        END IF;
       
        INSERT INTO ligne_ecriture(
            id_lec, id_pct, id_grp, id_plc, id_jnx, id_bqe, d_dateecriture_lec,
            st_lbl_lec, nm_debit_lec, nm_credit_lec, d_datesaisie_lec, nm_tranchegar_lec,
            st_anneegar_lec, nm_numremise_lec, nm_numcheque_lec, id_usr,
            bl_transfere_lec)
        VALUES (nextval('ligne_ecriture_id_seq'), idPieceComptable, cotis.id_grp, idPlanComptable, idJournalCotis, null, dateEcritureCotis,
            lblCotisation, debitCotis, creditCotis, NOW(), 0,
            anneeSolde, null, null, idUtilisateur,
            false);
           
        nbLigne    := nbLigne + 1;
       
        -- Contre partie   
        INSERT INTO ligne_ecriture(
            id_lec, id_pct, id_grp, id_plc, id_jnx, id_bqe, d_dateecriture_lec,
            st_lbl_lec, nm_debit_lec, nm_credit_lec, d_datesaisie_lec, nm_tranchegar_lec,
            st_anneegar_lec, nm_numremise_lec, nm_numcheque_lec, id_usr,
            bl_transfere_lec)
        VALUES (nextval('ligne_ecriture_id_seq'), idPieceComptable, groupeCotis, idPlanComptable, idJournalCotis, null, dateEcritureCotis,
            lblCotisation, 0.00, totalCotis, NOW(), 0,
            anneeSolde, null, null, idUtilisateur,
            false);
           
        nbLigne    := nbLigne + 1;
    END LOOP;
    RETURN nbLigne;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION parcours_groupe(integer, bigint, integer, integer) OWNER TO postgres;

3 ) une autre pour le solde des groupes permettant de ne générer des ecritures que pour les groupes avec un solde non null et différent de 0

CREATE OR REPLACE FUNCTION solde_groupe(idgroupe integer, annee integer, idplancomptable integer)
  RETURNS numeric AS
$BODY$

DECLARE
    solde numeric(18,2) := 0.00;
    ecriture RECORD;
BEGIN
    SELECT sum(le.nm_debit_lec) as sDebit, sum(le.nm_credit_lec) as sCredit
        INTO ecriture FROM ligne_ecriture le
        WHERE le.id_grp = idGroupe
        AND le.id_plc = idPlanComptable
        AND EXTRACT(YEAR FROM le.d_dateecriture_lec) = annee;
    solde = ecriture.sDebit -ecriture.sCredit;                -- Calcule SOMME(credit) - SOMME(debit)
    --RAISE NOTICE 'solde = % ', solde;
    IF (solde IS NOT NULL) THEN
        RETURN solde;
    ELSE
        RETURN 0.00;
    END IF;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION solde_groupe(integer, integer, integer) OWNER TO postgres;

4) une dernière spécifique à une catégorie de groupe comptable

CREATE OR REPLACE FUNCTION solde_groupecotis(idplancomptable integer, annee integer)
  RETURNS numeric AS
$BODY$

DECLARE
    soldeGroupe numeric(18,2) := 0.00;             -- Solde du groupe
    soldeTotal numeric(18,2) := 0.00;            -- Solde total de tout les groupes
    anneeSolde integer := 0;                -- Annee - 1
    cotis RECORD;
BEGIN
    anneeSolde := annee - 1;
    FOR cotis IN (SELECT le.id_grp, le.nm_debit_lec, le.nm_credit_lec, le.nm_tranchegar_lec, st_anneegar_lec FROM ligne_ecriture le
        WHERE (EXTRACT(YEAR FROM le.d_dateecriture_lec)) = anneeSolde
        AND le.id_plc = idPlanComptable
        AND le.id_grp IN (22,23,24,25,26,27))         -- 22 => COTIS_S - 23 => COTIS_T - 24 => COTIS_G - 25 => COTIS_P - 26 => COTIS_M - 27 => COTIS_EX_NC
    LOOP
        EXECUTE 'SELECT solde_groupe(' || cotis.id_grp || ', ' || anneeSolde || ', ' || idPlanComptable || ')' INTO soldeGroupe;
        soldeTotal := soldeTotal + soldeGroupe;
    END LOOP;
    RETURN soldeTotal;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION solde_groupecotis(integer, integer) OWNER TO postgres;


VOilà. Mon problème, vous aurez compris vu le sujet serait de pouvoir optimiser le traitement.

Pour 7770 societaire concernés et 339494 lignes dans ma table d'écriture, mon traitement n'est toujours pas terminé après plus de trois heures.

Pourriez - vous me donner des astuces notement sur le fait d'apeler les fonctions à l'intérieur d'autres fonctions et ce que çà coute en tps et me dire si le mieux ne serait pas de faire tout le traitement dans une seule fonction.


Merci bcp à tous et encore plus à ceux qui pourraient m'aider.

#32 Re : Général » Comment récupérer les 'trous' dans une séquence » 14/09/2010 16:13:42

Je vais tenter çà et vous donne mon retour.

Nbre de lignes :

select count(id_lec ) from ligne_ecriture = 333270

Merci

#33 Re : Général » Comment récupérer les 'trous' dans une séquence » 14/09/2010 15:52:58

Merci de nouveau pour votre réponse.


Alors j'avoue déjà dans un premier temps ne pas connaître le terme déferrable ;-) mais je vais voir à quoi il correspond.

A part celà, oui je pourrais faire un DROP de la contrainte une fois que les utilisateurs s'en vont l'informatique profite pour ce genre de choses ...

Je vais jeter un oeil sur le lien que vous m'avez mis, merci. (je ne suis toujours pas en 8.4 mais j'espère y passer avant la fin de l'année - A moins que ce soit un saut à la 9 ???? )


MERCI encore à vous.

#34 Re : Général » Comment récupérer les 'trous' dans une séquence » 14/09/2010 15:27:14

Merci pour votre réponse,

oui effectivement j'avais bien assimilé le fait qu'avec les séquences je ne pouvais éviter ce problème de trous.

Par contre, ce n'est pas vraiment génant pour moi, je m'explique : c'est une fonction que j'ai mise en place qui s'exécute sur un cron qui me crée ces trous mais je vais la modifier en fait.

"Il est possible de renuméroter à posteriori, en SQL, si c'est ce que vous souhaitez faire."

Oui c'est mon souci pour l'instant; savoir comment je pourrais renuméroter les lignes dans les deux tables après quoi je réinitialiserai ma séquence avec un setval(max(id_pct) ).

#35 Général » Comment récupérer les 'trous' dans une séquence » 14/09/2010 14:40:28

gilou974
Réponses : 6

Bonjour à tous,

je voudrais savoir s'il existe un moyen de récupérer les id non utilisés correspondant à une séquence :

j'ai une table pièce_comptable avec comme clé primaire id_pct qui correspond à la séquence piece_comptable_id_seq.

Dans ma table ligne_ecriture je retrouve mon id_pct comme clé étrangère, la contrainte étant définie ainsi :

      CONSTRAINT fk_ligne_ec_rlsh_129_piece_co FOREIGN KEY (id_pct)
      REFERENCES piece_comptable (id_pct) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE CASCADE,.

A aujourd'hui je me retrouve avec des bonds de 4500 lignes dans la table piece_comptable.

Existe-t-il un moyen en sql de refaire une numérotation sans "trous"... dans les deux tables ?

Si quelqu'un a une idée, je le remercie par avance.

#36 Re : Général » Probleme pour relancer mon serveur Postgres » 03/05/2010 17:43:16

Ah d'accord merci beaucoup et si c'est çà vous me rassurez beaucoup.

Je vais essayer de trouver du côté des mises à jour système dans ce cas car je n'ai pas changé les paramètres de postgres récement mais par contre j'ai souvent redémarré à cause de mon programme de transfert (bascule de sqlServer à Postgres en cours actuellement ... )

Merci encore

#37 Re : Général » Probleme pour relancer mon serveur Postgres » 03/05/2010 17:00:21

Merci pour votre réponse.

Vous ne voyez que çà comme possibilité alors je dois peut etre me tourner vers un probleme materiel (je ne sais pas ), parce que a moins que ce soit fait par l'exterieur je suis le seul a acceder au serveur.

Celà ne peut pas venir de l'appli ( en java avec richfaces et un serveur tomcat)?

Merci en tous cas

#38 Re : Général » Probleme pour relancer mon serveur Postgres » 03/05/2010 16:26:15

Merci à vous Guillaume.

Par contre auriez-vous une idée de piste pour savoir ce qui a pu se passer en sachant que ce serveur tourne comme çà depuis plusieurs mois déjà ?

Merci par avance.

#39 Général » Probleme pour relancer mon serveur Postgres » 03/05/2010 15:32:40

gilou974
Réponses : 8

Bonjour à tous.

Voilà j'ai eu un souci avec mon serveur dans la semaine ( où j'étais en vacances ) et à priopri celà est du a ma configuration postgres.

Quand je veux redémarrer j'ai ce message d'erreur


Starting PostgreSQL 8.3 database server: mainThe PostgreSQL server failed to start. Please check the log output: 2010-05-03 15:16:29 CEST FATAL: n'a pas pu créer le segment de mémoire partagée : Argument invalide 2010-05-03 15:16:29 CEST DÃTAIL: L'appel système qui a échoué était shmget(clé=4040001, taille=570335232, 03600). 2010-05-03 15:16:29 CEST ASTUCE : Cette erreur signifie habituellement que la demande de PostgreSQL pour un segment de mémoire partagée a dépassé le paramètre SHMMAX de votre noyau. Vous pouvez soit réduire la taille de la requête soit reconfigurer le noyau avec un SHMMAX plus important. Pour réduire la taille de la requête (actuellement 570335232 octets), réduisez le paramètre de shared_buffers de PostgreSQL (actuellement 65536) et/ou le paramètre max_connections (actuellement 103). Si la taille de la requête est déjà petite, il est possible qu'elle soit moindre que le paramètre SHMMIN de votre noyau, auquel cas, augmentez la taille de la requête ou reconfigurez SHMMIN. La documentation de PostgreSQL contient plus d'informations sur la configuration de la mémoire partagée. failed!
failed!

je suis désolé de mettre çà comme çà mais c'est probablement le mieux que je puisse faire pour m'expliquer..

Est-ce que quelqu'un aurait une idée s'il vous plait sur comment résoudre le souci( encore que avec la doc officielle je pense que je pourrais y arriver), mais surtout me donner des pistes pour voir ce qui a pu se passer .


Je vous remercie par avance.

gilou974

#40 Re : Général » Probleme semblerait-il d'encodage ?? » 25/03/2010 12:35:25

Bonjour et un grand MERCI monsieur Cousin

je n'avais pas parcouru la doc assez en avant pour ces caractères d'échappement fort utiles.

Merci bcp

#41 Re : Général » Probleme semblerait-il d'encodage ?? » 25/03/2010 11:38:04

Si j'essaie comme çà :

select regexp_replace(regexp_replace(convert_from('10 336.00','LATIN1'),'.00','' ),' ','') Avec valeur retournée --> résultat "10Â 336"
select regexp_replace(regexp_replace(convert_from('10 336.00','LATIN1'),'.00','' ),' ','') --> résultat "10336"

on voit bien là une différence ??

#42 Re : Général » Probleme semblerait-il d'encodage ?? » 25/03/2010 11:32:31

Si j'essaie comme çà :

select regexp_replace(regexp_replace(convert_from('10 336.00','UTF8'),'.00','' ),' ','') Avec valeur retournée --> résultat 8 167
select regexp_replace(regexp_replace(convert_from('10 336.00','UTF8'),'.00','' ),' ','') --> résultat 8167

rien ne change en fait ??

Pas l'encodage ? mais quoi alors ?

#43 Général » Probleme semblerait-il d'encodage ?? » 25/03/2010 11:14:41

gilou974
Réponses : 4

Bonjour à tous.

J'ai un pb qui semble venir de l'encodage mais je ne sais pas trop comment vérifier s'il s'agit bien de celà et si "oui" comment le corriger.

Voilà je veux exécuter :

SELECT
    --nextval(provisionnement_id_seq)AS id_pro,
    id_soc,
    tca AS id_tca,
    id_tga,
    regexp_replace(nm_soc,'  ',''),
    regexp_replace(regexp_replace( trim(nm_soc), '\\.00',''),' ',''),
    substring(regexp_replace(regexp_replace( nm_soc, '.00',''),' ','')  FROM '[0-9]+' )AS nm_soc_soc,
    nm_soc,
    d_conseil, type_prov, tga, montant_prov, id_pim
FROM provisionimport pim
LEFT JOIN societaire soc ON soc.nm_soc_soc = substring( nm_soc FROM '[0-9]+' )::integer
JOIN type_garantie tga ON pim.tga = tga.st_type_tga

Mais pour certaine donnée je n'arrive pas à me débarasser de l'espace dans mon nombre.

Si je copie colle la valeur retournée par la requête et que je teste:

select regexp_replace(regexp_replace('8 167.00','.00','' ),' ','')  Avec valeur retournée --> résultat 8 167

Alors que si je tape manuellement:
select regexp_replace(regexp_replace('8 167.00','.00','' ),' ','') --> résultat 8167

Quelqu'un aurait -il un idée svp.

#44 Re : Général » [RÉSOLU] Probleme de verrou sur la base » 20/01/2010 16:35:14

Merci bcp pour l'info sur la 8.3 Marc Cousin je vais de ce pas tester parce que je suis justement encore dans le même cas que samedi.

Merci

#45 Re : Général » [RÉSOLU] Probleme de verrou sur la base » 19/01/2010 18:55:10

Merci pour la réponse et désolé de la mienne pour sa nature tardive.

Oui je me doutais bien que ce n'était pas une bonne idée de faire un Kill mais je devais faire au plus vite pour avancer.

Sinon pour la 8.4 je n'ai pas encore fait la bascule pour l'instant donc je garde la commande que vous m'avez donnée de côté pour la prochaine fois.

Merci en tout cas et encore désolé de ne répondre que maintenant.

#46 Re : Général » [RÉSOLU] Probleme de verrou sur la base » 16/01/2010 16:06:27

Bon j'ai trouvé une solution à la radical g fait un kill sur tous les PID  associés à idle in transaction.

Merci quand même de me répondre si quelqu'un à une solution plus élégante.

#47 Général » [RÉSOLU] Probleme de verrou sur la base » 16/01/2010 15:42:54

gilou974
Réponses : 5

Bonjour à tous.

VOilà je suis en train d'effectuer un programme de transfert de données en C++ et il me faudrait faire un DROP sur ma base. Problème il semblerait que lors de mes test j'ai mis des verrous sur la base (probablement des transactions implicitement crées mais pas libérées sur plantage de mon exe ).

Toujurs est-il que si je fais un ps -fu j'obtiens :

postgres@testserver:/etc/init.d$ ps -fu postgres
UID        PID  PPID  C STIME TTY          TIME CMD
postgres  4145 12899  0 Jan12 ?        00:00:00 postgres: postgres socaf 192.168.1.114(58826) idle in transaction
postgres  4149 12899  0 Jan12 ?        00:00:00 postgres: postgres socaf 192.168.1.114(58839) idle in transaction
postgres  4172 12899  0 Jan12 ?        00:00:00 postgres: postgres socaf 192.168.1.114(58874) idle in transaction
postgres  4178 12899  0 Jan12 ?        00:00:00 postgres: postgres socaf 192.168.1.114(44733) idle in transaction
postgres  4201 12899  0 Jan12 ?        00:00:00 postgres: postgres socaf 192.168.1.114(44776) idle in transaction
postgres  4207 12899  0 Jan12 ?        00:00:00 postgres: postgres socaf 192.168.1.114(44783) idle in transaction
postgres  4502 12899  0 Jan12 ?        00:00:00 postgres: postgres socaf 192.168.1.114(44812) idle in transaction
postgres  4844 12899  0 Jan12 ?        00:00:00 postgres: postgres socaf 192.168.1.114(44824) idle in transaction
postgres  4846 12899  0 Jan12 ?        00:00:00 postgres: postgres socaf 192.168.1.114(44828) idle in transaction
postgres  5584 12899  0 Jan12 ?        00:00:00 postgres: postgres socaf 192.168.1.114(53866) idle in transaction
postgres 12899     1  0  2009 ?        00:09:37 /usr/lib/postgresql/8.3/bin/postgres -D /var/lib/postgresql/8.3/mai
postgres 12901 12899  0  2009 ?        00:00:58 postgres: writer process
postgres 12902 12899  0  2009 ?        00:00:35 postgres: wal writer process
postgres 12903 12899  0  2009 ?        00:05:30 postgres: autovacuum launcher process
postgres 12904 12899  0  2009 ?        00:04:59 postgres: stats collector process
postgres 19494 12899  0 14:16 ?        00:00:00 postgres: pgsql postgres 192.168.1.90(3438) idle
postgres 20289 18682  0 14:22 pts/0    00:00:00 su postgres
postgres 20290 20289  0 14:22 pts/0    00:00:00 bash
postgres 21024 12899  0 14:25 ?        00:00:00 postgres: pgsql socaf 192.168.1.90(3450) idle
postgres 22646 12899  0 14:39 ?        00:00:00 postgres: pgsql socaf 192.168.1.90(3584) idle
postgres 24151 20290  0 14:48 pts/0    00:00:00 ps -fu postgres
postgres 25576 12899  0 Jan12 ?        00:00:03 postgres: postgres socaf 192.168.1.114(36412) idle in transaction
postgres 28355 12899  0 Jan12 ?        00:00:00 postgres: postgres socaf 192.168.1.114(39589) idle in transaction

Quelqu'un pourrait-il me guider pour libérer toutes les connections à la base.

Merci d'avance

#48 Re : Général » Probleme sur execution d'une requête » 07/01/2010 11:41:17

Désolé pas revenu sur mon post depuis Merci encore à tous pour vos réponses et meilleurs voeux pour cette nouvelle année

#49 Re : Général » Probleme sur execution d'une requête » 22/12/2009 17:05:42

En résumé même si le nombre de table et d'alias (du à l'utilisation de mêmes tables plusieures fois) et donc de jointure il vaut mieux ne pas imbriquer de vues du tout ou seulement éviter les vues avec des filtres qui se croiseraient ????

Merci

#50 Re : Général » Probleme sur execution d'une requête » 22/12/2009 17:01:51

Merci à vous mais alors après c'est encore plus long à lire après ???
Je suis sûr que tous les gens du forum sont de bonne volonté mais je me dis que c'est de l'abus de ma part quand je vois le résultat à moins bien entendu ( et c'est ce que je pense que vous, avec l'habitude vous le voyez tout de suite ).

En tout cas on m'alertera à ce moment j'espère.

Alors je vais essayer de comprendre comment me servir du EXPLAIN ANALYSE.

Merci

Pied de page des forums

Propulsé par FluxBB