私は以下の表を持っているが挿入されます。 すべてのパラメータのIDは、二重パラメータIDを避けるために、configuration_parameterに格納されます。私は、parameter_varchar(または他の子parameter_integerなど)のような子の1つでさらに指定されているパラメータのリスト(親のもの、configuration_parameter)を持つことができるようにしたい。SQLステートメントが2行の代わりに、1
ここでパラメータを追加します。私の考えは、最初に親テーブル(configuration_parameter)に行を追加し、次にパラメータをさらに指定するために子(parameter_varchar)に行を追加することでした。 configuration_parameter_IDは、configuration_parameterに追加された行のものと同じである必要があります。
これは私が使用する文です:
with inserted as (
INSERT INTO configuration_parameter(type)
VALUES ('varchar') RETURNING id
)
INSERT INTO parameter_varchar(type, configuration_parameter_id, name, is_required, max_length)
select 'varchar', inserted.id, 'APN Name', 'false', 32 from inserted;
されており、1行にid = 12とconfiguration_parameter_id = 11で、私は指定されたすべてのものとparameter_varcharであり、今何が起こります。 しかし、configuration_parameterには、id = 11とid = 12で2行追加されています。 id = 12のconfiguration_parameterは存在してはいけません。
私の声明が間違っているか、継承の原則が間違っていて、DB自体に間違いがありました。 誰かが私が間違っていたこととそれがなぜ間違っていたのか説明してもらえますか?
これはエラーをスローします。エラー: "configuration_parameter_id"列のnull値がnullでない制約に違反しています – Kailayla
@Kailaylaは答えが少し不足しています。あなたのddlは間違っています。あなたは継承または関連しています(外部キー)。両方を行うことはできません。私はあなたが継承を削除することをお勧めします。さらに読む[docs](https://www.postgresql.org/docs/current/static/ddl-inherit.html) –
@Aツ彼は両方を行うことができます。それは間違っているわけではないが、彼の場合は意味をなさない。 –