[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pgsql-bugs
Subject:    [BUGS] =?koi8-r?Q?Postgresql_8.4.2,_Windows_XP_-_temporary_file_leak=3A_File_still_referenced?=
From:       <oktogen () mail ! ru>
Date:       2009-12-22 7:27:27
Message-ID: E1NMz9T-0003dN-00.oktogen-mail-ru () f291 ! mail ! ru
[Download RAW message or body]

windows or linux.
See test script



["2.txt" (text/plain)]

begin;

CREATE OR REPLACE FUNCTION function2(
 p_tn text
)
RETURNS SETOF record AS
$body$
DECLARE 
p_sql TEXT;
BEGIN
 p_sql := 'SELECT * FROM '||p_tn||';'; 
 RETURN QUERY EXECUTE(p_sql);
EXCEPTION 
WHEN DATA_EXCEPTION OR SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION THEN
 RAISE WARNING 'sh1';
 RAISE WARNING 'sh2';
 RAISE WARNING 'sh3';
 RAISE WARNING 'sh4';
 RAISE EXCEPTION 'TEST1';
WHEN INTEGRITY_CONSTRAINT_VIOLATION THEN
 RAISE WARNING 'sh1';
 RAISE WARNING 'sh2';
 RAISE WARNING 'sh3';
 RAISE WARNING 'sh4';
 RAISE EXCEPTION 'TEST1';
END;
$body$
LANGUAGE 'plpgsql'
STABLE
CALLED ON NULL INPUT
SECURITY DEFINER
COST 100 ROWS 1000;

create function cast_int_to_text(v bigint[]) returns text immutable language sql
as $$
  select $1::text;
$$; 

CREATE TABLE test1 (
 id bigserial NOT NULL, 
 name TEXT, 
 description TEXT, 
 document_date TIMESTAMP WITHOUT TIME ZONE DEFAULT now(), 
 oper_type SMALLINT DEFAULT 1 NOT NULL, 
 ua UUID[], 
 tst BIGINT[], 
 CONSTRAINT test_pkey PRIMARY KEY(id)
) WITHOUT OIDS;
CREATE INDEX test1_idx ON test1
 USING btree ((cast_int_to_text(tst)));
CREATE INDEX test1_idx1 ON test1
 USING gin ((to_tsvector('russian'::regconfig, name)));

insert into test1 (name, description, tst) select 'name: ' || n::text, 'desc: ' || n, \
array[1,2,3,n,3,2,1] from generate_series(1, 100000) as x(n);

set work_mem TO 64;

SELECT * FROM 
function2('test1')
AS T(
id BIGINT,
name TEXT,
description TEXT,
document_date TIMESTAMP,
oper_type SMALLINT,
ua UUID[],
tst BIGINT[]
);

WARNING:  temporary file leak: File 78 still referenced
КОНТЕКСТ:  PL/pgSQL function "function2" line 3 during statement block exit

WARNING:  temporary file leak: File 78 still referenced
CONTEXT:  PL/pgSQL function "function2" line 3 during statement block exit
TRAP: FailedAssertion("!(((file) > 0 && (file) < (int) SizeVfdCache && \
VfdCache[file].fileName != ((void *)0)))", File: "fd.c", Line: 1166)

Program received signal SIGABRT, Aborted.
0x00007fb7acee4f55 in *__GI_raise (sig=<value optimized out>) at \
../nptl/sysdeps/unix/sysv/linux/raise.c:64 64      \
../nptl/sysdeps/unix/sysv/linux/raise.c: Нет такого файла или каталога.  in \
../nptl/sysdeps/unix/sysv/linux/raise.c (gdb) bt
#0  0x00007fb7acee4f55 in *__GI_raise (sig=<value optimized out>) at \
../nptl/sysdeps/unix/sysv/linux/raise.c:64 #1  0x00007fb7acee7d90 in *__GI_abort () \
at abort.c:88 #2  0x00000000006cbb5d in ExceptionalCondition (conditionName=<value \
optimized out>, errorType=<value optimized out>,  fileName=<value optimized out>, \
lineNumber=<value optimized out>) at assert.c:57 #3  0x0000000000604e09 in FileWrite \
(file=0, buffer=0x16da5c8 "", amount=5728) at fd.c:1166 #4  0x0000000000605b6b in \
BufFileDumpBuffer (file=0x16da598) at buffile.c:300 #5  0x0000000000605dc8 in \
BufFileFlush (file=0x16da598, fileno=12478, offset=6, whence=-1) at buffile.c:439 #6  \
BufFileSeek (file=0x16da598, fileno=12478, offset=6, whence=-1) at buffile.c:510 #7  \
0x00000000006f5912 in tuplestore_gettuple (state=0x1700e48, forward=1 '\001', \
should_free=0x7fff1055ee67 "")  at tuplestore.c:781
#8  0x00000000006f5a99 in tuplestore_gettupleslot (state=0x30be, forward=-66 '\276', \
copy=0 '\000', slot=0xffffffffffffffff)  at tuplestore.c:891
#9  0x00000000005780ce in FunctionNext (node=<value optimized out>) at \
nodeFunctionscan.c:75 #10 0x000000000056b468 in ExecScan (node=0x30be, \
accessMtd=0x578090 <FunctionNext>) at execScan.c:68 #11 0x0000000000563d58 in \
ExecProcNode (node=0x16ba018) at execProcnode.c:385 #12 0x000000000056162a in \
ExecutePlan (queryDesc=0x16c1778, direction=ForwardScanDirection, count=0) at \
execMain.c:1504 #13 standard_ExecutorRun (queryDesc=0x16c1778, \
direction=ForwardScanDirection, count=0) at execMain.c:309 #14 0x000000000061dac7 in \
PortalRunSelect (portal=0x1697c58, forward=1 '\001', count=0, dest=0x17366b0) at \
pquery.c:953 #15 0x000000000061eff9 in PortalRun (portal=0x1697c58, \
count=9223372036854775807, isTopLevel=1 '\001', dest=0x17366b0,  altdest=0x17366b0, \
completionTag=0x7fff1055f1d0 "") at pquery.c:779 #16 0x000000000061a147 in \
exec_simple_query (  query_string=0x1659898 "SELECT * FROM \nfunction2('test1')\nAS \
T(\nid BIGINT,\nname TEXT,\ndescription TEXT,\ndocument_date TIMESTAMP,\noper_type \
SMALLINT,\nua UUID[],\ntst BIGINT[]\n);") at postgres.c:991 #17 0x000000000061ba83 in \
PostgresMain (argc=4, argv=<value optimized out>, username=0x15b89c0 "seb") at \
postgres.c:3614 #18 0x00000000005e8c08 in BackendRun () at postmaster.c:3449
#19 BackendStartup () at postmaster.c:3063
#20 ServerLoop () at postmaster.c:1387
#21 0x00000000005e99ad in PostmasterMain (argc=3, argv=0x15b5d50) at \
postmaster.c:1040 #22 0x000000000058d9d3 in main (argc=3, argv=0x15b5d50) at \
main.c:188

