のために働くことは、別のテーブルで会社の制限を保存するために、おそらく良いでしょう。 これはまさにRDBMSの目的です。
本当にJSONを使用する必要がある場合は、おそらく解析する必要があります。ポストグルで利用できるJSON関数がいくつかありますが、配列の手間のように思えますし、SQLを使ってデータをクエリすることもできません。
CREATE TABLE t_user (
id SERIAL PRIMARY KEY NOT NULL,
name CHARACTER VARYING(256) NOT NULL
);
CREATE UNIQUE INDEX t_user_idx ON t_users(name);
CREATE TABLE t_company (
id SERIAL PRIMARY KEY NOT NULL,
name CHARACTER VARYING(256) NOT NULL
);
CREATE UNIQUE INDEX t_company_idx ON t_company(name);
CREATE TABLE t_company_restriction (
id SERIAL PRIMARY KEY NOT NULL,
id_company integer NOT NULL REFERENCES t_company(id) ON DELETE CASCADE,
id_user integer NOT NULL REFERENCES t_user(id) ON DELETE CASCADE
);
CREATE UNIQUE INDEX t_company_restriction_idx ON t_company_restriction(id_company, id_user);
INSERT INTO t_user(name) VALUES ('Bill');
INSERT INTO t_user(name) VALUES ('Fred');
INSERT INTO t_company (name) VALUES ('Company 1');
INSERT INTO t_company (name) VALUES ('Company 2');
INSERT INTO t_company (name) VALUES ('Company 3');
INSERT INTO t_company (name) VALUES ('Company 4');
INSERT INTO t_company_restriction (id_user, id_company)
SELECT u.id, c.id FROM t_user u, t_company c
WHERE u.name = 'Bill' AND c.name = 'Company 1';
INSERT INTO t_company_restriction (id_user, id_company)
SELECT u.id, c.id FROM t_user u, t_company c
WHERE u.name = 'Bill' AND c.name = 'Company 2';
INSERT INTO t_company_restriction (id_user, id_company)
SELECT u.id, c.id FROM t_user u, t_company c
WHERE u.name = 'Fred' AND c.name = 'Company 3';
INSERT INTO t_company_restriction (id_user, id_company)
SELECT u.id, c.id FROM t_user u, t_company c
WHERE u.name = 'Fred' AND c.name = 'Company 4';
SELECT u.name
FROM t_user u, t_company c, t_company_restriction cr
WHERE c.name = 'Company 1'
AND c.id = cr.id_company
AND u.id = cr.id_user;
エラーとして、JSONB列で配列演算子を使用することはできません。 JSONB列内の配列内の要素をテストする同等の関数はありません。格納したいものが配列であれば、なぜ配列を使用しないのですか? –
Postgres用の配列データ型がありません。それはなんと呼ばれていますか? – Jordash
https://www.postgresql.org/docs/current/static/arrays.html –