PostgreSQL
La base de données la plus sophistiquée 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

RULES et fonction

Technique - général | RULES et fonction

Par shama le 30/04/2008 - 10:22

Bonjour,

Y-a-t'il moyen que lors d'une requête utilisant une fonction pour remplir une colone, la règle utilise le résultat produit et non pas un 2ème appel à la fonction ?

Voici un exemple (très simplifié) de ce que je souhaite faire (mais je m'y prends peut-être mal)
--
CREATE TABLE test (
id UUID,
name VARCHAR
);

CREATE TABLE tlogs (
id UUID,
who VARCHAR,
action CHAR(1),
date TIMESTAMP,
object UUID
);

CREATE RULE test_ins AS ON INSERT TO test
DO ALSO (
INSERT INTO tlogs VALUES (uuid_generate_v4(), current_user, 'I', current_timestamp, NEW.id);
);

INSERT INTO test VALUES(uuid_generate_v4(), 'test A');
SELECT * FROM test;
SELECT * FROM tlogs;
--

Voici le résultat sur la table test
--
id | name
--------------------------------------+--------
2944c6cf-d817-41ad-9f1c-3bb797a2c1dd | test A
(1 ligne)
--

Voici le résultat sur la table tlogs
--
id | who | action | date | object
--------------------------------------+-------+--------+----------------------------+--------------------------------------
3f99a874-d215-43ac-99cd-356012b975ae | shama | I | 2008-04-30 10:14:58.283695 | b2550d3a-320f-4ac1-a0c1-89445c1179d5
(1 ligne)
--

Bref comme on le vois le "NEW.id" fait de nouveau appel à la fonction "uuid_generate_v4()" ce que je ne souhaite absolument pas.

Des idées ? Un contournement ?

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Un déclencheur ?

SAS/ = 30 Avril, 2008 - 17:32

Bonjour,

Avez-vous envisagé la possibilité d'utiliser un déclencheur, ce qui vous permettrait d'utiliser NEW.id sans le recalculer.

Librement,
Stéphane Schildknecht
Dalibo
PostgreSQLFr


Je ne suis pas sur du terme d

shama/ = 30 Avril, 2008 - 17:40

Je ne suis pas sur du terme déclencheur si c'est = trigger alors oui mais je travaille sur des vues d'ou l'utilisation des "rules".
Sinon je veux bien en savoir un peu plus


Déclencheur = trigger

SAS/ = 2 Mai, 2008 - 17:11

Bonjour,

Oui, déclencheur = trigger.

Je n'ai pas vu l'utilisation des vues dans votre exemple.
Vous pouvez avantageusement remplacer la règle d'insertion par un trigger qui effectue une insertion dans votre deuxième table.

Librement,
Stéphane Schildknecht
Dalibo
PostgreSQLFr


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