4.2. Поддерживаемые типы данных #
Типы в базе данных-источнике преобразуются в типы базы данных-приёмника следующим образом: драйвер источника сопоставляет типам источника типы Go, а затем кодировщики преобразуют данные в двоичный формат, соответствующий приёмнику.
Поддерживаются следующие типы данных Oracle:
NUMBER, CHAR, NCHAR, VARCHAR, NVARCHAR, VARCHAR2, NVARCHAR2, STRING, DATE, LONG, LONG RAW, CLOB, NCLOB, BLOB, BFILE, RAW(16), RAW(32), RAW, ROWID, UROWID, FLOAT, DEC, DECIMAL, DOUBLE PRECISION, INT, INTEGER, BINARY_INTEGER, PLS_INTEGER, SMALLINT, REAL, BINARY_FLOAT, BINARY_DOUBLE, TIMESTAMP, BOOLEAN, INTERVAL, XMLTYPE, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE, VARRAY.
Поддерживаются следующие типы данных PostgreSQL:
BFILE, BOOLEAN, BYTEA, CHAR, CHARACTER VARYING(N), VARCHAR(N), CHARACTER(N), CHAR(N), BPCHAR(N), BPCHAR, DBMS_LOB.BLOB, DBMS_LOB.CLOB, NAME, TEXT, SMALLINT, INTEGER, BIGINT, DECIMAL, NUMERIC, REAL, DOUBLE PRECISION, SMALLSERIAL, SERIAL, BIGSERIAL, TIMESTAMP, DATE, TIME, INTERVAL, HSTORE, UUID, XML, JSON, JSONB, OID, MONEY, CIDR, INET, MACADDR, MACADDR8, tsquery, tsvector, txid_snapshot, pg_snapshot, pg_lsn и пользовательские типы данных.
При переносе данных типа MONEY значение читается из источника без символа денежной единицы, а записывается в приёмник с символом денежной единицы, соответствующей локали приёмника.
Следующая таблица описывает соответствие между типами данных Oracle и PostgreSQL:
Таблица 4.2. Соответствие типов Oracle и PostgreSQL
| Тип Oracle | Тип Go | Тип PostgreSQL |
|---|---|---|
VARCHAR2 NVARCHAR2 CHAR NCHAR LONG | string | text char(n) varchar(n) bool |
CLOB NCLOB | string | dbms_lob.clob text |
BINARY_DOUBLE | float64 | real double precision smallint integer bigint numeric smallserial serial bigserial |
FLOAT DEC DECIMAL NUMBER | Decimal | numeric |
BINARY_FLOAT | float32 | real |
DATE | time.Time | timestamp |
TIMESTAMP(0) TIMESTAMP(3) TIMESTAMP(6) TIMESTAMP(9) TIMESTAMP(0) WITH TIME ZONE TIMESTAMP(3) WITH TIME ZONE TIMESTAMP(6) WITH TIME ZONE TIMESTAMP(9) WITH TIME ZONE | time.Time | timestamp [with timezone] |
LONG RAW BLOB RAW | []byte | sfile dbms_lob.blob bytea |
BFILE | model.BFile
{
alias string,
filename string
} | bfile |
BOOLEAN | bool | bool |
NTERVAL ... | model.Interval
{
Years int
Months int
Days int
Hours int
Minutes int
Seconds int
Milliseconds int
Sign int
} | interval |
В следующих таблицах описано соответствие типов данных PostgreSQL типам данных в файлах формата Parquet.
Следующая таблица описывает соответствие числовых типов данных:
Таблица 4.3. Соответствие числовых типов PostgreSQL типам в файлах формата Parquet
| Тип PostgreSQL | Тип в Parquet | Пример в PostgreSQL | Пример в Parquet | Комментарий |
|---|---|---|---|---|
smallint | INT32 | 5 | 5 | |
integer | INT32 | 5 | 5 | |
bigint | INT64 | 5 | 5 | |
numeric | FIXED_LEN_BYTE_ARRAY | -1.258 | 0xFFFFFFFFFFFFFFFFFFFFFFFFB5047180 | Допустимы только точность 38 и масштаб 9. The physical type is |
decimal | FIXED_LEN_BYTE_ARRAY | -1.258 | 0xFFFFFFFFFFFFFFFFFFFFFFFFB5047180 | Справедлив комментарий к типу numeric. |
real | FLOAT | 129.153 | 129.1529998779297 | |
double precision | DOUBLE | -1.258 | -1.258 |
Следующая таблица описывает соответствие денежных типов данных:
Таблица 4.4. Соответствие денежных типов PostgreSQL типам в файлах формата Parquet
| Тип PostgreSQL | Тип в Parquet | Пример в PostgreSQL | Пример в Parquet | Комментарий |
|---|---|---|---|---|
money | BYTE_ARRAY | $1.25 | 1.25 | Тип сохраняется как строка без символа денежной единицы. |
Следующая таблица описывает соответствие строковых типов данных:
Таблица 4.5. Соответствие строковых типов PostgreSQL типам в файлах формата Parquet
| Тип PostgreSQL | Тип в Parquet | Пример в PostgreSQL | Пример в Parquet | Комментарий |
|---|---|---|---|---|
varchar | BYTE_ARRAY | "test string" | "test string" | В том числе поддерживается varchar(n) с заданной длиной, однако длина не учитывается. |
char(10) | BYTE_ARRAY | "test" | "test" | Если строка короче указанной длины, оставшиеся символы заполняются пробелами. |
text | BYTE_ARRAY | "test string" | "test string" |
Следующая таблица описывает соответствие типов данных даты и времени:
Таблица 4.6. Соответствие типов даты/времени PostgreSQL типам в файлах формата Parquet
| Тип PostgreSQL | Тип в Parquet | Пример в PostgreSQL | Пример в Parquet | Комментарий |
|---|---|---|---|---|
timestamp without time zone | INT64 | "2006-01-02 15:04:05" | 1136214245000000 | Поддерживается timestamp(6), но точность игнорируется. Возвращается число микросекунд с начала эпохи UNIX. |
timestamp with time zone | INT64 | "02 Jan 06 15:04 EST" | 1136232240000000 | Часовой пояс и точность игнорируются. Возвращается число микросекунд. |
date | BYTE_ARRAY | "2006-01-02" | 2006-01-02 | Дата сохраняется в виде строки в этом формате. Даты до н.э. (BC) не поддерживаются. |
time without time zone | INT64 | "15:04:05" | 54245000000 | Количество микросекунд с начала суток. Поддерживается timestamp(6), но точность игнорируется. |
interval | FIXED_LEN_BYTE_ARRAY | "1 years 0 mons 2 days 3 hours 20 mins 0.0 secs" | 1 year 2 days 03:20:00 | Физический тип — Имейте в виду, что при этом сопоставлении теряется точность: в то время, как PostgreSQL хранит значения типа Для этого типа статистика MinMax не собирается. Если статистика по этому типу всё же доступна, следующий запрос в duckDB приведёт к ошибке: SELECT * FROM parquet_metadata(./file.parquet) |
Следующая таблица описывает соответствие других типов данных:
Таблица 4.7. Соответствие прочих типов PostgreSQL типам в файлах формата Parquet
| Тип PostgreSQL | Тип в Parquet | Пример в PostgreSQL | Пример в Parquet |
|---|---|---|---|
boolean | BOOLEAN | TRUE | true |
bytea | BYTE_ARRAY | "test bytes" | "test bytes" |
Примечание
В настоящий момент тип Parquet xml не поддерживается.