From: | Gunnar Wolf <gwolf(at)campus(dot)iztacala(dot)unam(dot)mx> |
---|---|
To: | Jose Antonio Leo <jaleo8(at)storelandia(dot)com> |
Cc: | Pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx |
Subject: | Re: [Pgsql-ayuda] Contrains |
Date: | 2002-06-25 18:14:24 |
Message-ID: | Pine.BSO.4.44.0206251309190.28868-100000@campus.iztacala.unam.mx |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
> Hola a todos tengo 2 preguntitas a ver soi me podeis ayudar.
> 1.- Para que sirve la clausula CONSTRAINT en la creacion de una tabla.?
Para que cada que hagas un insert/update/delete se verifique cierta
condición - Por ejemplo, tengo esta tabla:
CREATE TABLE "votos" (
"id_casilla" int2 NOT NULL,
"id_formula" int2 NOT NULL,
"num_votos" int2 NOT NULL,
PRIMARY KEY (id_casilla, id_formula),
CONSTRAINT cont1 CHECK (casilla_elec(id_casilla) = formula_elec(id_formula))
);
casilla_elec y formula_elec son dos funciones definidas por mí:
CREATE FUNCTION "formula_elec" (int2) RETURNS int2 AS
'SELECT id_elec FROM formula WHERE id_formula = $1'
LANGUAGE 'SQL';
CREATE FUNCTION "casilla_elec" (int2) RETURNS int2 AS
'SELECT id_elec FROM casilla WHERE id_casilla = $1 '
LANGUAGE 'SQL';
(Sí, sé que hay mucho mejores maneras de hacer esto, pero... Este
sistemita lo hice hace dos años, con muy someros conocimientos de
Postgres)
El constraint obliga a que cada que cambies algo en la tabla revise que
para ese renglón se siga cumpliendo la condición - en este caso, que el
id_elec de casilla corresponda con el id_elec de formula para la casilla y
la fórmula en cuestión. Si intento insertar datos que no correspondan,
Postgres no me lo permitirá:
# insert into votos (id_casilla,id_formula,num_votos) values (2,11,5);
ERROR: ExecAppend: rejected due to CHECK constraint cont1
Y claro, siendo PL/PGSQL un lenguaje bastante completo de programación,
puedes hacer cosas bastante interesantes.
> 2.- Como puedo crear un campo decimal que se incremente automaticamente.?
No lo sé... Pero asómate a cómo lo hace 'serial' (que lo hace sobre un
campo entero). No debe ser difícil construir sobre de esta definición
(que, a fin de cuentas, es una función también)
--
Gunnar Wolf - gwolf(at)campus(dot)iztacala(dot)unam(dot)mx - (+52-55)5623-1118
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973 F800 D80E F35A 8BB5 27AF
From | Date | Subject | |
---|---|---|---|
Next Message | Gunnar Wolf | 2002-06-25 18:19:00 | Re: [Pgsql-ayuda] Contrains |
Previous Message | Manuel Sugawara | 2002-06-25 17:33:05 | Re: [Pgsql-ayuda] Contrains |