Я получаю различные результаты при попытке получить кортежи с использованием Npgsql (v. 3.1.7).Какие кортежи поддерживает Npgsql?
Кортеж целых чисел, кажется, работает хорошо:
SELECT (1, 2)
Это возвращает массив объектов, содержащий целые числа 1 и 2.
Но с другими типами данных, я получаю варьируя типы отказов:
SELECT (1, 'two')
с этим, я получаю NpgsqlException с текстом Unknown message code: 0
.
SELECT (1, 2, 'three')
То же самое, но на этот раз, неизвестный код сообщение 101
. Это значение ASCII 'e'
, и если я привяжу 'f'
к концу ('threef'
), то код 102
.
SELECT (1, 2, 3, 'four')
На этот раз я получить массив объектов, содержащий целые числа 1, 2, 3, и 1718580594. Это последнее 0x666F7572. 0x66
, 0x6F
, 0x75
и 0x72
- значения ASCII 'f'
, 'o'
, 'u'
и 'r'
.
SELECT ('one', 2)
Это виснет и в конце концов таймаут.
В каком-то момент при использовании ExecuteReader (также воспроизводимого при заполнении набора данных), я получил NpgsqlException с внутренним EndOfStreamException, но я не могу найти простое репро размещать для того.
Это просто ошибки в Npgsql, или я делаю что-то неправильно?
сделаю, спасибо, Shay. Да, я понимаю различие между строками/записью и массивом в Postgres, но поскольку мой первый тест с 'SELECT (1, 2)' возвратил массив объектов, я предположил, что массивы объектов являются типом Npgsql, используемым для представления кортежей PostgreSQL, что кажется разумный для меня. –
Я отправлю запрос на перенос, исправляющий эту проблему, просто чтобы уведомить Shay –
Исправление работает для моих тестовых случаев и для моего фактического использования. Спасибо, Шей и Сами! –