164 votes

Colonnes calculées / calculées / virtuelles / dérivées dans PostgreSQL

PostgreSQL prend-il en charge les colonnes calculées/calculées, comme MS SQL Server ? Je ne trouve rien dans la documentation, mais comme cette fonctionnalité est incluse dans de nombreux autres SGBD, j'ai pensé qu'il me manquait quelque chose.

Par exemple : http://msdn.microsoft.com/en-us/library/ms191250.aspx

22voto

Elmer Points 2377

Une façon de le faire est d'utiliser un déclencheur !

 CREATE TABLE computed(
    one SERIAL,
    two INT NOT NULL
);

CREATE OR REPLACE FUNCTION computed_two_trg()
RETURNS trigger
LANGUAGE plpgsql
SECURITY DEFINER
AS $BODY$
BEGIN
    NEW.two = NEW.one * 2;

    RETURN NEW;
END
$BODY$;

CREATE TRIGGER computed_500
BEFORE INSERT OR UPDATE
ON computed
FOR EACH ROW
EXECUTE PROCEDURE computed_two_trg();

Le déclencheur est déclenché avant que la ligne ne soit mise à jour ou insérée. Il modifie le champ que nous voulons calculer de l' NEW , puis il renvoie cet enregistrement.

2voto

ďobo Points 91

Eh bien, je ne sais pas si c'est ce que vous voulez dire, mais Posgres prend normalement en charge la syntaxe ETL "factice". J'ai créé une colonne vide dans le tableau et j'ai ensuite dû la remplir par des enregistrements calculés en fonction des valeurs de la ligne.

 UPDATE table01
SET column03 = column01*column02; /*e.g. for multiplication of 2 values*/
  1. C'est tellement factice que je soupçonne que ce n'est pas ce que vous recherchez.
  2. Évidemment, ce n'est pas dynamique, vous l'exécutez une fois. Mais aucun obstacle pour le mettre en gâchette.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X