>> A cancel signal was sent to the selected server process(es).
>> However, process continues running.
>
> What's it doing exactly?
Client was killed when it waits a 2 MB bytea string insert statement to be
completed inside transaction:
INSERT INTO localfil (filename,filedirect,BlockNumber,lastchange,contents)
values( 'alguss.exe', 'algus', 1,CURRENT_TIMESTAMP, decode(
'1mbbinarystring', 'hex') );
odbc driver was in progress of sending data using libpq when client was
terminated.
> We recently fixed some places in btree index creation where the thing
> could run for a long time before noticing a cancel interrupt. Maybe
> you've found another one.
localfil table is empty before insert (it has large bytea fields but all
rows are deleted before repro). So index (primary key) is single row.
Can it happen that process running 2 mb bytea insert command will take
extremely long time to interrupt ?
Or will decode() function take long time to interrupt ?
There is also before insert or update trigger, maybe this influences ?
I'm currently uploading files using 1 mb binary data which are converted to
a 2 MB hex strings before uploading through odbc.
File is uploaded, stored and downloaded using localfil table in a number of
records each containing 1 MB of data.
Is it more reasonable to use smaller blocks to load and store files ?
Andrus.
My table strucure is
CREATE TABLE public.localfil (
Filename CHAR(50),
FileDirect CHAR(8),
BlockNumber INTEGER,
lastchange timestamp NOT NULL,
Contents BYTEA NOT NULL,
PRIMARY KEY ( Filename, FileDirect, BlockNumber )
);
CREATE TRIGGER localfil_trig BEFORE INSERT OR UPDATE
ON localfil EXECUTE PROCEDURE setlastchange();