Обсуждение: transaction in postgres

Поиск
Список
Период
Сортировка

transaction in postgres

От
"Sebastiano Cascione"
Дата:
Hi averyone,
I'm using a new function to include two query into an unique transaction. Is
this the only way to do it? The following lines show you my function, the
purpose is to return the id_utente field (serial) of the last insert done:
----------------------------------------
CREATE FUNCTION "id_from_insert"("varchar", "varchar", "int4", "bpchar",
"varchar", "int4", "int4", "int4", "varchar", "int4", "bpchar", "varchar",
"varchar") RETURNS "int4" AS 'INSERT INTO g_registrazione_generale (
nome,
cognome,
data_di_nascita,
genere,
indirizzo,
codice_postale,
telefono,
id_documentazione,
email,
data_inserimento,
stato,
velocita_connessione,
istruzione
) VALUES (
$1,
$2,
$3,
$4,
$5,
$6,
$7,
$8,
$9,
$10,
$11,
$12,
$13
);
SELECT max(g_registrazione_generale.id_utente) FROM
g_registrazione_generale;
' LANGUAGE 'sql';
----------------------------------------------------------------------
Best regards


Re: transaction in postgres

От
"Miguel Carvalho"
Дата:
> Hi averyone,
> I'm using a new function to include two query into an unique
> transaction. Is this the only way to do it? The following lines show
> you my function, the purpose is to return the id_utente field (serial)
> of the last insert done: ----------------------------------------
> CREATE FUNCTION "id_from_insert"("varchar", "varchar", "int4",
> "bpchar", "varchar", "int4", "int4", "int4", "varchar", "int4",
> "bpchar", "varchar", "varchar") RETURNS "int4" AS 'INSERT INTO
> g_registrazione_generale ( nome,
> cognome,
> data_di_nascita,
> genere,
> indirizzo,
> codice_postale,
> telefono,
> id_documentazione,
> email,
> data_inserimento,
> stato,
> velocita_connessione,
> istruzione
> ) VALUES (
> $1,
> $2,
> $3,
> $4,
> $5,
> $6,
> $7,
> $8,
> $9,
> $10,
> $11,
> $12,
> $13
> );
> SELECT max(g_registrazione_generale.id_utente) FROM
> g_registrazione_generale;
> ' LANGUAGE 'sql';


Use a query like this: select curval('sequence_name') as nextid;
Before you can issue this query, you *must* have started a transaction(
begin work ).Its mutch simpler and you dont have to mess with record locking( in your
solution there is no garantee that you would get the max value, because
another connection may have inserted a new record ).
Miguel