sql >> データベース >  >> RDS >> PostgreSQL

search_pathに関してデフォルト値の式関数はいつ/どのようにバインドされますか?

    デフォルト値は作成時に解析されます(早期バインディング!)。 psql、pgAdmin、またはその他のクライアントに表示されるのはテキスト表現ですが、実際にはOID 関数のnow() 列の作成時に、デフォルトはシステムカタログに保存されます pg_attrdef 。引用:

    adbin   pg_node_tree  The internal representation of the column default value
    adsrc   text          A human-readable representation of the default value
    

    search_path 、これにより、Postgresはスキーマ修飾された関数の名前を表示します。これは、現在のsearch_pathでは正しく解決されなくなるためです。 。

    ダンプと復元は、カスタムのsearch_pathとは関係ありません。 設定。彼らはそれを明示的に設定しました。したがって、表示される内容は、ダンプ/復元サイクルとは関係ありません。

    組み込み関数をオーバーライドする

    publicを配置する pg_catalogの前 search_path危険のゲームです 。恵まれないユーザー(自分自身を含む)は、多くの場合、そこに書き込み、システム機能を誤って無効にする可能性のある機能を作成することが許可されます-任意の(または悪意のある)結果をもたらします。

    アクセスが制限された専用スキーマが必要です 組み込み関数をオーバーライドします。代わりに次のようなものを使用してください:

    SET search_path = override, pg_catalog, public;
    

    このdba.SEに関する関連回答 。



    1. RAND、LIMITではなくLIMIT、RAND

    2. MySqlビューは動的で効率的ですか?

    3. setFetchSize()をいつ何を指定する必要がありますか?

    4. JPAネイティブクエリは単一のオブジェクトを取得します