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

PostgreSQL:OIDからByteaへ

    カスタム関数を必要としないもう1つの方法は、loread(lo_open(...))を使用することです。 次のような組み合わせ:

    UPDATE user SET pkcs_as_bytea = loread(lo_open(pkcs12_as_oid, 262144), 1000000) WHERE thistable.pkcs12 IS NOT NULL
    

    このコード、loreadに問題があります 関数は、2番目のパラメーターとして読み取る最大バイト数(1000000)を必要とします。 上記で使用したパラメータ)なので、データが大きい場合は、ここで非常に大きな数値を使用する必要があります。そうしないと、この数バイト後にコンテンツがトリミングされ、すべてのデータがbyteaに戻されません。 フィールド。

    OIDからテキストフィールドに変換する場合は、次のような変換関数も使用する必要があります。

    UPDATE user SET pkcs_as_text = convert_from(loread(lo_open(pkcs12_as_oid, 262144), 1000000), 'UTF8')
    

    262144 はオープンモードのフラグ、40000 ヘキサで、「オープン読み取り専用」を意味します)



    1. Alembicを使用したスト​​アドプロシージャ:MySQL構文エラー

    2. ClusterControl-高度なバックアップ管理-PostgreSQL

    3. 1:1のユーザー関係をリレーショナルデータベースに保存するための最良の方法

    4. 整数としてのmysqlordervarcharフィールド