Lists: | pgsql-sql |
---|
From: | Jasmin Dizdarevic <jasmin(dot)dizdarevic(at)gmail(dot)com> |
---|---|
To: | pgsql-sql(at)postgresql(dot)org |
Subject: | on error resume next |
Date: | 2009-07-31 15:24:26 |
Message-ID: | a0eee4d40907310824h3fd0df14p75b633e38fd2d203@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-sql |
hi,
can i use savepoints to realize something like "on error resume next"?
i've got the following situation:
begin;
1. create view user001.accounts as select * from base.accounts;
2. grant select on user001.accounts to loginuser001;
commit;
begin;
3. create view user002.accounts as select * from base.accounts;
4. grant select on user002.accounts to loginuser002;
commit;
my goal is to avoid execution stop, if one of the transactions fail.
let's say line 1 throws an error it should go further to line 3.
any ideas?
thank you.
jasmin
From: | Andreas Wenk <a(dot)wenk(at)netzmeister-st-pauli(dot)de> |
---|---|
To: | Jasmin Dizdarevic <jasmin(dot)dizdarevic(at)gmail(dot)com> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: on error resume next |
Date: | 2009-07-31 18:12:40 |
Message-ID: | 4A733418.6000304@netzmeister-st-pauli.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-sql |
Jasmin Dizdarevic wrote:
> hi,
>
> can i use savepoints to realize something like "on error resume next"?
>
> i've got the following situation:
>
> begin;
> 1. create view user001.accounts as select * from base.accounts;
> 2. grant select on user001.accounts to loginuser001;
> commit;
>
> begin;
> 3. create view user002.accounts as select * from base.accounts;
> 4. grant select on user002.accounts to loginuser002;
> commit;
>
>
> my goal is to avoid execution stop, if one of the transactions fail.
> let's say line 1 throws an error it should go further to line 3.
>
> any ideas?
>
> thank you.
>
> jasmin
AFAIK it's not possible. A transaction is kind of a container with a
positive or negative result. If one of the queries fails in between a
transaction, it will be rolled back after a commit. What you can do with
savepoints is the following:
usage=# CREATE TABLE test (id serial, content text);
usage=# BEGIN;
usage=# INSERT INTO test (content) VALUES ('first stuff');
usage=# SAVEPOINT s1;
usage=# INSERT INTO test (content) VALUES ();
ERROR: syntax error at or near ")"
usage=# ROLLBACK TO SAVEPOINT s1;
ROLLBACK
usage=# SELECT * FROM test;
id | content
----+--------------
1 | first stuff
(1 row)
usage=# COMMIT;
COMMIT
usage=# SELECT * FROM test;
id | content
----+--------------
1 | first stuff
(1 row)
The second INSERT statement fails. If you would go further with insert
statements and then fire a COMMIT at the end, nothing would be inserted
into the table. But if you fire a ROLLBACK TO SAVEPOINT s1, at least the
data of the first INSERT statement are written.
So maybe this is a start help for creating some logic to get something
like 'on error resume next'.
Cheers
Andy
From: | Jasmin Dizdarevic <jasmin(dot)dizdarevic(at)gmail(dot)com> |
---|---|
To: | Andreas Wenk <a(dot)wenk(at)netzmeister-st-pauli(dot)de> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: on error resume next |
Date: | 2009-07-31 18:52:16 |
Message-ID: | a0eee4d40907311152v31ea781boc756edff926b04c2@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-sql |
Hi,
that's not really that what i need. I think i will solve it on client side.
thank you.
jasmin
2009/7/31 Andreas Wenk <a(dot)wenk(at)netzmeister-st-pauli(dot)de>
> Jasmin Dizdarevic wrote:
>
>> hi,
>> can i use savepoints to realize something like "on error resume next"?
>> i've got the following situation:
>> begin;
>> 1. create view user001.accounts as select * from base.accounts;
>> 2. grant select on user001.accounts to loginuser001;
>> commit;
>> begin;
>> 3. create view user002.accounts as select * from base.accounts;
>> 4. grant select on user002.accounts to loginuser002;
>> commit;
>> my goal is to avoid execution stop, if one of the transactions fail.
>> let's say line 1 throws an error it should go further to line 3.
>> any ideas?
>> thank you.
>> jasmin
>>
>
> AFAIK it's not possible. A transaction is kind of a container with a
> positive or negative result. If one of the queries fails in between a
> transaction, it will be rolled back after a commit. What you can do with
> savepoints is the following:
>
> usage=# CREATE TABLE test (id serial, content text);
> usage=# BEGIN;
> usage=# INSERT INTO test (content) VALUES ('first stuff');
> usage=# SAVEPOINT s1;
> usage=# INSERT INTO test (content) VALUES ();
> ERROR: syntax error at or near ")"
> usage=# ROLLBACK TO SAVEPOINT s1;
> ROLLBACK
> usage=# SELECT * FROM test;
> id | content
> ----+--------------
> 1 | first stuff
> (1 row)
>
> usage=# COMMIT;
> COMMIT
> usage=# SELECT * FROM test;
> id | content
> ----+--------------
> 1 | first stuff
> (1 row)
>
> The second INSERT statement fails. If you would go further with insert
> statements and then fire a COMMIT at the end, nothing would be inserted into
> the table. But if you fire a ROLLBACK TO SAVEPOINT s1, at least the data of
> the first INSERT statement are written.
>
> So maybe this is a start help for creating some logic to get something like
> 'on error resume next'.
>
> Cheers
>
> Andy
>
>
>
>