Re: [GENERAL] skip duplicate key error during inserts

2006-10-27 Thread Ron Johnson
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On 10/27/06 08:41, Alexander Staubo wrote:
> On Oct 27, 2006, at 14:56 , Ron Johnson wrote:
> 
>>> I think you completely missed that I am recommending using '\set
>>> ON_ERROR_ROLLBACK on' in psql.
>>>
>>> Please refer to my previous post and see the effect of the following
>>> line:
>>>
>>> postgres=# \set ON_ERROR_ROLLBACK on
>>
>> But I do *not* want my whole transaction to roll back!!
> 
> That is not what is happening. From the documentation:
> 
>> ON_ERROR_ROLLBACK
>> When on, if a statement in a transaction block generates an error, the
>> error is ignored and the transaction continues. When interactive, such

That'll teach me not to assume what a statement means.

>> errors are only ignored in interactive sessions, and not when reading
>> script files.

Hmmm.

I guess COPY will fail also, instead of throwing a warning and
continuing.

>>   When off (the default), a statement in a transaction
>> block that generates an error aborts the entire transaction. The
>> on_error_rollback-on mode works by issuing an implicit SAVEPOINT for
>> you, just before each command that is in a transaction block, and
>> rolls back to the savepoint on error.
[snip]
> 
> The wording of the option (in combination with the value "on") is
> admittedly confusing. It's really "on_error_continue".

Isn't that the truth.  :\

- --
Ron Johnson, Jr.
Jefferson LA  USA

Is "common sense" really valid?
For example, it is "common sense" to white-power racists that
whites are superior to blacks, and that those with brown skins
are mud people.
However, that "common sense" is obviously wrong.
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.5 (GNU/Linux)

iD8DBQFFQhxsS9HxQb37XmcRAkhIAKDkLRIbOOlNCN4nC1N2DllKfKo5wQCfS/Gk
xHRyVEytS3cQK9y2F8bXeGw=
=wzfH
-END PGP SIGNATURE-

---(end of broadcast)---
TIP 2: Don't 'kill -9' the postmaster


Re: [GENERAL] skip duplicate key error during inserts

2006-10-27 Thread Alexander Staubo

On Oct 27, 2006, at 14:56 , Ron Johnson wrote:


I think you completely missed that I am recommending using '\set
ON_ERROR_ROLLBACK on' in psql.

Please refer to my previous post and see the effect of the  
following line:


postgres=# \set ON_ERROR_ROLLBACK on


But I do *not* want my whole transaction to roll back!!


That is not what is happening. From the documentation:


ON_ERROR_ROLLBACK
When on, if a statement in a transaction block generates an error,  
the error is ignored and the transaction continues. When  
interactive, such errors are only ignored in interactive sessions,  
and not when reading script files. When off (the default), a  
statement in a transaction block that generates an error aborts the  
entire transaction. The on_error_rollback-on mode works by issuing  
an implicit SAVEPOINT for you, just before each command that is in  
a transaction block, and rolls back to the savepoint on error.


So with on_error_rollback the transaction continues regardless of  
errors:


# begin;
# \set ON_ERROR_ROLLBACK on
# insert into t2 values ( 1 );
ERROR:  duplicate key violates unique constraint "t2_pkey"
alex # insert into t2 values ( 1 );
ERROR:  duplicate key violates unique constraint "t2_pkey"

With on_error_rollback disabled, the transaction is implicitly aborted:

# begin;
# \set ON_ERROR_ROLLBACK on
# insert into t2 values ( 1 );
ERROR:  duplicate key violates unique constraint "t2_pkey"
# insert into t2 values ( 1 );
ERROR:  current transaction is aborted, commands ignored until end of  
transaction block


The wording of the option (in combination with the value "on") is  
admittedly confusing. It's really "on_error_continue".


Alexander.


---(end of broadcast)---
TIP 9: In versions below 8.0, the planner will ignore your desire to
  choose an index scan if your joining column's datatypes do not
  match


Re: [GENERAL] skip duplicate key error during inserts

2006-10-27 Thread Ron Johnson
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On 10/27/06 06:48, Gurjeet Singh wrote:
> On 10/27/06, Ron Johnson <[EMAIL PROTECTED]> wrote:
>>
>> Dueling examples.  Attached are two examples of errors.
> 
> 
> I think you completely missed that I am recommending using '\set
> ON_ERROR_ROLLBACK on' in psql.
> 
> Please refer to my previous post and see the effect of the following line:
> 
> postgres=# \set ON_ERROR_ROLLBACK on

