Можно ли получить безопасные объединения типов в Postgres, используя домены и / или типы? - PullRequest
0 голосов
/ 29 ноября 2018

Можно ли добиться безопасного соединения типов в Postgres, где я не могу объединить два разных типа идентификаторов?Я планировал создать новый домен для каждого типа идентификатора (например, типа user_id, типа settings_id и предотвратить недопустимые объединения, такие как присоединение к users.user_id = settings.settings_id. Я пытался сделать это с доменами, но он все еще позволял объединениепройти путь. Есть ли способ достичь этого?

db-name=# CREATE DOMAIN uuid1 AS uuid;
CREATE DOMAIN
db-name=# CREATE TABLE foo(id uuid1 PRIMARY KEY DEFAULT uuid_generate_v1mc());
CREATE TABLE
db-name=# CREATE DOMAIN uuid2 AS uuid;
CREATE DOMAIN
db-name=# CREATE TABLE bar(id uuid2 PRIMARY KEY DEFAULT uuid_generate_v1mc());
CREATE TABLE
db-name=# SELECT * FROM foo INNER JOIN bar ON foo.id = bar.id;
(0 rows)

В настоящее время мы получаем безопасность этого типа на уровне ORM с помощью Haskell Persistent / Esqueleto, но мы бы хотели, чтобы он существовал на уровне SQLтоже, если возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...