JSON foreign keys in PostgreSQL JSON foreign keys in PostgreSQL postgresql postgresql

JSON foreign keys in PostgreSQL


It is not possible, and may not ever be possible, to assign a foreign key to a json property. It'd be a major and quite complicated change to PostgreSQL's foreign key enforcement. I don't think it's impossible to do, but would face similar issues to those experienced by the foreign-keys-to-arrays patch.

With 9.4 it'll be possible to make a whole json object a foreign key as jsonb supports equality tests. In 9.3 you can't even do that.


Here's a little SPI function have_ids which I use for an integrity constraint on a one-to-many relationship with a jsonb column

CREATE TABLE foo (  id INTEGER NOT NULL)CREATE TABLE bar (  foo_ids pg_catalog.jsonb DEFAULT '[]'::jsonb NOT NULL,  CONSTRAINT bar_fooids_chk CHECK (have_ids ('foo', foo_ids)))

With a couple of triggers on foo it's almost as good as a foreign key.


The foreign key parameter must be a column name:

http://www.postgresql.org/docs/current/static/sql-createtable.html

You will have to normalize

create table user_data (    id int not null primary key,    user_id int not null,    somedata text,    constraint fk_users_data foreign key (user_id) references Users(Id));