Intentando hacer un insert con un trigger.

From: Pablo Braulio <brulics(at)gmail(dot)com>
To: postgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Intentando hacer un insert con un trigger.
Date: 2008-01-17 10:18:33
Message-ID: 478F2B79.2070607@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hola a todos.

Estoy tratando de hacer un insert de multiples datos con un trigger tras
hacer un insert en otra tabla, y no acierto la sintaxis. Por lo que
agradecería vuestra ayuda.

Tengo las siguientes tablas.

\d gruposusuarios
Tabla «public.gruposusuarios»
Columna | Tipo | Modificadores
-
------------+-----------------------+-------------------------------------------------------------
id | integer | not null default
nextval('gruposusuarios_id_seq'::regclass)
nombre | character varying(20) |
comentario | text |
Índices:
«gruposusuarios_pkey» PRIMARY KEY, btree (id)

\d recursos
Tabla «public.recursos»
Columna | Tipo | Modificadores
-
------------+-----------------------+-------------------------------------------------------
id | integer | not null default
nextval('recursos_id_seq'::regclass)
nombre | character varying(20) |
comentario | text |
Índices:
«recursos_pkey» PRIMARY KEY, btree (id)

\d permisosrecursos
Tabla «public.permisosrecursos»
Columna | Tipo | Modificadores
-
---------+---------+---------------------------------------------------------------
id | integer | not null default
nextval('permisosrecursos_id_seq'::regclass)
recurso | integer |
grupo | integer |
acceso | boolean | default true
Índices:
«permisosrecursos_pkey» PRIMARY KEY, btree (id)
Restricciones de llave foránea:
«permisosrecursos_grupo_fkey» FOREIGN KEY (grupo) REFERENCES
gruposusuarios(id)
«permisosrecursos_recurso_fkey» FOREIGN KEY (recurso) REFERENCES
recursos(id)

Lo que trato de hacer es que al crear un nuevo grupo se haga un insert
en la tabla "permisosrecursos" con los datos del campo "nombre" en
"recursos" y el nuevo "id" del grupo que se acaba de crear.

Espero haberme explicado bien.

Para ello he creado el siguiente trigger:

create or replace function permisosrecursos() returns trigger as $$
begin
insert into permisosrecursos(recurso,grupo,acceso) values((select id
from recursos),new.id);
end;

$$ language plpgsql;

create trigger permisosrecursos after insert on gruposusuarios for each
row execute procedure permisosrecursos();

El problema es que al hacer el "select id from recursos" me devuelve
varios registros y el new.id es un valor único.

ERROR: INSERT tiene más columnas de destino que expresiones CONTEXT:
sentencia SQL: «INSERT INTO permisosrecursos(recurso,grupo,acceso)
values((select id from recursos), $1 )» PL/pgSQL function
"permisosrecursos" line 2 at SQL statement

- --

< ¡¡Nos vemos!! >
----------------------------
\
\
.::!!!!!!!:.
.!!!!!:. .:!!!!!!!!!!!!
~~~~!!!!!!. .:!!!!!!!!!UWWW$$$
:$$NWX!!: .:!!!!!!XUWW$$$$$$$$$P
$$$$$##WX!: .<!!!!UW$$$$" $$$$$$$$#
$$$$$ $$$UX :!!UW$$$$$$$$$ 4$$$$$*
^$$$B $$$$\ $$$$$$$$$$$$ d$$R"
"*$bd$$$$ '*$$$$$$$$$$$o+#"
"""" """""""
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFHjyt5K7lGsMchFswRArvSAKCDV9pWeNv/nDM0oYPbXj5PS8kuUQCdEM66
gdxKuWUYzFlXPMacZ+NHc4g=
=6K1z
-----END PGP SIGNATURE-----

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ramiro Morales 2008-01-17 10:33:42 Re: Mensaje al actualizar postgres.
Previous Message Pablo Braulio 2008-01-17 09:21:28 Mensaje al actualizar postgres.