PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Създайте голямо цяло число от големия край на uuid в PostgreSQL

Бързо и без динамичен SQL

Преведете водещите 16 шестнадесетични цифри на UUID в текстово представяне като bitstring bit(64) и прехвърлете това към bigint . Вижте:

За удобство, излишните шестнадесетични цифри вдясно се съкращават в прехвърлянето към bit(64) автоматично - точно това, от което се нуждаем.

Postgres приема различни формати за въвеждане. Даденият от вас низов литерал е един от тях:

14607158d3b14ac0b0d82a9a5a9e8f6e

Текстовото представяне по подразбиране на UUID (и text изход в Postgres за тип данни uuid ) добавя тирета на предварително определени места:

14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e

Ръководството:

Ако форматът на въвеждане може да варира, първо премахнете тиретата, за да сте сигурни:

SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;

Предаване на действителен uuid въвеждане с uuid::text .

db<>fiddle тук

Имайте предвид, че Postgres използва подписан цяло число, така че bigint прелива в отрицателни числа в горната половина - което би трябвало да е без значение за тази цел.

Дизайн на DB

Ако изобщо е възможно, добавете bigserial колона към основната таблица и я използвайте вместо това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да нулирам потребителската парола по подразбиране на postgresql 9.2 (обикновено „postgres“) на mac os x 10.8.2?

  2. Как да получите връщащ се ID в JPA след вмъкване на собствена заявка

  3. PostgreSQL initdb (Инициализация на база данни) на Linux

  4. Курсорите в Django работят ли вътре в отворената транзакция?

  5. (Python) psycopg2 инсталация