Обсуждение: When an index and a constraint have the same name...

Поиск
Список
Период
Сортировка

When an index and a constraint have the same name...

От
jason@buberel.org
Дата:
Seems as though I've gotten myself into something of a pickle:

I wound up with a fkey constraint and an index on the same table having the
same name ('rs_fkey').

The result is an error message when I try to drop the table (cascade) or
even drop the constraint:

# alter table report_specification drop constraint rs_pkey;
NOTICE:  constraint pr_rs on table purchase_record depends on index rs_pkey
ERROR:  "rs_pkey" is an index

and then there is:

# drop index rs_pkey;
ERROR:  cannot drop index rs_pkey because constraint rs_pkey on table
report_specification requires it
HINT:  You may drop constraint rs_pkey on table report_specification instead.

Is there some name-spacing trick I can use to selectively drop the index or
the constraint in a way that postgres (using v8.1) will let me get away with
it?

Thanks,
Jason


Re: When an index and a constraint have the same name...

От
Tom Lane
Дата:
jason@buberel.org writes:
> Seems as though I've gotten myself into something of a pickle:
> I wound up with a fkey constraint and an index on the same table having the
> same name ('rs_fkey').

That shouldn't be a problem particularly.

> The result is an error message when I try to drop the table (cascade) or
> even drop the constraint:
> # alter table report_specification drop constraint rs_pkey;
> NOTICE:  constraint pr_rs on table purchase_record depends on index rs_pkey
> ERROR:  "rs_pkey" is an index

That seems odd.  What PG version is this exactly ("8.1" is not good
enough)?  What does psql show for "\d report_specification" and
"\d purchase_record"?

            regards, tom lane

Re: When an index and a constraint have the same name...

От
"Jason L. Buberel"
Дата:
Thanks for taking a look Tom:

I am running postgres 8.1.4 on RedHet (CentOS) v4.0. Here is the
description of the purchase_record table (somewhat abbreviated with
uninvolved columns omitted):

# \d purchase_record
                              Table "public.purchase_record"
           Column           |  Type   |                     Modifiers
----------------------------+---------+----------------------------------------------------
 purchase_record_id         | bigint  | not null default 0
 report_specification_id    | bigint  |
Indexes:
    "pr_pkey" PRIMARY KEY, btree (purchase_record_id)
    "fki_pr_rs" btree (report_specification_id)
Foreign-key constraints:
    "pr_rs" FOREIGN KEY (report_specification_id) REFERENCES
report_specification(report_specification_id) ON UPDATE RESTRICT ON
DELETE CASCADE


# \d report_specification
                           Table "public.report_specification"
         Column          |         Type          |               Modifiers
-------------------------+-----------------------+---------------------------------------
 report_specification_id | bigint                | not null
 report_template_id      | bigint                |
Indexes:
    "rs_pkey" PRIMARY KEY, btree (report_specification_id)
    "fki_rs_rt_fkey" btree (report_template_id)

Regards,
Jason

Tom Lane wrote:
> jason@buberel.org writes:
>
>> Seems as though I've gotten myself into something of a pickle:
>> I wound up with a fkey constraint and an index on the same table having the
>> same name ('rs_fkey').
>>
>
> That shouldn't be a problem particularly.
>
>
>> The result is an error message when I try to drop the table (cascade) or
>> even drop the constraint:
>> # alter table report_specification drop constraint rs_pkey;
>> NOTICE:  constraint pr_rs on table purchase_record depends on index rs_pkey
>> ERROR:  "rs_pkey" is an index
>>
>
> That seems odd.  What PG version is this exactly ("8.1" is not good
> enough)?  What does psql show for "\d report_specification" and
> "\d purchase_record"?
>
>             regards, tom lane
>

Re: When an index and a constraint have the same name...

От
Tom Lane
Дата:
"Jason L. Buberel" <jason@buberel.org> writes:
> Thanks for taking a look Tom:
> I am running postgres 8.1.4 on RedHet (CentOS) v4.0. Here is the
> description of the purchase_record table (somewhat abbreviated with
> uninvolved columns omitted):

Well, I was hoping I could duplicate the problem, but I can't; which
means either that it's been fixed since 8.1.4 (but I don't see anything
very relevant-looking in the CVS logs) or that there's some critical
factor we haven't identified about your table definitions.

Could you send me the full "pg_dump -s" output for the two tables?
And/or a stack trace from the point of the errfinish() call?  (Note
there will be two errfinish calls, one to print the NOTICE and one
to print the ERROR --- we want to know where the second one comes from.)

            regards, tom lane