PostgreSQL テーブルにデータを挿入するときに、「列 "X" が存在しません」というエラーが発生する場合、多くの場合、INSERT
ステートメントで指定された値に問題があることを示します。 これは通常、文字列リテラルの形式が正しくないことが原因で発生します。
元の問題に示されているエラー メッセージは、last_config_version
列の問題を示している可能性があります。 最も一般的な原因は、文字列値の不適切な引用です。
問題: 文字列の引用符が間違っている
PostgreSQL は一重引用符 ('
) を使用して文字列リテラルを区切ります。 二重引用符 ("
) を使用すると、文字列が列識別子として扱われるため、その文字列が実際の列名でない場合は「列 'X' が存在しません」というエラーが発生します。
解決策 1: 正しい文字列の引用符
last_config_version
値を挿入する正しい方法は、値を一重引用符で囲むことです。
<code class="language-sql">INSERT INTO config_change_log (last_config_version, is_done, change_description) VALUES ('5837-2016-08-24_09-12-22', false, '{ ''key'':''value''}');</code>
last_config_version
値を一重引用符で囲んでいることに注意してください。 また、change_description
JSON のような文字列内では、一重引用符を 2 つ重ねることでエスケープされます (''
)。
解決策 2: データ内の単一引用符の処理
データに一重引用符が必要な場合は、二重引用符を二重にしてエスケープする必要があります。 例:
<code class="language-sql">INSERT INTO config_change_log (last_config_version, is_done, change_description) VALUES ('5837-2016-08-24_09-12-22', false, '{ "key":"value"}');</code>
これは、change_description
が JSON データを保持することを目的としており、JSON 文字列内のキーと値に二重引用符を使用していることを前提としています。これは標準的な JSON の慣行です。 JSON でない場合は、データ型に応じて適切なエスケープを使用して調整します。
文字列リテラルを正しく引用符で囲み、必要に応じて一重引用符をエスケープすることで、INSERT
ステートメントは正常に実行され、「列 "X" が存在しません」エラーが回避されます。 この一般的な PostgreSQL の問題を防ぐために、構文、特に文字列値の周りを常に再確認してください。
以上がPostgreSQL の INSERT ステートメントで「列 \'X\' が存在しません」というエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。