文字列リテラル
それらを二重にして単一引用符をエスケープ'
する ->''
は標準的な方法であり、もちろん機能します:
'user's log' -- incorrect syntax (unbalanced quote)
'user''s log'
`
Postgres では (他の特定の RDBMS とは異なり) 特別な目的を持たないバッククォートではなく"
、識別子に使用される二重引用符ではなく、単純な単一引用符 (ASCII / UTF-8 コード 39) に注意してください。
古いバージョンで、またはまだ or を使用して実行している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 内の値
データベース内の値を扱う場合、文字列を適切に引用するための便利な関数がいくつかあります: