pgpro_axe может читать множество типов данных, существующих как в Postgres Pro, так и в DuckDB. В настоящий момент в запросах можно использовать следующие типы данных:
целочисленные типы (например, integer, bigint)
типы с плавающей точкой (например, real, double precision)
numeric
Внутри может быть конвертирован в double precision. За подробной информацией обратитесь к «Известные ограничения»).
text/varchar/bpchar
bit-типы, включая битовые массивы фиксированных и переменных размеров
bytea/blob
timestamp/timestamptz/date/interval/timestamp_ns/timestamp_ms/timestamp_s
boolean
uuid
json/jsonb
domain
arrays для всех типов выше
За подробной информацией об ограничениях, связанных с многомерными массивами, обратитесь к «Известные ограничения».
В настоящее время pgpro_axe не поддерживает все типы данных. Вы можете столкнуться со следующими проблемами:
Типы данных enum не поддерживаются.
Тип данных DuckDB decimal не поддерживает широкий диапазон значений, поддерживаемый типом данных Postgres Pro numeric.
Чтобы избежать ошибок при конвертации между этими двумя типами данных, внутри numeric конвертируется в double precision, если DuckDB не поддерживает требуемый уровень точности. Это может привести к потере точности значений.
Тип данных DuckDB timestamp_ns усекается до микросекунд при конвертации в тип данных Postgres Pro timestamp, что приводит к потере точности в выводе. Операции над значением timestamp_ns, например сортировка/группировка/сравнение, будут выполняться с полной точностью.
Столбцы jsonb конвертируются в столбцы json при чтении из DuckDB, так как в DuckDB отсутствует тип данных jsonb.
Многие функции и операторы Postgres Pro json и jsonb не реализованы в DuckDB. Вместо них можно использовать функции и операции DuckDB json.
За подробной информацией об этих функциях обратитесь к официальной документации DuckDB.
В Postgres Pro тип данных DuckDB tinyint конвертируется в char. Это объясняется тем, что Postgres Pro не поддерживает тип данных tinyint. В результате вместо стандартного числа отображается hex-код.
Могут возникать проблемы при преобразовании между многомерными массивами Postgres Pro и вложенными списками DuckDB (LIST) в DuckDB, так как функциональности, поддерживаемые базами данных, не совпадают полностью.
В частности, в Postgres Pro массивы в столбце могут иметь разное количество измерений, например [1] и [[1], [2]] могут встретиться в одном столбце. Это запрещено в DuckDB, и степень вложенности не может изменяться. С другой стороны, в DuckDB разные списки на одном уровне вложенности могут содержать разное количество элементов, например [[1], [1, 2]]. Это запрещено в Postgres Pro. Таким образом, преобразование между этими типами возможно, только если массивы следуют за подмножеством.
Другой возможной проблемой может быть то, что pgpro_axe использует метаданные столбцов Postgres Pro для определения количества измерений массива. Так как Postgres Pro не выдаёт ошибку, когда вы добавляете массивы с разными измерениями, возможна ситуация, при которой количество измерений в столбце метаданных не соответствует реальному количеству измерений. Чтобы избежать этого, вам нужно изменить тип данных столбца:
-- преобразует столбец в трёхмерную текстовую строку --
ALTER TABLE s ALTER COLUMN a SET DATA TYPE text[][][];
Для типа domain при выполнении операции INSERT проверка domain проводится Postgres Pro, а не DuckDB. Если выполняется операция SELECT и запрашиваемое поле имеет тип данных domain, его потребуется преобразовать в соответствующий базовый тип и обработать с помощью DuckDB.