2つの列(name
とa
)、text
のいずれか、およびjson
のうちの1つの間に一意制約を設定しようとしています。これをPostgres 9.6.3でどのように構造化するのですか? Postgresは、このためのテーブルを作成するためのコマンドは何複数の列を含むネストされたJSONに一意制約を設定する方法
{ name: 'someName',
a: {
b: {
c: 'some text'
}
}
}
:
例の行は次のようになりますか?現在私は(
の近くで構文エラーを示しています。
テーブルアクション(NULL NOT のID BIGINT、 名テキスト、 JSON、 一意(名前、ペイロード:: JSON#>> '{メッセージ、ペイロード、コンテンツ}') )を作成します。
私も、私は、このエラーを与え続け
CREATE TABLE action (
id bigint NOT NULL,
name text,
a json
);
ALTER TABLE actions ADD CONSTRAINT actions_constraint UNIQUE (payload::json#>>'{b, c, d}', name);
試してみた:
ERROR: syntax error at or near "::"
どのように私はこの制約を作成することができますか? CREATE TABLE
で
ありがとう、実際に私のために働いたのは、 '{a、b、c} 'から' a'を削除することです。したがって、答えは 'アクションに固有のINDEX actions_constraintを作成することです(((a#>> '{b、c}'):: text)、name); '。私はあなたの答えをupvoteできるようにこれを確認し、それを変更できますか? – writofmandamus
あなたが望むように@writofmandamus – cske