./configure --prefix=$HOME/mnt/e4/inst/pg --with-pgport=5431 --enable-nls \
--enable-debug --enable-cassert --enable-thread-safety --with-perl

postgres (PostgreSQL) 8.4.2
CVS (git) * REL8_4_STABLE 6f8f242 Avoid a premature coercion failure in \
                transformSetOperationTree()
Date:   Wed Dec 16 22:24:19 2009 +0000


["1.txt" (text/plain)]

CREATE OR REPLACE FUNCTION function2(
p_tn text
)
RETURNS SETOF record AS
$body$
DECLARE
p_sql TEXT;
BEGIN
p_sql := 'SELECT * FROM '||p_tn||';';
RETURN QUERY EXECUTE(p_sql);
/*
test show, what
RETURN QUERY EXECUTE(p_sql);
or
FOR p_record IN EXECUTE(p_sql)
LOOP
  RETURN NEXT p_record;
END LOOP;
not have sign.
*/
EXCEPTION
WHEN DATA_EXCEPTION OR SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION THEN
RAISE WARNING 'sh1';
RAISE WARNING 'sh2';
RAISE WARNING 'sh3';
RAISE WARNING 'sh4';
RAISE EXCEPTION 'TEST1';
WHEN INTEGRITY_CONSTRAINT_VIOLATION THEN
RAISE WARNING 'sh1';
RAISE WARNING 'sh2';
RAISE WARNING 'sh3';
RAISE WARNING 'sh4';
RAISE EXCEPTION 'TEST1';
END;
$body$
LANGUAGE 'plpgsql'
STABLE
CALLED ON NULL INPUT
SECURITY DEFINER
COST 100 ROWS 1000;

CREATE TABLE test1 (
id BIGSERIAL NOT NULL,
name TEXT,
description TEXT,
document_date TIMESTAMP WITHOUT TIME ZONE DEFAULT now(),
oper_type SMALLINT DEFAULT 1 NOT NULL,
ua UUID[],
tst BIGINT[],
CONSTRAINT test_pkey PRIMARY KEY(id)
) WITHOUT OIDS;
CREATE INDEX test1_idx ON test1
USING btree ((cast_int_to_text(tst)));
CREATE INDEX test1_idx1 ON test1
USING gin ((to_tsvector('russian'::regconfig, name)));

-- insert into test1 ~10000 rows (any table, for example this)
SELECT * FROM 
sh_test.function2('test1')
AS T(
id BIGINT,
name TEXT,
description TEXT,
document_date TIMESTAMP,
oper_type SMALLINT,
ua UUID[],
tst BIGINT[]
);

WARNING:  temporary file leak: File 46 still referenced
CONTEXT:  PL/pgSQL function "function2" line 3 during statement block exit
ERROR:  tuplestore seek failed

SELECT version()
PostgreSQL 8.4.2, compiled by Visual C++ build 1400, 32-bit

Windows XP SP 3, 4.0 GB RAM, INTEL Q8300, 2.5 GGz

postgresql.conf
shared_buffers = 256MB			# min 128kB
work_mem = 2MB				# min 64kB






-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic