Приложение C. Типы данных в pgpro_axe
pgpro_axe может читать множество типов данных, существующих как в Postgres Pro, так и в DuckDB. В настоящий момент в запросах можно использовать следующие типы данных:
целочисленные типы (например,
integer,bigint)типы с плавающей точкой (например,
real,double precision)numericВнутри может быть конвертирован в
double precision. За подробной информацией обратитесь к Подразделу C.1).text/varchar/bpcharbit-типы, включая битовые массивы фиксированных и переменных размеровbytea/blobtimestamp/timestamptz/date/interval/timestamp_ns/timestamp_ms/timestamp_sbooleanuuidjson/jsonbdomainarraysдля всех типов вышеЗа подробной информацией об ограничениях, связанных с многомерными массивами, обратитесь к Подразделу C.1.
C.1. Известные ограничения #
В настоящее время pgpro_axe не поддерживает все типы данных. Вы можете столкнуться со следующими проблемами:
Типы данных
enumне поддерживаются.Тип данных DuckDB
decimalне поддерживает широкий диапазон значений, поддерживаемый типом данных Postgres Pronumeric.Чтобы избежать ошибок при конвертации между этими двумя типами данных, внутри
numericконвертируется вdouble precision, если DuckDB не поддерживает требуемый уровень точности. Это может привести к потере точности значений.Тип данных DuckDB
timestamp_nsусекается до микросекунд при конвертации в тип данных Postgres Protimestamp, что приводит к потере точности в выводе. Операции над значениемtimestamp_ns, например сортировка/группировка/сравнение, будут выполняться с полной точностью.Столбцы
jsonbконвертируются в столбцыjsonпри чтении из DuckDB, так как в DuckDB отсутствует тип данныхjsonb.Многие функции и операторы Postgres Pro
jsonиjsonbне реализованы в DuckDB. Вместо них можно использовать функции и операции DuckDBjson.За подробной информацией об этих функциях обратитесь к официальной документации 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.