文字列リテラル
'
二重引用符で単一引用符をエスケープする-> ''
は標準的な方法であり、もちろん機能します。
'user's log' -- incorrect syntax (unbalanced quote)
'user''s log'
古いバージョンで、または引き続き実行するstandard_conforming_strings = off
場合、または一般的に、Posixエスケープ文字列構文E
を宣言するために文字列を前に付ける場合は、バックスラッシュでエスケープすることもできます\
。
E'user\'s log'
バックスラッシュ自体は別のバックスラッシュでエスケープされます。しかし、それは一般的には好ましくありません。
多くの単一引用符またはエスケープの複数のレイヤーを処理する必要がある場合は、ドル引用符で囲まれた文字列でPostgreSQLの地獄を引用することを回避できます。
'escape '' with '''''
$$escape ' with ''$$
ドル引用符間の混乱をさらに回避するには、各ペアに一意のトークンを追加します。
$token$escape ' with ''$token$
これは、任意の数のレベルをネストできます。
$token2$Inner string: $token1$escape ' with ''$token1$ is nested$token2$
$
キャラクターがクライアントソフトウェアで特別な意味を持つ必要がある場合は注意してください。さらにそれをエスケープする必要があるかもしれません。これは、psqlやpgAdminなどの標準のPostgreSQLクライアントには当てはまりません。
これは、plpgsql関数やアドホックSQLコマンドを記述する場合に非常に役立ちます。ただし、ユーザー入力が可能な場合に、アプリケーションでSQLインジェクションから保護するために準備済みステートメントやその他の方法を使用する必要性を軽減することはできません。@Craigの回答にはそれ以上のものがあります。詳細:
Postgres内の値
データベース内の値を処理する場合、文字列を適切に引用するための便利な関数がいくつかあります。