Обсуждение: Dropped table screws referential integrity?

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

Dropped table screws referential integrity?

От
Joel Mc Graw
Дата:
I had a table (job_documents) that referenced another (jobs).  I no
longer needed job_documents, so I dropped it.  Now, any attempt to
delete rows from jobs fails--it complains that job_documents doesn't
exist.  Is there a way to fix this?

PostgreSQL 7.1.3/FreeBSD 4.2R


TIA





------------------------------------------------------
Joel Mc Graw
DataBill, LLC
602-415-1234 ext. 13

-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS d-@ s: a C++++ UB++++ P-- L- E? W++ N w--- O? M+ V
PS+++ PE++ Y+ PGP++ t+ 5++ X tv+ b+ DI++ G e++ h---- r+++ y++++
-----END GEEK CODE BLOCK-----




Re: Dropped table screws referential integrity?

От
Stephan Szabo
Дата:
On Thu, 7 Mar 2002, Joel Mc Graw wrote:

> I had a table (job_documents) that referenced another (jobs).  I no
> longer needed job_documents, so I dropped it.  Now, any attempt to
> delete rows from jobs fails--it complains that job_documents doesn't
> exist.  Is there a way to fix this?

You'll need to find the two triggers on jobs that reference job_documents
(do a select * from pg_trigger and look at the argument list to find
them) and drop them and you should be fine.


Re: Dropped table screws referential integrity?

От
Tom Lane
Дата:
Joel Mc Graw <jmcgraw@databill.com> writes:
> I had a table (job_documents) that referenced another (jobs).  I no
> longer needed job_documents, so I dropped it.  Now, any attempt to
> delete rows from jobs fails--it complains that job_documents doesn't
> exist.  Is there a way to fix this?

Drop the triggers on jobs that enforce the RI check.  They should've
been dropped automatically, but I believe there used to be a bug in
pg_dump that caused the necessary linkage data not to be included in
dumps --- so if your DB has been dumped and reloaded since the triggers
were made, I'm not surprised you'd have got into this state.

See mail list archives of past discussions if you need help finding
the triggers (hint: look in pg_trigger, and beware that the triggers
you want to drop have mixed-case names which you will have to double
quote).  There will be either one or two triggers to get rid of
depending on which end of the RI check this table was.

            regards, tom lane

Re: Dropped table screws referential integrity?

От
Joel Burton
Дата:
On Thu, 7 Mar 2002, Stephan Szabo wrote:

>
> On Thu, 7 Mar 2002, Joel Mc Graw wrote:
>
> > I had a table (job_documents) that referenced another (jobs).  I no
> > longer needed job_documents, so I dropped it.  Now, any attempt to
> > delete rows from jobs fails--it complains that job_documents doesn't
> > exist.  Is there a way to fix this?
>
> You'll need to find the two triggers on jobs that reference job_documents
> (do a select * from pg_trigger and look at the argument list to find
> them) and drop them and you should be fine.

In techdocs.postgresql.org, I have a HOWTO on referential integrity that
provides some views that make it easier to find the ref rules in effect in
your tables. These are helpful for debugging.

--

Joel BURTON  |  joel@joelburton.com  |  joelburton.com  |  aim: wjoelburton
Independent Knowledge Management Consultant