J'essaye de créer une fonction pour peupler 2 tables, la deuxième requête contenant le nouvel identifiant de la première insertion.postgres (8.3), en utilisant le résultat de la requête dans la fonction
un exemple de certains de mes tableaux:
CREATE TABLE message
(
message_id bigserial NOT NULL,
member_id bigint NOT NULL,
message character varying(8192) NOT NULL,
...
)
CREATE TABLE feed_message
(
feed_id bigint NOT NULL,
message_id bigint NOT NULL
)
ce que je suis en train de faire est d'insérer un nouveau message dans la table des messages et utiliser le message_id généré pour remplir la table de feed_message
i essayé d'écrire une fonction en utilisant le langage de pltcl mais je ne peux pas comprendre comment utiliser le SPI_getvalue pour obtenir le juste créé tupil
ce que j'ai jusqu'à présent:
/* message_post(entity, id, member_id, title, message, reactionTo) */
CREATE OR REPLACE FUNCTION message_post()
RETURNS VOID
LANGUAGE pltcl
AS $BODY$
ret_status = spi_exec -count 1 "INSERT INTO message (member_id, title, message) VALUES ($3, $4, $5)"
IF (ret_status == SPI_OK_SELECT && SPI_processed > 0) {
//get the tupil from *SPI_tuptable
set message_id <the new message_id>
}
spi_exec -count 1 "INSERT INTO $1_message ($1_id, message_id) VALUES ($2,$message_id)"
$BODY$;
/* useage */
SELECT message_post('feed',12,1,'title','message');
il semble que cela devrait fonctionner, mais le [spi_lastoid] est vide, et un 0 est inséré à la place du nouveau message_id –
@Paul: Eh bien, vous Je vais devoir faire autre chose pour obtenir le dernier identifiant de ligne inséré; Je n'ai pas de déploiement de postgres à portée de main, donc je ne peux pas vraiment le conseiller. Je viens de lire les docs. :-) –
et après avoir recréé les tables avec (ODIS) tout fonctionne –