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

#2 Général » Recherche de dépendences entre vues / procédures / tables » 21/02/2017 17:57:16

mystikilla
Réponses : 3

Bonjour,

Je cherche a lister les dépendances entre mes vues, procédures et tables afin de repérer les trop longue dépendances.
Je me base pour ce faire sur les tables système (pg_depend) par contre cette table ne comprend pas les procédures.

Est-ce posible d'avoir une requête qui liste les dépendances comme l'outil "Rechercher des objets" de postgresql ?
Ou est-ce quelqu'un a pensé à un script pour ce faire ?

Merci d'avance

#3 Général » Requete SQL - afficher les n dernier enregistrements d'une table » 28/04/2015 15:25:58

mystikilla
Réponses : 1

Bonjour,

Je souhaite faire une requete mais plus que de belle parole, voici un exemple car je l'ai tourné dans tout les sens... un oeil neuf serait le bienvenu

j'ai une table de ce style :

chs_1 | chs_2
--------------------
101     |  10001
101     |  10002
101     |  10003
101     |  10004
202     |  20001
202     |  20002
202     |  20003
202     |  20004
202     |  20005
202     |  20006

et je souhaite avoir les n  derniers enregstrements (par exempel 3) pour  chaque valeur de la colonne chs_1 :

101     |  10004
101     |  10003
101     |  10002
202     |  20006
202     |  20005
202     |  20004


Si vous avez une idée, merci bcp

#5 Général » Crosstab avec un nombre de colonnes dynamqiue » 07/11/2014 12:25:39

mystikilla
Réponses : 2

Bonjour,

Je suis en train de jouer avec la fonction Crosstab, la requête (ci-dessous) fonctionne mais je me demande si il ne serait pas possible de passer quelque chose de plus simple que d'énumérer chaque champs de sortie pour colonne. Par exemple pouvoir déclarer une requête ou un tableau ( au lieu de "1" double precision, "2" double precision, "3" double precision,) ?..

voici ma requête :

select * from crosstab(
  'select prdt , element , valeur from table1 order by 1,2',
  'select idelement from table2 order by idelement'
) as (
  row_id text,
  "1" double precision,
  "2" double precision,
  "3" double precision,
  "8" double precision,
  "10" double precision,
  "11" double precision
)

Merci d'avance

#6 Re : PL/pgSQL » Procédure - nombre de paramètre OUT variable » 13/09/2013 09:31:18

Merci pour cette réponse,
effectivement si je précise la liste des colonnes dans la requête appelant la fonction, ça fonctionne.
Seulement ça déporte mon problème car je ne sais pas combien de champs je doit préciser dans ma fonction appelante... Ou alors il
faudrait que je puisse passer un tableau ou un select dans la liste des champs temporaire du genre :

select * from f1() tmp(c1 integer, array_to_string(array(select champs from table)));

#7 PL/pgSQL » Procédure - nombre de paramètre OUT variable » 12/09/2013 16:28:01

mystikilla
Réponses : 2

Bonjour,

Je souhaite écrire une procédure dont je ne connais pas à l'avance le nombre de sorties (OUT) car la requête la constituant est
construite en dynamique...

expl:

CREATE OR REPLACE FUNCTION p_test()
  RETURNS setof record AS
$BODY$
  
DECLARE
	rec RECORD;
	txtquery text;
	i integer;

	_tab_element text[];
	_tab_idelement integer[];

BEGIN
	i=0;
	for rec in (select idelement,element from elements)
	loop
		_tab_idelement[i] = rec.idelement;
		_tab_element[i] = rec.element;
		i = i +1;
	end loop;

	txtquery := 'select chp1,chp2';

	FOR i IN 0..array_length(_tab_element,1)-1 LOOP
               -- ajout de champs dans mon select selon les valeurs renseignées dans le tableau
		txtquery := txtquery || ',' || _tab_element[i] || '.taux as ' || _tab_element[i];
	END LOOP;

	txtquery :=txtquery || ' FROM table ';

  	return query execute txtquery;

END;

$BODY$
  LANGUAGE plpgsql STABLE
  COST 100;
ALTER FUNCTION p_etat_stocks_suivi_compo()

