高速で動的SQLなし
UUIDの先頭の16桁の16進数を、テキスト表現でビット文字列bit(64)
それをbigint
にキャストします 。参照:
便利なことに、右側の余分な16進数は切り捨てられます bit(64)
へのキャストで 自動的に-まさに必要なもの。
Postgresは、入力にさまざまな形式を受け入れます。指定された文字列リテラルはそのうちの1つです:
14607158d3b14ac0b0d82a9a5a9e8f6e
UUIDのデフォルトのテキスト表現(およびtext
データ型uuid
のPostgresでの出力 )事前定義された場所にハイフンを追加します:
14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e
入力形式が異なる可能性がある場合は、最初にハイフンを削除して確認してください。
SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;
実際のuuid
をキャストします
uuid::text
で入力 。
db <> fiddle こちら
Postgresは署名済みを使用することに注意してください 整数なので、bigint
上半分で負の数にオーバーフローします。これは、この目的には関係ありません。
DB設計
可能であれば、 bigserial
基になるテーブルに列を追加し、代わりにそれを使用します。