Эквивалент УНИКАЛЬНОМУ ИДЕНТИФИКАТОРУ в PostgreSQL - PullRequest
0 голосов
/ 21 июня 2019

Я пытался перейти с MSSQL на PostgreSQL и, следовательно, пытался преобразовать запросы в эквивалент PostgreSQL.Однако при выполнении запроса PostgreSQL выдается ошибка:

ОШИБКА: тип «uniqueidentifier» не существует ЛИНИЯ 3: ID UNIQUEIDENTIFIER DEFAULT UUID_GENERATE_V4 () :: VARCHAR NO ... ^ Состояние SQL: 42704 Символ:38

MSSQL

CREATE TABLE [dbo].[ISS_AUDIT]
(
  [ID] UNIQUEIDENTIFIER DEFAULT NEWID() NOT NULL,
  [GRAPH_ID] [varchar](196)
  PRIMARY KEY(ID)
);

PostgreSQL

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE public.ISS_AUDIT
(
  ID UNIQUEIDENTIFIER DEFAULT UUID_GENERATE_V4()::VARCHAR NOT NULL,
  GRAPH_ID VARCHAR(196),
  PRIMARY KEY(ID)
);

Я что-то упустил на UNIQUEIDENTIFIER ?

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Это правильный сценарий:

CREATE TABLE public.ISS_AUDIT
(
  ID uuid PRIMARY KEY DEFAULT UUID_GENERATE_V4(),
  GRAPH_ID VARCHAR(196)
);

См. ссылку .Извлечение:

SQL Server вызывает тип UniqueIdentifier, а PostgreSQL вызывает тип uuid.Оба типа занимают 16 байтов памяти.По причинам совместимости с другим программным обеспечением или базами данных многие используют их стандартизированное текстовое представление, особенно для транспорта, а не с использованием собственного типа.

0 голосов
/ 21 июня 2019

Нам нужно UUID , которое можно использовать, как показано ниже:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE public.ISS_AUDIT(
  ID UUID DEFAULT UUID_GENERATE_V4()::UUID NOT NULL,
  GRAPH_ID VARCHAR(196),
  PRIMARY KEY(ID)
);
...