But I do *not* want my whole transaction to roll back!!

- --
Ron Johnson, Jr.
Jefferson LA  USA

Is "common sense" really valid?
For example, it is "common sense" to white-power racists that
whites are superior to blacks, and that those with brown skins
are mud people.
However, that "common sense" is obviously wrong.
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.5 (GNU/Linux)

iD8DBQFFQgH8S9HxQb37XmcRAsW+AKCOzz6WidLYlS96oacxCL0qbaxfOACgqz/H
/RA16NFFwi82JyibP58tmUI=
=jNzL
-END PGP SIGNATURE-

---(end of broadcast)---
TIP 4: Have you searched our list archives?

   http://archives.postgresql.org/


Re: [GENERAL] skip duplicate key error during inserts

2006-10-27 Thread Gurjeet Singh
On 10/27/06, Ron Johnson <[EMAIL PROTECTED]> wrote:
Dueling examples.  Attached are two examples of errors.I think you completely missed that I am recommending using '\set ON_ERROR_ROLLBACK on' in psql.
Please refer to my previous post and see the effect of the following line:postgres=# \set ON_ERROR_ROLLBACK on
 -- [EMAIL PROTECTED][EMAIL PROTECTED] gmail | hotmail | yahoo }.com


Re: [GENERAL] skip duplicate key error during inserts

2006-10-27 Thread Ron Johnson
On 10/27/06 05:10, Gurjeet Singh wrote:
> On 10/27/06, Ron Johnson <[EMAIL PROTECTED]> wrote:
> 
> That doesn't help at all during multi-table transactions
> 
> 
> What problem do you think you would face in multi-table scenario? I tried
> the following and it worked for me; hope this is what you meant by
> multi-table transactions:
> 
> postgres=# begin;
> BEGIN
> postgres=# create table t1 ( a int primary key );
[snip]
> postgres=# commit;
> COMMIT
> postgres=# select * from t1;
> a
> ---
> 1
> (1 row)
> 
> postgres=# select * from t2;
> a
> ---
> 1
> (1 row)
> 
> postgres=#

Dueling examples.  Attached are two examples of errors.

BTW, PG 8.1.5.

> want the loader to kick duplicates out to an
>> exception file.
>>
> 
> Now you are asking for a completely new feature!!!

But easily doable if errors don't puke a transaction.

-- 
Ron Johnson, Jr.
Jefferson LA  USA

Is "common sense" really valid?
For example, it is "common sense" to white-power racists that
whites are superior to blacks, and that those with brown skins
are mud people.
However, that "common sense" is obviously wrong.
toll_archive=# begin;
BEGIN
Time: 0.124 ms
toll_archive=# create table foo (f1 int primary key);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "foo_pkey" for 
table "foo"
CREATE TABLE
Time: 281.424 ms
toll_archive=# commit;
COMMIT
Time: 15.864 ms
toll_archive=# begin;
BEGIN
Time: 0.204 ms
toll_archive=# insert into foo (1);
ERROR:  syntax error at or near "1" at character 18
LINE 1: insert into foo (1);
 ^
toll_archive=# insert into foo values (1);
ERROR:  current transaction is aborted, commands ignored until end of 
transaction block
toll_archive=# insert into foo values (1);
INSERT 0 1
Time: 0.985 ms
toll_archive=# insert into foo values (2);
INSERT 0 1
Time: 0.233 ms
toll_archive=# insert into foo values (3);
INSERT 0 1
Time: 0.230 ms
toll_archive=# insert into foo values (1);
ERROR:  duplicate key violates unique constraint "foo_pkey"
toll_archive=# insert into foo values (4);
ERROR:  current transaction is aborted, commands ignored until end of 
transaction block


signature.asc
Description: OpenPGP digital signature


Re: [GENERAL] skip duplicate key error during inserts

2006-10-27 Thread Gurjeet Singh
On 10/27/06, Ron Johnson <[EMAIL PROTECTED]> wrote:
That doesn't help at all during multi-table transactionsWhat problem do you think you would face in multi-table scenario? I tried the following and it worked for me; hope this is what you meant by multi-table transactions:
postgres=# begin;BEGIN
postgres=# create table t1 ( a int primary key );NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "t1_pkey" for tab
le "t1"CREATE TABLE
postgres=# create table t2 ( a int primary key );NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "t2_pkey" for tab
le "t2"CREATE TABLE
postgres=# \set ON_ERROR_ROLLBACK onpostgres=# insert into t1 values ( 1 );
INSERT 0 1postgres=# insert into t1 values ( 1 );
ERROR:  duplicate key violates unique constraint "t1_pkey"
postgres=# insert into t2 values ( 1 );
INSERT 0 1postgres=# insert into t2 values ( 1 );
ERROR:  duplicate key violates unique constraint "t2_pkey"postgres=# commit;
COMMITpostgres=# select * from t1;
 a---
 1(1 row)
