define transaction within pg/psql. Necessary?

Started by Antonio Goméz Sotoabout 16 years ago4 messagesgeneral
Jump to latest
#1Antonio Goméz Soto
antonio.gomez.soto@gmail.com

Hello,

if I define a pg/pgsql function, and I call that outside a transaction,
does it create one for itself? Or should I add BEGIN and COMMIT statements within
the function?

Thanks,
Antonio.

#2Grzegorz Jaśkiewicz
gryzman@gmail.com
In reply to: Antonio Goméz Soto (#1)
Re: define transaction within pg/psql. Necessary?

all statements in postgresql are self contained transactions, and you cannot
change that.
To answer your question directly, you don't have to, it will all be a
transaction.

The best example of that is to run following query in psql:

CREATE TEMP TABLE foo() ON COMMIT DROP;

the table will not exists anymore after running it. Precisely because it was
'automatically' wrapped in begin/commit, and dropped at the end of it.

hth

#3Richard Huxton
dev@archonet.com
In reply to: Antonio Goméz Soto (#1)
Re: define transaction within pg/psql. Necessary?

On 18/02/10 10:02, Antonio Goméz Soto wrote:

if I define a pg/pgsql function, and I call that outside a transaction,
does it create one for itself? Or should I add BEGIN and COMMIT
statements within
the function?

You can't call a function outside a transaction. Every statement in
PostgreSQL is inside a transaction, either one you define yourself, or
an implicit one that just lasts for the duration of one statement.

--
Richard Huxton
Archonet Ltd

#4Antonio Goméz Soto
antonio.gomez.soto@gmail.com
In reply to: Richard Huxton (#3)
Re: define transaction within pg/psql. Necessary?

Op 18-02-10 11:07, Richard Huxton schreef:

On 18/02/10 10:02, Antonio Gom�z Soto wrote:

if I define a pg/pgsql function, and I call that outside a transaction,
does it create one for itself? Or should I add BEGIN and COMMIT
statements within
the function?

You can't call a function outside a transaction. Every statement in
PostgreSQL is inside a transaction, either one you define yourself, or
an implicit one that just lasts for the duration of one statement.

Clear answer. Thanks.

Antonio