Vous n'êtes pas identifié(e).

#1 13/10/2017 09:45:51

mortimer.pw
Membre

Exploiter RECORD pg_control_checkpoint()

Bonjour,

Je travaille avec un moteur 9.6.5 sous Cent-OS 7.

La Fonction pg_control_checkpoint() retourne un RECORD avec différentes informations (colonnes).

Comment les exploiter ?

CREATE OR REPLACE FUNCTION dba.checkpoint()
  RETURNS void AS
$BODY$
DECLARE
    rCheck RECORD;
BEGIN
    SELECT pg_control_checkpoint() INTO rCheck;
    RAISE NOTICE 'Checkpoint location : %', rCheck.checkpoint_location;
END;
$BODY$
LANGUAGE plpgsql VOLATILE COST 100;

D'avance merci pour votre aide.

Hors ligne

#2 13/10/2017 12:21:28

Marc Cousin
Membre

Re : Exploiter RECORD pg_control_checkpoint()

Bonjour,

Le problème, c'est que rcheck n'est pas un type composite. C'est un record contenant un seul champ qui contient le type composite. Le plus simple, c'est de récupérer un vrai record:

CREATE OR REPLACE FUNCTION dba.checkpoint()
  RETURNS void AS
$BODY$
DECLARE
    rCheck RECORD;
BEGIN
    SELECT * from pg_control_checkpoint() INTO rCheck;
    RAISE NOTICE 'Checkpoint location : %', rCheck.checkpoint_location;
END;
$BODY$
LANGUAGE plpgsql VOLATILE COST 100;

Il doit aussi y avoir une syntaxe tordue pour que plpgsql comprenne qu'on veut le champ d'un record de composite… mais j'ai pas réussi à remettre la main dessus (quelque chose à coup de parenthèses).

On peut sinon juste l'écrire en deux temps:

CREATE OR REPLACE FUNCTION dba.checkpoint()
  RETURNS void AS
$BODY$
DECLARE
    rCheck RECORD;
    ckpt RECORD;
BEGIN
    SELECT pg_control_checkpoint() INTO rCheck;
    ckpt:=rCheck.pg_control_checkpoint;
    RAISE NOTICE 'Checkpoint location : %', ckpt.checkpoint_location;
END;
$BODY$
LANGUAGE plpgsql VOLATILE COST 100;

Marc.

Hors ligne

#3 16/10/2017 08:00:45

mortimer.pw
Membre

Re : Exploiter RECORD pg_control_checkpoint()

Bonjour Marc,

Merci pour la soluce, ça me convient.

Bonne journée.

Hors ligne

Pied de page des forums