Est-ce possible ? car pour l'instant voici la sortie de mon appel de procédure :
ERREUR:  une liste de définition de colonnes est requise pour les fonctions renvoyant un « record »

Merci

#8 Re : Général » Procédure avec utilisation de WITH » 16/04/2012 10:18:08

dverite a écrit :

C'est dû potentiellement à l'erreur classique du paramètre de fonction qui a le même nom qu'une colonne utilisée dans la requête. (ici idauge)
Essaie en changeant le nom du paramètre.

J'ai fais le test, ca marche !!
Merci beaucoup, je m'attendais a tout sauf à ça !!! ...
J'ai beaucoup d'autres procédures ou c'est la cas et elles fonctionnent trés bien! Les mystères de l'informatique parfois! wink

#9 Re : Général » Procédure avec utilisation de WITH » 13/04/2012 18:39:19

Je suis totalement  d'accord pour la requete, je l'ai donnée à titre d'exemple.
Ce qui ne fonctionne pas, c'est son appel avec la procédure...

#10 Re : Général » Procédure avec utilisation de WITH » 13/04/2012 17:57:18

Par exemple ma requete (simplifiée) :

WITH     tmp_table1 AS    (
                SELECT idauge
                FROM auges a
                WHERE idtypeauge=1
                ORDER BY idauge
            ),
    tmp_table2 AS    (
                SELECT idauge
                FROM auges
                where idauge not in (select idauge from tmp_table1)
                ORDER BY idauge
            )
SELECT idauge FROM tmp_table2

Cette requête renvoi une vingtaine d'enregistrements. Je l’insère dans une procédure :

CREATE OR REPLACE FUNCTION test(OUT idauge integer)
  RETURNS SETOF record AS
$BODY$
DECLARE
    rec record;
BEGIN
    FOR rec IN (
        WITH     tmp_table1 AS    (
                    SELECT idauge
                    FROM auges a
                    WHERE idtypeauge=1
                    ORDER BY idauge
                ),
        tmp_table2 AS    (
                    SELECT idauge
                    FROM auges
                    where idauge not in (select idauge from tmp_table1)
                    ORDER BY idauge
                )
        SELECT idauge FROM tmp_table2)
    LOOP
        idauge := rec.idauge;
        RETURN NEXT;
    END LOOP;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000;
ALTER FUNCTION test OWNER TO xxx;

Mais l'appel à cette procédure ne me renvoie pas mes enregistrement contrairement à des procédure similaire mais sans le WITH...

#11 Général » Procédure avec utilisation de WITH » 13/04/2012 17:32:35

mystikilla
Réponses : 8

Bonjour,

J'ai une requête utilisant WITH qui fonctionne (elle me retourne bien les résultat attendus) par contre lorsque
je me sers de cette même requête dans une procédure, l'appel de ma procédure ne me renvoie rien...

Y a t-il un lien avec le fait que WITH génère des tables 'temporaires' ?

Merci d'avance

#13 Re : Général » Supprimer un fichier dans une procédure stockée » 28/09/2010 11:53:21

Marc Cousin a écrit :

Le langage PLPgSQL ne permet pas de le faire.

Si vous tenez vraiment à faire cela, vous devez passer soit par une procédure en C, soit un langage PL plus avancé comme PLPerl..

Merci pour cette réponse rapide, au moins c'est clair! ;-)
Je vais donc peut être voir pour une procédure en C ou me faire un script a part...

Bonne journée !

#14 Général » Supprimer un fichier dans une procédure stockée » 28/09/2010 10:40:37

mystikilla
Réponses : 5

Bonjour,

Je souhaiterais supprimer un fichier de mon linux en passant pas une procédure stockée.
Est-il possible de le faire ? soit en le supprimant directement, soit en appelant un script ??

J'ai cherché sur le net, je ne trouve pas mon bonheur...


Merci d'avance

#16 Général » Passer le nom d'une table et d'une colonne dans une procedure » 28/11/2008 12:17:33

mystikilla
Réponses : 2

Bonjour,

je souhaite créer une fonction avec comme paramètres d'entrée le nom d'une table et le nom d'une colonne.
De quel type puis-je déclarer mes paramètres pour les passer directement dans une requête ??

Pied de page des forums

Propulsé par FluxBB