postgres=# select * from t2; a
--- 1(1 row)
postgres=#
want the loader to kick duplicates out to anexception file.
Now you are asking for a completely new feature!!!Regards,-- [EMAIL PROTECTED][EMAIL PROTECTED] gmail | hotmail | yahoo }.com


Re: [GENERAL] skip duplicate key error during inserts

2006-10-27 Thread Ron Johnson
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1


That doesn't help at all during multi-table transactions or
bulk-loads where you want the loader to kick duplicates out to an
exception file.

On 10/27/06 04:41, Gurjeet Singh wrote:
>> If you are using psql, I'd recommend using '\set ON_ERROR_ROLLBACK on'.
[snip]
> The generalized version of this issue (transaction totally fails on
> any error) is extremely painful.
> 
> Most RDBMSs (well, ok, the other RDBMSs that *I* have worked with)
> don't do that, and there's a lot of code written in the form:
> 
>   INSERT INTO ...
>   IF PK-ERROR THEN
>  UPDATE
>   END-IF. 

- --
Ron Johnson, Jr.
Jefferson LA  USA

Is "common sense" really valid?
For example, it is "common sense" to white-power racists that
whites are superior to blacks, and that those with brown skins
are mud people.
However, that "common sense" is obviously wrong.
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.5 (GNU/Linux)

iD8DBQFFQde1S9HxQb37XmcRAnqJAKCGgg3CDeGWuvKNFBZCbrAdSESqjACdFZSI
virSEhXIR8SVDK2CXKbgN3Y=
=0Qrc
-END PGP SIGNATURE-

---(end of broadcast)---
TIP 4: Have you searched our list archives?

   http://archives.postgresql.org/


Re: [GENERAL] skip duplicate key error during inserts

2006-10-27 Thread Gurjeet Singh
If you are using psql, I'd recommend using '\set ON_ERROR_ROLLBACK on'.HTH-- [EMAIL PROTECTED][EMAIL PROTECTED] gmail | hotmail | yahoo }.com
On 10/22/06, Ron Johnson <[EMAIL PROTECTED]> wrote:
-BEGIN PGP SIGNED MESSAGE-Hash: SHA1On 10/22/06 04:39, Jeffrey Webster wrote:> On 10/20/06, Jean-Christophe Roux <[EMAIL PROTECTED]> wrote:>>
>> Hello,>> [snip]>> none of them will be inserted because the first insert is a primary key>> violation. How can I have postgreSQL not mind about the error and
>> proceed to>> the next insert. I could send the inserts one at a time but bundling them>> speeds up the process.>> Thanks> I feel your pain... However, there is no way to do this (currently?).  Some
> possible solutions had been suggested some time back by a colleague, but> they were rejected.  It requires a source code change (and not a simple> one,> at that) to implement.>> Until a concensus is reached by the primary contributors there is no easy
> answer.>> We've resorted to batch loading and parsing error messages to load all data> between primary key violations.  It's still considerably more efficient> than> single inserts.
>> (we've got the code to accomplish what you're asking about in the attic...> hopefully something will come of it some day.)The generalized version of this issue (transaction totally fails on
any error) is extremely painful.Most RDBMSs (well, ok, the other RDBMSs that *I* have worked with)don't do that, and there's a lot of code written in the form:  INSERT INTO ...  IF PK-ERROR THEN
 UPDATE  END-IF.- --Ron Johnson, Jr.Jefferson LA  USAIs "common sense" really valid?For example, it is "common sense" to white-power racists thatwhites are superior to blacks, and that those with brown skins
are mud people.However, that "common sense" is obviously wrong.-BEGIN PGP SIGNATURE-Version: GnuPG v1.4.5 (GNU/Linux)iD8DBQFFO0buS9HxQb37XmcRAughAKCrD6o+ibwr7fclE+wBXnUgX3tNDwCgw8Or
5rGcfhYoAH8giSjwwSqHJe8==aczL-END PGP SIGNATURE(end of broadcast)---TIP 2: Don't 'kill -9' the postmaster



Re: [GENERAL] skip duplicate key error during inserts

2006-10-22 Thread Ron Johnson
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On 10/22/06 04:39, Jeffrey Webster wrote:
> On 10/20/06, Jean-Christophe Roux <[EMAIL PROTECTED]> wrote:
>>
>> Hello,
>> [snip]
>>
> 
> 
> 
> none of them will be inserted because the first insert is a primary key
>> violation. How can I have postgreSQL not mind about the error and
>> proceed to
>> the next insert. I could send the inserts one at a time but bundling them
>> speeds up the process.
>> Thanks
>>
>>
> I feel your pain... However, there is no way to do this (currently?).  Some
> possible solutions had been suggested some time back by a colleague, but
> they were rejected.  It requires a source code change (and not a simple
> one,
> at that) to implement.
> 
> Until a concensus is reached by the primary contributors there is no easy
> answer.
> 
> We've resorted to batch loading and parsing error messages to load all data
> between primary key violations.  It's still considerably more efficient
> than
> single inserts.
> 
> (we've got the code to accomplish what you're asking about in the attic...
> hopefully something will come of it some day.)

The generalized version of this issue (transaction totally fails on
any error) is extremely painful.

Most RDBMSs (well, ok, the other RDBMSs that *I* have worked with)
don't do that, and there's a lot of code written in the form:

  INSERT INTO ...
  IF PK-ERROR THEN
 UPDATE
  END-IF.

- --
Ron Johnson, Jr.
Jefferson LA  USA

Is "common sense" really valid?
For example, it is "common sense" to white-power racists that
whites are superior to blacks, and that those with brown skins
are mud people.
However, that "common sense" is obviously wrong.
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.5 (GNU/Linux)

iD8DBQFFO0buS9HxQb37XmcRAughAKCrD6o+ibwr7fclE+wBXnUgX3tNDwCgw8Or
5rGcfhYoAH8giSjwwSqHJe8=
=aczL
-END PGP SIGNATURE-

---(end of broadcast)---
TIP 2: Don't 'kill -9' the postmaster


Re: [GENERAL] skip duplicate key error during inserts

2006-10-22 Thread Jeffrey Webster
On 10/20/06, Jean-Christophe Roux <[EMAIL PROTECTED]> wrote:
Hello,[snip]
 
none
of them will be inserted because the first insert is a primary key
violation. How can I have postgreSQL not mind about the error and
proceed to the next insert. I could send the inserts one at a time but
bundling them speeds up the process.Thanks

I feel your pain... However, there is no way to do this
(currently?).  Some possible solutions had been suggested some
time back by a colleague, but they were rejected.  It requires a
source code change (and not a simple one, at that) to implement.

Until a concensus is reached by the primary contributors there is no easy answer.

We've resorted to batch loading and parsing error messages to load all
data between primary key violations.  It's still considerably more
efficient than single inserts.

(we've got the code to accomplish what you're asking about in the attic... hopefully something will come of it some day.)

Best of luck.



Re: [GENERAL] skip duplicate key error during inserts

2006-10-20 Thread Merlin Moncure

On 10/20/06, Jean-Christophe Roux <[EMAIL PROTECTED]> wrote:

Hello,
I have a table like this:
create table dummy (value integer primary key);
and I insert a row like this
insert into dummy values(0);
then I want to insert three rows:
insert into dummy values(0);
insert into dummy values(1);
insert into dummy values(2);



none of them will be inserted because the first insert is a primary key
violation. How can I have postgreSQL not mind about the error and proceed to
the next insert. I could send the inserts one at a time but bundling them
speeds up the process.
Thanks


if this is bulk insert,
1. insert into scratch table:
create temp table scratch_foo as select * from foo limit 0;
2. insert into scratch, etc.
3. insert into foo select distinct on * from scratch_foo <-- season to taste

merlin

---(end of broadcast)---
TIP 9: In versions below 8.0, the planner will ignore your desire to
  choose an index scan if your joining column's datatypes do not
  match


[GENERAL] skip duplicate key error during inserts

2006-10-20 Thread Jean-Christophe Roux
Hello,I have a table like this:create table dummy (value integer primary key);and I insert a row like thisinsert into dummy values(0);then I want to insert three rows:insert into dummy values(0);insert into dummy values(1);insert into dummy values(2);none of them will be inserted because the first insert is a primary key violation. How can I have postgreSQL not mind about the error and proceed to the next insert. I could send the inserts one at a time but bundling them speeds up the process.Thanks