Сканирование перечисления PostgresQl в перечисление Protobuf - PullRequest
1 голос
/ 03 мая 2020

Я перечислил enum в таблицу. Когда я выполняю запрос SELECT с помощью метода sqlx Get (), я получаю:

sql: ошибка сканирования по индексу столбца 1, имя «тип»: преобразование драйвера. Строка типа значения ("INDIVIDUAL") в int32: неверный синтаксис

Postgres таблица:

create type account_type as enum ('INDIVIDUAL', 'BUSINESS');
create table account (
    id varchar not null primary key,
    type account_type not null,
    email varchar(254) not null unique
);

A часть файла прото:

enum AccountType {
    INDIVIDUAL = 0;
    BUSINESS = 1;
}

message Account {
    string id = 1;
    AccountType type = 2;
    string email = 3;
}

SQL запрос:

SELECT id, type, email
FROM account
WHERE email = $1
LIMIT 1

Как сканировать перечисление PostgresQL в перечисление Protobuf? Должен ли я реализовать свой собственный сканер или есть другой способ?

1 Ответ

0 голосов
/ 05 мая 2020

Я не знаю, имеет ли это какое-то значение (поскольку я совершенно не знаю GO), но опубликованная ошибка указывает, что это возможно. Postgres Упорядочение перечисления контролируется с плавающей точкой (enumsortorder), а не целым числом.

postgres=# \d  pg_enum
              Table "pg_catalog.pg_enum"
    Column     | Type | Collation | Nullable | Default
---------------+------+-----------+----------+---------
 enumtypid     | oid  |           | not null |
 enumsortorder | real |           | not null |
 enumlabel     | name |           | not null |
Indexes:
    "pg_enum_oid_index" UNIQUE, btree (oid)
    "pg_enum_typid_label_index" UNIQUE, btree (enumtypid, enumlabel)
    "pg_enum_typid_sortorder_index" UNIQUE, btree (enumtypid, enumsortorder)
...