Thread: Primary key reference count

Primary key reference count

From
Wiebe Cazemier
Date:
Hi,

I'm trying to find which of the tables in pg_catalog contains the amount of
references to a primary key, but I can't seem to find it. Google queries are
also less than successful. Is it even stored in the catalog? 



Re: Primary key reference count

From
"A. Kretschmer"
Date:
am  19.04.2006, um 14:01:03 +0200 mailte Wiebe Cazemier folgendes:
> Hi,
> 
> I'm trying to find which of the tables in pg_catalog contains the amount of
> references to a primary key, but I can't seem to find it. Google queries are
> also less than successful. Is it even stored in the catalog? 

Yes,
http://www.postgresql.org/docs/8.1/interactive/catalog-pg-constraint.html


HTH, Andreas
-- 
Andreas Kretschmer    (Kontakt: siehe Header)
Heynitz:  035242/47215,      D1: 0160/7141639
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net===    Schollglas Unternehmensgruppe    === 


Re: Primary key reference count

From
Wiebe Cazemier
Date:
On Wednesday 19 April 2006 15:09, A. Kretschmer wrote:

> Yes,
> http://www.postgresql.org/docs/8.1/interactive/catalog-pg-constraint.html

Either I'm blind, or this is not what I'm looking for. I need to know the
amount of references _to_ a primary key. If you have a customer with two
orders and one invoice, the reference count for the primary key of the
custormer would be 3.

I need to know if I can delete rows which are not referenced anywhere, without
catching the relational constraint exception. The reason I can't catch the
exception, is that I want the exception to arrive at my application and/or
tests.



Re: Primary key reference count

From
Wiebe Cazemier
Date:
On Wednesday 19 April 2006 15:33, Wiebe Cazemier wrote:

> Either I'm blind, or this is not what I'm looking for. I need to know the
> amount of references _to_ a primary key. If you have a customer with two
> orders and one invoice, the reference count for the primary key of the
> custormer would be 3.
> 
> I need to know if I can delete rows which are not referenced anywhere,
> without catching the relational constraint exception. The reason I can't
> catch the exception, is that I want the exception to arrive at my application
> and/or tests.

Never mind. I found another solution.



Re: Primary key reference count

From
Wiebe Cazemier
Date:
On Wednesday 19 April 2006 17:00, Wiebe Cazemier wrote:

> Never mind. I found another solution.

Whoops. Posted to quickly there. I do still need to know the amount of
references to the primary key.



Re: Primary key reference count

From
Volkan YAZICI
Date:
On Apr 19 02:01, Wiebe Cazemier wrote:
> I'm trying to find which of the tables in pg_catalog contains the amount of
> references to a primary key, but I can't seem to find it.

Here's simple query, to list which table's which columns references to a
specific table. (Hope this is what you asked for.)

SELECT TBL.table_name, COL.column_name   FROM information_schema.referential_constraints AS REF   INNER JOIN
information_schema.table_constraintsAS TBL              USING (constraint_name)   INNER JOIN
information_schema.constraint_column_usageAS COL              USING (constraint_name)   INNER JOIN
information_schema.table_constraintsAS PRI              ON (PRI.constraint_name = REF.unique_constraint_name)   WHERE
PRI.table_name= 'pri_id'; -- Your target table goes here.
 

This is a quick & dirty hack. Just wanted to show the possibility of the
idea using information schema. (You don't want to deal with internal
tables, ain't?)


Regards.


Re: Primary key reference count

From
Wiebe Cazemier
Date:
On Wednesday 19 April 2006 19:21, Volkan YAZICI wrote:

> Here's simple query, to list which table's which columns references to a
> specific table. (Hope this is what you asked for.)
> 
> SELECT TBL.table_name, COL.column_name
>     FROM information_schema.referential_constraints AS REF
>     INNER JOIN information_schema.table_constraints AS TBL
>                USING (constraint_name)
>     INNER JOIN information_schema.constraint_column_usage AS COL
>                USING (constraint_name)
>     INNER JOIN information_schema.table_constraints AS PRI
>                ON (PRI.constraint_name = REF.unique_constraint_name)
>     WHERE PRI.table_name = 'pri_id'; -- Your target table goes here.
> 
> This is a quick & dirty hack. Just wanted to show the possibility of the
> idea using information schema. (You don't want to deal with internal
> tables, ain't?)

I know the reply is somewhat late, but indeed, this would seem to be what I was
looking for. And, using the information schema instead of pg_catalog would
seem to be a better idea as well :)