Re: foreign keys to foreign tables - Mailing list pgsql-general

From William Dunn
Subject Re: foreign keys to foreign tables
Date
Msg-id CAEva=V=J3Ax6yXQNw33HzD3Mishv8+1b=L0br510E9dkqqB11A@mail.gmail.com
Whole thread Raw
In response to Re: foreign keys to foreign tables  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: foreign keys to foreign tables  (Rick Otten <rottenwindfish@gmail.com>)
List pgsql-general
Hello Rick,

As I understand it you are correct. Oracle/DB2/Postgres and I think the SQL Standards to not implement constraints against tables on foreign servers. Although it would be possible to develop the DBMS to handle such constraints in a heterogeneous distributed environment it would be unwise because of the poor performance and reliability of data sent over networks so DBMSs do not implement it. You would, as you suspected, have to use stored procedures to emulate some of the functionality of a foreign key but definitely think twice about the performance bottlenecks you would introduce. A more clever thing to do is use Slony, BDR, or triggers to replicate the foreign table and create the constraint against the local copy. In some other DBMSs the clever thing to do is create a materialized view and constraints against the materialized view (which achieves the same) but Postgres does not yet support such constraints against materialized views.

Will J. Dunn

On Mon, Jun 22, 2015 at 12:21 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
Rick Otten <rottenwindfish@gmail.com> writes:
> Hello pgsql-general,
> I'd like to set up a foreign key constraint to a foreign table from a local
> table.

> ie, I have a column in a local table that I'd like to ensure has a value in
> the foreign table.

> alter mytable
> add column  some_column_id   uuid references myforeigntable(some_column_id)
> ;

> Unfortunately I get a "not a table" error when I try this.

>         ERROR:  referenced relation "myforeigntable" is not a table

> I'm thinking I'll have to write a function that checks for existance of the
> ids in the foreign table, and then put a CHECK constraint on using that
> function, but I thought I'd as first if there was a better way.

What's going to happen when the foreign server decides to delete some rows
from its table?

                        regards, tom lane


--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

pgsql-general by date:

Previous
From: Jeff Janes
Date:
Subject: Re: How to speed up pg_trgm / gin index scan
Next
From: Rick Otten
Date:
Subject: Re: foreign keys to foreign tables