PostgreSQL
La base de donnes la plus sophistique au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Les règles et PostgreSQL, héritage, etc...

| Les règles et PostgreSQL, héritage, etc...

Par Jean-Christophe Arnu le 09/06/2006 - 15:51

Lors d'une discussion sur #PostgreSQLFr, nous avons tenté de nous attaquer aux règles sur les SELECT. Si nous considérons les données d'entrée :

CREATE TABLE table1
   id SERIAL NOT NULL PRIMARY KEY, -- clé primaire de la relation
   type VARCHAR(100) NOT NULL, -- type de données
   data TEXT -- contenu
);

Les tables héritantes :

CREATE TABLE table2(
   titre VARCHAR(255) NOT NULL -- titre du contenu
);

Ainsi qu'une table d'association :

CREATE TABLE table_assoc(
   new_id INTEGER -- définit le nouveau id
   old_id INTEGER -- définit l'ancien id
   type varchar(100) -- définit le type de l'objet
);

A ce point on souhaite créer une règle de SELECT :

CREATE OR REPLACE RULE "_RETURN" AS
   ON SELECT TO table2
   DO INSTEAD
   SELECT
   table2.*
   FROM
   table1, table_assoc
   WHERE
   CASE (table1.id < 10000000)
      WHEN TRUE THEN
         table_asoc.type = 'article'
         AND
         table_assoc.new_id = table2.id
      ELSE
         TRUE
END;

Le problème de cette règle est qu'elle s'appelle récursivement et PostgreSQL le notifie à l'utilisateur.

Plusieurs solutions s'offrent à nous :

  • Créer une vue
  • Créer une table ayant un autre nom que table2

© PostgreSQLFr, tous droits réservés.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.