Enforcing referential integrity against a HSTORE column

Поиск
Список
Период
Сортировка
От Dane Foster
Тема Enforcing referential integrity against a HSTORE column
Дата
Msg-id CA+WxinJi+3t+tGmdZjB8Y9JmipMp_9nmuv0uS=1a5KHbJ7_8OA@mail.gmail.com
обсуждение исходный текст
Ответы Re: Enforcing referential integrity against a HSTORE column
Список pgsql-general
Hello,

I'm moving a MySQL database to PostgreSQL and redesigning parts of it to take advantage of PostgreSQL's richer type system and other advance features. Currently I am attempting to replace a table of name/value pair data w/ a hstore column. But now that the data will no longer be flattened out in a table I need to manually handle referential integrity

So given:

CREATE TABLE xtra_fields(
  xfk SERIAL PRIMARY KEY,
  xtk INTEGER NOT NULL REFERENCES xtra_types,
  ...
);

CREATE OR REPLACE FUNCTION foo_xtra_fk(HSTORE) RETURNS BOOLEAN AS $$
WITH keyz AS (SELECT skeys($1)::INT AS xfk)
SELECT
  (SELECT COUNT(*) FROM keyz JOIN xtra_fields USING (xfk))
  =
  (SELECT COUNT(*) FROM keyz)
$$LANGUAGE SQL STABLE STRICT LEAKPROOF;

CREATE TABLE foo(
  id INTEGER NOT NULL CHECK (id > 0),
  ...
-- Extra fields where the keys are the xtra_fields.xfk values and the values are the
-- data values for the specific xfk.
  xtra hstore CHECK (foo_xtra_fk(xtra))
);

is ​there a more efficient way of maintaining logical referential integrity?


Thank you for your consideration,​

Dane

В списке pgsql-general по дате отправления:

Предыдущее
От: Andrew Bailey
Дата:
Сообщение: Efficiently selecting single row from a select with window functions row_number, lag and lead
Следующее
От: Adrian Klaver
Дата:
Сообщение: Re: Enforcing referential integrity against a HSTORE column