plpgsql関数でのquote_ident()の使用

ジョン・イグニール

plpgsql関数の作成は初めてです。関数内で実行される動的コマンドでのquote_ident()(さらにはquote_literal())の使用に関する説明が必要です。関数内でどのように機能するかについて、誰かが具体的に説明してくれることを願っています。TIA

その例を次に示します。

EXECUTE 'UPDATE tbl SET ' || quote_ident(colname) || ' = ' || quote_literal(newvalue) || ' WHERE key = ' || quote_literal(keyvalue);
Pavel Stehule

quote_ident識別子の引用に使用されます文字列の引用にquote_literal使用されます

postgres=# select quote_ident('tablename');
┌─────────────┐
│ quote_ident │
╞═════════════╡
│ tablename   │
└─────────────┘
(1 row)

postgres=# select quote_ident('special name');
┌────────────────┐
│  quote_ident   │
╞════════════════╡
│ "special name" │
└────────────────┘
(1 row)

postgres=# select quote_literal(e'some text with special char"\'"');
┌───────────────────────────────────┐
│           quote_literal           │
╞═══════════════════════════════════╡
│ 'some text with special char"''"' │
└───────────────────────────────────┘
(1 row)

識別子とは何ですか?テーブル、列、スキーマ、シーケンスなどの名前...リテラルとは何ですか?-通常はテキスト値です(ただし、任意のタイプの値にすることができます)。関数はいくつかの特別な文字を検索して置換しますが、ルールが異なります。SQLでは識別子と文字列が異なります。

さて、これらの関数は少し時代遅れです。quote_literal句に置き換える必要がありUSING(パフォーマンスが向上)、quote_identフォーマット関数に置き換える必要がありますformat(読みやすさが向上するため)。

EXECUTE format('UPDATE tbl SET %I=$1 WHERE key=$2', colname) 
  USING newvalue, keyvalue;

またはフォーマット機能のみ

EXECUTE format('UPDATE tbls SET %I=%L WHERE key=%L', colname, newvalue, keyvalue);

動的SQLを引用しないと、a)機能しない(構文エラーで失敗する)、b)SQLインジェクションに対して安全ではありません

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Postgresql 関数の動的テーブルの quote_ident エラー

分類Dev

TypeError:nilからStringへの暗黙の変換はありません。utils.rb:24:in `quote_ident '

分類Dev

plpgsql関数の動的部分

分類Dev

TypeError: no implicit conversion of nil into String. utils.rb:24:in `quote_ident'

分類Dev

Rのcount.fields関数のquote = ""の意味は何ですか?

分類Dev

plpgsqlの「EXECUTEformat()」で変数を使用する方法

分類Dev

plpgsqlの「EXECUTEformat()」で変数を使用する方法

分類Dev

Postgres / plpgsqlのビュー定義で変数を使用する方法

分類Dev

plpgsql関数を使用して実際の月を5日間に分割する方法

分類Dev

plpgsql関数は別の関数値を返します

分類Dev

トリガー関数のplpgsqlプロシージャで複数のエイリアスを使用するにはどうすればよいですか?

分類Dev

関数でのIsNumericの使用

分類Dev

VisualBasicでの関数の使用

分類Dev

関数でのAppUIの使用

分類Dev

plpgsql関数から複数の行を返します

分類Dev

plpgsql関数から複数の行を返します

分類Dev

AngularJsでの複数の関数の使用

分類Dev

AngularJsでの複数の関数の使用

分類Dev

plpgsql関数から行のセットを返します。

分類Dev

plpgsql関数の動的ORDERBYおよびASC / DESC

分類Dev

テーブルの行をplpgsql関数に渡す方法は?

分類Dev

plpgsql関数からRETURNING句の結果を返すにはどうすればよいですか?

分類Dev

Java ResultSetを取り込んで、plpgsql関数からの戻り値を取得します

分類Dev

.query関数での変数の使用

分類Dev

関数での共有変数の使用

分類Dev

ZeptoAnimation関数での変数の使用

分類Dev

PL / pgSQL関数での変数の使用

分類Dev

関数内での「動的変数」の使用

分類Dev

parsetree.mliでのPexp_identの使用の意味は何ですか?

Related 関連記事

  1. 1

    Postgresql 関数の動的テーブルの quote_ident エラー

  2. 2

    TypeError:nilからStringへの暗黙の変換はありません。utils.rb:24:in `quote_ident '

  3. 3

    plpgsql関数の動的部分

  4. 4

    TypeError: no implicit conversion of nil into String. utils.rb:24:in `quote_ident'

  5. 5

    Rのcount.fields関数のquote = ""の意味は何ですか?

  6. 6

    plpgsqlの「EXECUTEformat()」で変数を使用する方法

  7. 7

    plpgsqlの「EXECUTEformat()」で変数を使用する方法

  8. 8

    Postgres / plpgsqlのビュー定義で変数を使用する方法

  9. 9

    plpgsql関数を使用して実際の月を5日間に分割する方法

  10. 10

    plpgsql関数は別の関数値を返します

  11. 11

    トリガー関数のplpgsqlプロシージャで複数のエイリアスを使用するにはどうすればよいですか?

  12. 12

    関数でのIsNumericの使用

  13. 13

    VisualBasicでの関数の使用

  14. 14

    関数でのAppUIの使用

  15. 15

    plpgsql関数から複数の行を返します

  16. 16

    plpgsql関数から複数の行を返します

  17. 17

    AngularJsでの複数の関数の使用

  18. 18

    AngularJsでの複数の関数の使用

  19. 19

    plpgsql関数から行のセットを返します。

  20. 20

    plpgsql関数の動的ORDERBYおよびASC / DESC

  21. 21

    テーブルの行をplpgsql関数に渡す方法は?

  22. 22

    plpgsql関数からRETURNING句の結果を返すにはどうすればよいですか?

  23. 23

    Java ResultSetを取り込んで、plpgsql関数からの戻り値を取得します

  24. 24

    .query関数での変数の使用

  25. 25

    関数での共有変数の使用

  26. 26

    ZeptoAnimation関数での変数の使用

  27. 27

    PL / pgSQL関数での変数の使用

  28. 28

    関数内での「動的変数」の使用

  29. 29

    parsetree.mliでのPexp_identの使用の意味は何ですか?

ホットタグ

アーカイブ