Thread: ERROR: cannot find attribute 1 of relation pg_temp.460.0

ERROR: cannot find attribute 1 of relation pg_temp.460.0

From
Ivo Simicevic
Date:
After creating temporary table with CREATE TEMP TABLE command in ECPG
I get following error when disconnecting / exiting program:

query: close C1
ProcessUtility: close C1
CommitTransactionCommand
proc_exit(0) [#0]
shmem_exit(0) [#0]
ERROR:  cannot find attribute 1 of relation pg_temp.460.0
pq_flush: send() failed: Bad file descriptor
AbortCurrentTransaction
pq_flush: send() failed: Bad file descriptor
FATAL 1:  Socket command type 
pq_flush: send() failed: Bad file descriptor
proc_exit(0) [#1]
ERROR:  unknown frontend message was received
pq_flush: send() failed: Bad file descriptor
AbortCurrentTransaction
NOTICE:  AbortTransaction and not in in-progress state 
pq_flush: send() failed: Bad file descriptor
/usr/lib/postgresql/bin/postmaster: reaping dead processes...
/usr/lib/postgresql/bin/postmaster: CleanupProc: pid 460 exited with status 11
/usr/lib/postgresql/bin/postmaster: CleanupProc: reinitializing shared memory and semaphores
shmem_exit(0) [#0]
binding ShmemCreate(key=52e519, size=4794368)



If I try to delete temporary table before disconnecting things get even worse -
it enters infinite loop of errors.


Any clue what is wrong?

Regards,

Ivo Simicevic.


Re: [INTERFACES] ERROR: cannot find attribute 1 of relation pg_temp.460.0

From
Tom Lane
Date:
Ivo Simicevic <ivo@ultra.hr> writes:
> After creating temporary table with CREATE TEMP TABLE command in ECPG
> I get following error when disconnecting / exiting program:

I believe this is triggered by ecpg's autocommit feature, and that
you could work around it by ensuring that at least one commit occurs
between creation of the temp table and application exit.  It looks
like 6.5.* gets confused if it has to delete a never-yet-committed
temp table :-(.

I don't see any such problem with current sources, but I dunno if it's
practical to back-patch a fix into 6.5.*.  The current sources have
diverged quite a bit in that area...
        regards, tom lane


Re: [INTERFACES] ERROR: cannot find attribute 1 of relation pg_temp.460.0

From
Michael Meskes
Date:
On Sun, Nov 28, 1999 at 06:45:26PM -0500, Tom Lane wrote:
> I believe this is triggered by ecpg's autocommit feature, and that
> you could work around it by ensuring that at least one commit occurs
> between creation of the temp table and application exit.  It looks

IMO the naming of autocommit is all but a good one. 

There is only one way to commit a transaction in ecpg and that's by issuing
a COMMIT resp. END WORK statement. The only difference between the two ways
of operation in ecpg is how to start a transaction.

With AUTOCOMMIT set to ON a transaction is started only via a BEGIN WORK
statement. Ot in other words if you do not start a transaction each
statement is its own one and thus autocommitted. If AUTOCOMMIT is set to OFF
ecpg always starts a new transaction after a COMMIT resp. a ROLLBACK.

> like 6.5.* gets confused if it has to delete a never-yet-committed
> temp table :-(.

Yes, this looks like there is no commit after the create and AUTOCOMMIT is
set to OFF (default).

Michael
-- 
Michael Meskes                         | Go SF 49ers!
Th.-Heuss-Str. 61, D-41812 Erkelenz    | Go Rhein Fire!
Tel.: (+49) 2431/72651                 | Use Debian GNU/Linux!
Email: Michael@Fam-Meskes.De           | Use PostgreSQL!

************




Re: [INTERFACES] ERROR: cannot find attribute 1 of relation pg_temp.460.0

From
Michael Meskes
Date:
On Sun, Nov 28, 1999 at 06:45:26PM -0500, Tom Lane wrote:
> I believe this is triggered by ecpg's autocommit feature, and that
> you could work around it by ensuring that at least one commit occurs
> between creation of the temp table and application exit.  It looks

IMO the naming of autocommit is all but a good one. 

There is only one way to commit a transaction in ecpg and that's by issuing
a COMMIT resp. END WORK statement. The only difference between the two ways
of operation in ecpg is how to start a transaction.

With AUTOCOMMIT set to ON a transaction is started only via a BEGIN WORK
statement. Ot in other words if you do not start a transaction each
statement is its own one and thus autocommitted. If AUTOCOMMIT is set to OFF
ecpg always starts a new transaction after a COMMIT resp. a ROLLBACK.

> like 6.5.* gets confused if it has to delete a never-yet-committed
> temp table :-(.

Yes, this looks like there is no commit after the create and AUTOCOMMIT is
set to OFF (default).

Michael
-- 
Michael Meskes                         | Go SF 49ers!
Th.-Heuss-Str. 61, D-41812 Erkelenz    | Go Rhein Fire!
Tel.: (+49) 2431/72651                 | Use Debian GNU/Linux!
Email: Michael@Fam-Meskes.De           | Use PostgreSQL!

************