Hi,

Yes, you're right! I found out a functional index using this function and
ANALYZE also cancels.

Is there a way to code this function in a way VACUUM/ANALYZE does not
cancel?

Thank you!

brasil=# analyze "BRASIL".tt_tit;
ERROR:  invalid type name "TT_TIT.SEQCAN%TYPE"
CONTEXT:  compile of PL/pgSQL function "fn_uq_tit_rec_seqcan" near line 7
brasil=#
brasil=# \d "BRASIL".tt_tit
                             Table "BRASIL.tt_tit"
 Column |            Type             |                Modifiers
--------+-----------------------------+-----------------------------------------
 codfil | character(3)                | not null
 sequen | character(10)               | not null
 flgest | character(1)                | not null default 'A'::bpchar
 parrec | character(2)                | not null
 subrec | character(2)                | not null
 filrec | character(3)                | not null
 seqrec | character(10)               | not null
 vlrori | numeric(12,2)               | not null
 aceite | character varying(1)        | not null default 'F'::character
varying
 coderr | character(1)                |
 digcob | character(1)                |
 codbco | character(3)                |
 numage | character(5)                |
 ctacrr | character(10)               |
 seqcan | character(10)               |
 datdes | timestamp without time zone |
 datmor | timestamp without time zone |
 codbai | numeric(1,0)                |
 coddes | numeric(1,0)                |
 codmor | numeric(1,0)                |
 codprt | numeric(1,0)                |
 przbai | numeric(2,0)                |
 przprt | numeric(2,0)                |
 agecob | numeric(5,0)                |
 codccb | numeric(5,0)                |
 codecb | numeric(5,0)                |
 codrem | numeric(5,0)                |
 vlrabt | numeric(12,4)               |
 vlriof | numeric(12,4)               |
 jurdes | numeric(15,2)               |
 jurmor | numeric(15,2)               |
 dummy  | character varying(1)        |
 nosnum | character varying(20)       |
 datven | timestamp without time zone | not null
 portad | numeric(5,0)                | not null
 vlrpar | numeric(12,2)               | not null
Indexes:
    "pk_tit" PRIMARY KEY, btree (codfil, sequen)
    "i_uq_tit_rec_seqcan" UNIQUE, btree
("BRASIL".fn_uq_tit_rec_seqcan(filrec, s
eqrec, parrec, seqcan))
    "i_fk_tit_ctb" btree (codbco, numage, ctacrr)
    "i_fk_tit_dccb" btree (codccb)
    "i_fk_tit_decb" btree (codecb)
    "i_fk_tit_drem" btree (codrem)
    "i_fk_tit_rec" btree (filrec, seqrec, parrec, subrec)
    "i_fk_tt_tit" btree (filrec, seqrec, parrec, subrec)
    "i_lc_tit_nosnum" btree (nosnum)
    "i_lc_tit_rec_seqcan" btree (filrec, seqrec, parrec, seqcan)
Check constraints:
    "ck_tit_aceite" CHECK (aceite::text = 'T'::character varying::text OR
aceite
::text = 'F'::character varying::text)
    "ck_tit_coderr" CHECK (coderr = 'A'::bpchar OR coderr = 'B'::bpchar OR
coder
r = 'C'::bpchar OR coderr = 'D'::bpchar OR coderr = 'E'::bpchar OR coderr =
'F':
:bpchar OR coderr = 'G'::bpchar OR coderr = 'H'::bpchar OR coderr =
'I'::bpchar
OR coderr = 'J'::bpchar OR coderr = 'K'::bpchar OR coderr = 'L'::bpchar OR
coder
r = 'M'::bpchar OR coderr = 'N'::bpchar OR coderr = 'O'::bpchar OR coderr =
'P':
:bpchar OR coderr = 'Q'::bpchar OR coderr = 'R'::bpchar OR coderr =
'S'::bpchar)
    "ck_tit_flgest" CHECK (flgest = 'A'::bpchar OR flgest = 'C'::bpchar OR
flges
t = 'P'::bpchar OR flgest = 'I'::bpchar OR flgest = 'T'::bpchar)
Foreign-key constraints:
    "fk_tit_ctb" FOREIGN KEY (codbco, numage, ctacrr) REFERENCES
"BRASIL".tt_ctb
(codbco, numage, ctacrr)
    "fk_tit_dccb" FOREIGN KEY (codccb) REFERENCES "BRASIL".td_ccb(codtab)
    "fk_tit_decb" FOREIGN KEY (codecb) REFERENCES "BRASIL".td_ecb(codtab)
    "fk_tit_drem" FOREIGN KEY (codrem) REFERENCES "BRASIL".td_rem(codtab)
    "fk_tit_rec" FOREIGN KEY (filrec, seqrec, parrec, subrec) REFERENCES
"BRASIL
".tt_rec(codfil, sequen, numpar, subpar)
Triggers:
    _testenull_tt_tit BEFORE INSERT OR UPDATE ON "BRASIL".tt_tit FOR EACH
ROW EX
ECUTE PROCEDURE "BRASIL".tr_testenull_tt_tit()
    tgtit2 BEFORE INSERT OR DELETE OR UPDATE ON "BRASIL".tt_tit FOR EACH ROW
EXE
CUTE PROCEDURE "BRASIL".tgtit2()
    tgtit3 AFTER INSERT OR DELETE OR UPDATE ON "BRASIL".tt_tit FOR EACH ROW
EXEC
UTE PROCEDURE "BRASIL".tgtit3()


On Thu, Sep 9, 2010 at 10:46 PM, Tom Lane <t...@sss.pgh.pa.us> wrote:

> Carlos Henrique Reimer <carlos.rei...@opendb.com.br> writes:
> > We are facing the following problem in a PG 8.2 server when trying to
> vacuum
> > one of our databases:
> > vacuumdb: vacuuming of database "reimer" failed: ERROR:  invalid type
> name
> > "TT_TIT.SEQCAN%TYPE"
> > [ which seems to be coming from out-of-date code in a function ]
>
> > If I drop the function the vacuumdb runs fine but I'm wondering how a
> > funciton can cancel the vacuumdb utility.
>
> Perhaps you have a functional index that calls that function?  If
> so, ANALYZE would probably try to call the function too.
>
>                        regards, tom lane
>



-- 
Reimer
47-3347-1724 47-9183-0547 msn: carlos.rei...@opendb.com.br

Reply via email to