The following bug has been logged online:

Bug reference:      2129
Logged by:          Akio Iwaasa
Email address:      [EMAIL PROTECTED]
PostgreSQL version: 7.4.10
Operating system:   Redhat EL ES 3.0
Description:        dblink problem
Details: 

I'm very sorry for my poor English.

"postgres" process terminated with "signal 11" 
because of my wrong SQL statement using "dblink".

--- SQL statement(Select statement a function) ---
 select into RET *
  from dblink(''select C1,C2,C3 from TABLE01 where ... '') <<<<< 3 column
   as LINK_TABLE01(LC1 varchar(5),LC2 varchar(5),
                   LC3 varchar(5),LC4 varchar(5)) ;        <<<<< 4 column
---------------------------------------------------

Backtrace is below.

---
(gdb) core /usr/local/pgsql74a/data/base/10218530/core.20823
Core was generated by `postgres: postgres nwops [local] CO'.
Program terminated with signal 11, Segmentation fault.
 :
(gdb) bt
#0  0x00575ffb in strlen () from /lib/tls/libc.so.6
#1  0x081f222a in varcharin (fcinfo=0xbfffbf70) at
    varchar.c:368
#2  0x0821b86e in FunctionCall3 (flinfo=0x89f5b60,
    arg1=29795, arg2=0, arg3=64) at fmgr.c:1016
#3  0x08120647 in BuildTupleFromCStrings (attinmeta=
    0x89f5b00, values=0x8a2e2f0) at execTuples.c:730
#4  0x00b5173d in dblink_record (fcinfo=0xbfffc160)
    at dblink.c:699
#5  0x0811c8c8 in ExecMakeTableFunctionResult 
    (funcexpr=0x89f5058, econtext=0x89f4c70, 
     expectedDesc=0x89f4e08, returnDesc=0xbfffc244)
    at execQual.c:1057
#6  0x0812882c in FunctionNext (node=0x89f4be8) at 
    nodeFunctionscan.c:78
#7  0x0811fba6 in ExecScan (node=0x89f4be8, 
    accessMtd=0x81287dc  <FunctionNext>) at 
    execScan.c:98
#8  0x08128906 in ExecFunctionScan (node=0x89f4be8) at
    nodeFunctionscan.c:128
#9  0x0811aa0c in ExecProcNode (node=0x89f4be8) at 
    execProcnode.c:322
#10 0x081190b8 in ExecutePlan (estate=0x89f4ad8, 
    planstate=0x89f4be8, operation=CMD_SELECT, 
    numberTuples=1,  direction=ForwardScanDirection,
    dest=0x82b4734) at execMain.c:1103
#11 0x081182f5 in ExecutorRun (queryDesc=0x89e66b0, 
    direction=ForwardScanDirection, count=1) at
    execMain.c:249
#12 0x0812fb65 in _SPI_pquery (queryDesc=0x89e66b0, 
    runit=1 '\001', useCurrentSnapshot=0 '\0', 
    tcount=1) at spi.c:1254
#13 0x0812fa5c in _SPI_execute_plan (plan=0x8a1b728,
    ValuNulls=0x8a19398 " 1111112", useCurrentSnapshot=0
    '\0', tcount=1) at spi.c:1201
#14 0x0812da75 in SPI_execp (plan=0x8a1b728, Values=
    0x8a193e0, Nulls=0x8a19398 " 1111112", tcount=1) at
    spi.c:241
#15 0x00ed97a3 in exec_run_select (estate=0xbfffc620, 
    expr=0x89e9170, maxtuples=1, portalP=0x0) at 
    pl_exec.c:3223
#16 0x00ed6abe in exec_stmt_select (estate=0xbfffc620, 
    stmt=0x89e9250) at pl_exec.c:1519
#17 0x00ed5eb6 in exec_stmt (estate=0xbfffc620, 
    stmt=0x89e9250) at pl_exec.c:967
#18 0x00ed5d3e in exec_stmts (estate=0xbfffc620, 
    stmts=0x89e8ed0) at pl_exec.c:903
#19 0x00ed5c28 in exec_stmt_block (estate=0xbfffc620, 
    block=0x89ebfd8) at pl_exec.c:859
#20 0x00ed56f0 in plpgsql_exec_trigger (func=0x89e86a8, 
    trigdata=0xbfffc830) at pl_exec.c:645
#21 0x00ed149f in plpgsql_call_handler 
    (fcinfo=0xbfffc700) at pl_handler.c:121
#22 0x0810442b in ExecCallTriggerFunc 
    (trigdata=0xbfffc830, finfo=0x89e26d8, 
    per_tuple_context=0x89e0500) at trigger.c:1150
#23 0x0810562c in DeferredTriggerExecute 
    (event=0x89eeb10, itemno=0, rel=0xb5549300, 
     trigdesc=0x89e2370, finfo=0x89e26c0, 
     per_tuple_context=0x89e0500) at trigger.c:1867
#24 0x0810589a in deferredTriggerInvokeEvents (
    immediate_only=1 '\001') at trigger.c:2008
#25 0x08105a38 in DeferredTriggerEndQuery () 
    at trigger.c:2143
#26 0x0819d61a in finish_xact_command () at 
    postgres.c:1757
#27 0x0819c427 in exec_simple_query 
    (query_string=0x89dcfb8 "COPY user_info_tbl FROM 
     STDIN ;") at postgres.c:946
#28 0x0819eb0e in PostgresMain (argc=4, argv=0x8990430,
    username=0x89903a0 "postgres") at postgres.c:2918
#29 0x081728b8 in BackendFork (port=0x899cd70) at 
    postmaster.c:2564
#30 0x08171fe2 in BackendStartup (port=0x899cd70) at
    postmaster.c:2207
#31 0x08170661 in ServerLoop () at postmaster.c:1119
#32 0x08170100 in PostmasterMain (argc=1, argv=0x898f538)
    at postmaster.c:897
#33 0x08137ccb in main (argc=1, argv=0xbfffd9e4) 
    at main.c:214
(gdb) up
#1  0x081f222a in varcharin (fcinfo=0xbfffbf70) 
    at varchar.c:368
(gdb) p s
$10 = 0x7463 <Address 0x7463 out of bounds>
(gdb) up
#2  0x0821b86e in FunctionCall3 (flinfo=0x89f5b60, 
    arg1=29795, arg2=0, arg3=64) at fmgr.c:1016
(gdb) up
#3  0x08120647 in BuildTupleFromCStrings (attinmeta=
    0x89f5b00, values=0x8a2e2f0) at execTuples.c:730
(gdb) p i
$12 = 3
(gdb) p values[0]
$13 = 0x8a2066c "11111112"
(gdb) p values[1]
$16 = 0x8a20675 "11111112"
(gdb) p values[2]
$14 = 0x8a2067e "1"
(gdb) p values[3]
$15 = 0x7463 <Address 0x7463 out of bounds>
(gdb) up
#4  0x00b5173d in dblink_record (fcinfo=0xbfffc160) 
    at dblink.c:699
(gdb) p *((PGresult *)funcctx->user_fctx)
$9 = {
  ntups = 1,
  numAttributes = 3,
  attDescs = 0x8a205dc,
  tuples = 0x8a21470,
  tupArrSize = 128,
  resultStatus = PGRES_TUPLES_OK,
  cmdStatus = "SELECT", '\0' <repeats 33 times>,
  binary = 0,
  noticeHooks = {
    noticeRec = 0xac0635 <defaultNoticeReceiver>,
    noticeRecArg = 0x0,
    noticeProc = 0xac0679 <defaultNoticeProcessor>,
    noticeProcArg = 0x0
  },
  client_encoding = 1,
  errMsg = 0x0,
  errFields = 0x0,
  null_field = "",
  curBlock = 0x8a205d8,
  curOffset = 168,
  spaceLeft = 1880
}
(gdb) p *(funcctx->attinmeta->tupdesc)
$18 = {
  natts = 4,
  attrs = 0x89f58a0,
  constr = 0x0,
  tdhasoid = 0 '\0'
}
(gdb)
---

Of course this trouble occurred because of my 
mistake, but I think that it is better if "dblink" 
returns an error for a wrong SQL statement.

If "numAttributes"*1 was smaller than "natts"*2 
before "dblink_record" calls "BuildTupleFromCStrings", 
dblink can not return error ?

 *1 funcctx->user_fctx->numAttributes
 *2 funcctx->attinmeta->tupdesc->natts

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

Reply via email to