Типы данных oracle postgresql

Обновлено: 04.07.2024

Сравнение типов данных PostgreSQL и Oracle: большие типы данных

PostgreSQL - это самая мощная база данных с открытым исходным кодом в мире, которую все больше и больше учреждений и разработчиков в Китае предпочитают и применяют. По мере того как применение PostgreSQL становится все более обширным, требования к переносу данных из Oracle в базу данных PostgreSQL также увеличиваются.

PostgreSQL - это самая мощная база данных с открытым исходным кодом в мире, которую все больше и больше учреждений и разработчиков в Китае предпочитают и применяют. По мере того как применение PostgreSQL становится все более обширным, требования к переносу данных из Oracle в базу данных PostgreSQL также увеличиваются. Когда данные передаются между базами данных, первым и самым важным является преобразование между типами данных. Основываясь на моем собственном понимании и тестировании, я написал несколько статей о различиях между типами данных и мерами предосторожности при переносе. Если у вас есть какие-либо недостатки, сообщите мне.

Большой тип данных

оракул Большой тип данных Есть три основных категории. Это типы, хранящиеся в базе данных, включая BLOB, CLOB, NCLOB. Внешний тип хранится как BFILE. Есть также типы, которые не рекомендуются для использования Oracle и используются только в специальных средах. Это включает Long, используемый для совместимости со старыми версиями, и Long raw, используемый для перемещения данных между различными системами.

PostgreSQL Большой тип данных Существует только два типа: bytea, в котором хранятся двоичные данные, и текст, в котором хранятся типы символов. Далее описывается соответствие между ними и некоторыми соображениями при миграции.

Примечание: соответствует PostgreSQL Большой тип данных Существует также тип идентификатора объекта (oid). Это идентификатор, который указывает на объект типа bytea в системной таблице pg_largeobject. Поскольку он реализован с помощью четырехбайтового целого числа без знака, он не может быть предоставлен Большая база данных Гарантия уникальности в рамках. Поэтому postgreSQL не рекомендует тип oid. Кроме того, его внутренняя реализация также использует тип bytea, поэтому он не будет представлен отдельно.

1. Типы хранятся в базе данных

1.1, тип BLOB

Основное содержание типа BLOB-объектов Oracle - большие двоичные объекты. Максимальная длина (4G-1) * размер блока базы данных. В PostgreSQL соответствующим является bytea. Максимальная длина 1G. Хотя максимальная длина меньше, чем у Blob, в практических приложениях этого достаточно.



1.2, тип CLOB

Тип Oracle Clob в основном хранит однобайтовую или многобайтовую текстовую информацию на основе набора символов базы данных, а максимальная длина составляет (4G-1) * размер блока базы данных. В PostgreSQL вы можете использовать текст для соответствия. Максимальная длина текста составляет 1G, что меньше, чем Oracle. Однако для практического применения достаточно 1G.



1.3, тип NCLOB

Тип Oracle NClob в основном хранит строки UNICODE фиксированной длины.Максимальная длина (4G-1) * размер блока базы данных. В PostgreSQL вы можете использовать текст для соответствия. Максимальная длина текста составляет 1G, что меньше, чем Oracle. Однако для практического применения достаточно 1G.



2. Типы, хранящиеся вне базы данных

2.1, тип BFILE

Тип, хранящийся вне базы данных, относится к типу BFILE. BFILE - это специальный тип данных. Данные не сохраняются в базе данных. База данных - это просто указатель на файл. Укажите путь к файлу и имя файла. Фактические файлы хранятся на жестком диске. Может только читать файл, а не может совершить и откат. Oracle должен иметь разрешение на чтение в том месте, где находится файл. Размер файла теоретически может достигать 2 ^ 64-1 байт.

В PostgreSQL нет типов данных, хранимых извне. Вы можете использовать bytea, чтобы соответствовать типу BFILE. Максимальная длина типа данных не такая большая, как BFILE. Но в практических приложениях размера байты достаточно.



3. Oracle не рекомендует использовать большие типы данных

3.1, тип LONG RAW

Oracle long raw в основном используется при передаче данных между различными системами, и этот тип данных Oracle не рекомендует. Oracle рекомендует использовать Blob вместо Long raw, а данные Long raw можно напрямую преобразовать в тип Blob. Максимальный диапазон длинного сырья составляет 2G.

В PostgreSQL соответствующий тип - bytea.

3.2, ДЛИННЫЙ тип

Тип Oracle Long - это тип данных, который Oracle не рекомендует. Есть много ограничений на его использование. Например, в таблице может быть только одно поле, которое нельзя использовать там, где есть условия и так далее. Oracle сохраняет его только для совместимости с предыдущими версиями. Максимальный диапазон типа Long составляет 2 ^ 31 -1 (то есть 2G-1) байтов.

В PostgreSQL соответствующим полем типа Long является текст. Хотя максимальное количество символов меньше, чем у типа Long, но максимальной длины текста 1G достаточно в практических приложениях.



Хотя в Oracle есть более крупные типы данных, в PostgreSQL текст и bytea в основном равны двум, что соответствует текстовой информации и двоичной информации соответственно. Во время миграции текстовая информация преобразуется в текст, а двоичная информация преобразуется в байты. Для специальных типов формата BFILE может быть написан дополнительный код для чтения данных из файла и преобразования его в bytea. Это может завершить миграцию больших типов данных.

Интеллектуальная рекомендация

совместный запрос mysql с тремя таблицами (таблица сотрудников, таблица отделов, таблица зарплат)

1. Краткое изложение проблемы: (внизу есть инструкция по созданию таблицы, копирование можно непосредственно практиковать с помощью (mysql)) Найдите отделы, в которых есть хотя бы один сотрудник. Отоб.


[Загрузчик классов обучения JVM] Третий день пользовательского контента, связанного с загрузчиком классов


IP, сеанс и cookie

Типы данных MySQL

Типы данных MySQL разделяются на следующие типы:

Типы данных Oracle

Типы данных Oracle разделяются на следующие группы:

ANSI SQL стандарт распознает только текст и число, в то время как большинство коммерческих программ используют другие специальные типы, такие как DATЕ и TIME — фактически почти стандартные типы. Некоторые пакеты также поддерживают такие типы, как, например, MONEY и BINARY. Типы данных, распознаваемые с помощью ANSI, состоят из строк символов и различных типов чисел, которые могут классифицироваться как точные числа и приблизительные числа.

CHARACTER(length) определяет спецификацию строк символов, где length задает длину строк заданного типа. Значения этого типа должны быть заключены в одиночные кавычки. Большинство реализаций поддерживают строки переменной длины для типов данных VARCHAR и LONG VARCHAR (или просто LONG).

В то время, как поле типа CHAR всегда может распределить память для максимального числа символов, которое может сохраняться в поле, поле VARCHAR при любом количестве символов может распределить только определенное количество памяти, чтобы сохранить фактическое содержание поля, хотя SQL может установить некоторое дополнительное пространство памяти, чтобы следить за текущей длиной поля. Поле VARCHAR может быть любой длины, включая реализационно-определяемый максимум. Этот максимум может меняться от 254 до 2048 символов для VARCHAR и до 16000 символов для LONG. LONG обычно используется для текста пояснительного характера или для данных, которые не могут легко сжиматься в простые значения полей; VARCHAR может использоваться для любой текстовой строки, чья длина может меняться.

Извлечение и модифицирование полей VARCHAR — более сложный, и, следовательно, более медленный процесс, чем извлечение и модифицирование полей CHAR. Кроме того, некоторое количество памяти VARCHAR, остается всегда неиспользованной для гарантии вмещения всей длины строки. При использовании таких типов следует предусматривать возможность полей к объединению с другими полями.

Точные числовые типы — это числа, с десятичной точкой или без десятичной точки, которые могут представляться в виде [+|-]<целое без знака>[.<целое без знака>] и специфицироваться как:

DECIMAL(precision [, scale]) — аргумент размера имеет две части: точность и масштаб. Масштаб не может превышать точность. Точность указывает сколько значащих цифр имеет число. Масштаб указывает максимальное число цифр справа от десятичной точки. Масштаб = нулю делает поле эквивалентом целого числа.

NUMERIC(precision [, scale]) — такое же как DECIMAL за исключением того, что максимальное десятичное не может превышать аргумента точности

INTEGER — число без десятичной точки. Эквивалентно DECIMAL, но без цифр справа от десятичной точки, т.е. с масштабом равным 0. Аргумент размера не используется (он автоматически устанавливается в реализационно-зависимое значение).

SMALLINT — такое же как INTEGER, за исключением того, что, в зависимости от реализации, размер по умолчанию может ( или не может ) быть меньше чем INTEGER.

Приблизительные числовые типы — это числа в показательной (экспоненциальной по основанию 10) записи, представляемые как <литеральное значение точного числа>Е<целое со знаком> и специфицирущиеся следующим образом:

FLOAT[(precision)] — число с плавающей запятой. Аргумент размера состоит из одного числа, определяющего минимальную точность.

REAL — такое же как FLOAT, за исключением того, что никакого аргумента размера не используется. Точность устанавливается реализационно-зависимой по умолчанию.

DOUBLE PRECISION — такое же как REAL, за исключением того, что реализационно-определяемая точность для DOUBLE PRECISION должна превышать реализационно-определяемую точность REAL.

Типы данных Access

Типы данных Access разделяются на следующие группы:

Типы данных SQL Server

Microsoft SQL Server поддерживает большинство типов данных SQL 2003. Также SQL Server поддерживает дополнительные типы данных, используемые для однозначной идентификации строк данных в таблице и на многих серверах, например UNIQUEIDENTIFIER , что соответствует аппаратной философии «роста в ширину», исповедуемой Microsoft (т. е. внедрение базы на множестве серверов на платформах Intel), вместо «роста в высоту» (т. е. внедрение на одном огромном мощном UNIX-сервере или Windows Data Center Server).

Типы данных, используемые в SQL Server:

Типы данных PostgreSQL

База данных PostgreSQL поддерживает большинство типов данных SQL2003 плюс огромный набор типов для хранения пространственных и геометрических данных. PostgreSQL может похвастаться богатым набором операторов и функций, специально предназначенных для геометрических типов данных. Сюда входят такие средства, как поворот, поиск пересечений и масштабирование. В PostgreSQL также есть поддержка дополнительных версий существующих типов данных, которые характерны тем, что занимают меньше места на диске, чем соответствующие исходные версии. Например, в PostgreSQL предлагается несколько вариантов типа INTEGER для хранения больших и небольших чисел, соответственно занимающих больше или меньше места.

В этой главе мы обсудим типы данных, используемые в PostgreSQL. При создании таблицы для каждого столбца вы указываете тип данных, т. Е. Какой тип данных вы хотите хранить в полях таблицы.

Согласованность. Операции со столбцами одного типа данных дают согласованные результаты и обычно являются самыми быстрыми.

Согласованность. Операции со столбцами одного типа данных дают согласованные результаты и обычно являются самыми быстрыми.

PostgreSQL поддерживает широкий набор типов данных. Кроме того, пользователи могут создавать свои собственные типы данных с помощью команды CREATE TYPE SQL. В PostgreSQL существуют разные категории типов данных. Они обсуждаются ниже.

Числовые Типы

Числовые типы состоят из двухбайтовых, четырехбайтовых и восьмибайтовых целых чисел, четырехбайтовых и восьмибайтовых чисел с плавающей запятой и десятичных дробей с выбираемой точностью. В следующей таблице перечислены доступные типы.

название Размер хранилища Описание Спектр
SMALLINT 2 байта целое число малого диапазона От -32768 до +32767
целое число 4 байта типичный выбор для целого числа От -2147483648 до +2147483647
BIGINT 8 байт большое целое число От -9223372036854775808 до 9223372036854775807
десятичный переменная указанная пользователем точность, точная до 131072 цифр перед десятичной точкой; до 16383 знаков после запятой
числовой переменная указанная пользователем точность, точная до 131072 цифр перед десятичной точкой; до 16383 знаков после запятой
реальный 4 байта переменная точность, неточная Точность 6 десятичных цифр
двойная точность 8 байт переменная точность, неточная Точность 15 десятичных цифр
smallserial 2 байта небольшое автоинкрементное целое число От 1 до 32767
последовательный 4 байта автоинкрементное целое число 1 до 2147483647
bigserial 8 байт большое автоинкрементное целое число 1 до 9223372036854775807

Денежные Типы

Тип money хранит сумму в валюте с фиксированной дробной точностью. Значения типов данных numeric, int и bigint могут быть приведены к деньгам . Использование чисел с плавающей точкой не рекомендуется для обработки денег из-за возможной ошибки округления.

название Размер хранилища Описание Спектр
Деньги 8 байт сумма в валюте От -92233720368547758.08 до +92233720368547758.07

Типы персонажей

В приведенной ниже таблице перечислены типы символов общего назначения, доступные в PostgreSQL.

различные символы (n), varchar (n)

переменная длина с ограничением

символ (n), символ (n)

фиксированная длина, с подкладкой

переменная неограниченная длина

различные символы (n), varchar (n)

переменная длина с ограничением

символ (n), символ (n)

фиксированная длина, с подкладкой

переменная неограниченная длина

Двоичные типы данных

Тип данных bytea позволяет хранить двоичные строки, как показано в таблице ниже.

название Размер хранилища Описание
BYTEA 1 или 4 байта плюс фактическая двоичная строка двоичная строка переменной длины

Типы даты / времени

название Размер хранилища Описание Низкое значение Высокое значение
отметка времени [(p)] [без часового пояса] 8 байт дата и время (без часового пояса) 4713 г. до н.э. 294276 н.э.
TIMESTAMPTZ 8 байт дата и время с часовым поясом 4713 г. до н.э. 294276 н.э.
Дата 4 байта дата (без времени суток) 4713 г. до н.э. 5874897 н.э.
время [(p)] [без часового пояса] 8 байт время суток (без даты) 00:00:00 24:00:00
время [(p)] с часовым поясом 12 байт только время суток, с часовым поясом 00: 00: 00 + 1459 24: 00: 00-1459
интервал [поля] [(p)] 12 байт интервал времени -178000000 лет 178000000 лет

Логический тип

PostgreSQL предоставляет стандартный тип SQL Boolean. Тип данных Boolean может иметь состояния true , false и третье состояние неизвестно , которое представлено нулевым значением SQL.

название Размер хранилища Описание
логический 1 байт состояние истинного или ложного

Перечислимый тип

Перечисленные, однажды созданные, могут использоваться как любые другие типы.

Геометрический тип

Геометрические типы данных представляют собой двумерные пространственные объекты. Самый фундаментальный тип, точка, формирует основу для всех других типов.

Тип сетевого адреса

PostgreSQL предлагает типы данных для хранения IPv4, IPv6 и MAC-адресов. Лучше использовать эти типы вместо обычных текстовых типов для хранения сетевых адресов, потому что эти типы предлагают проверку ошибок ввода и специализированные операторы и функции.

название Размер хранилища Описание
CIDR 7 или 19 байт Сети IPv4 и IPv6
инет 7 или 19 байт IPv4 и IPv6 хосты и сети
MacAddr 6 байт MAC-адреса

Тип битовой строки

Тип текстового поиска

Этот тип поддерживает полнотекстовый поиск, который представляет собой поиск в наборе документов на естественном языке для поиска документов, которые лучше всего соответствуют запросу. Для этого есть два типа данных:

поисковый вектор

Это отсортированный список отдельных слов, которые были нормализованы для объединения различных вариантов одного и того же слова, называемые «лексемы».

Это хранит лексемы, которые нужно искать, и объединяет их, соблюдая логические операторы & (AND), | (Или) и! (НЕ). Круглые скобки могут быть использованы для принудительной группировки операторов.

поисковый вектор

Это отсортированный список отдельных слов, которые были нормализованы для объединения различных вариантов одного и того же слова, называемые «лексемы».

Это хранит лексемы, которые нужно искать, и объединяет их, соблюдая логические операторы & (AND), | (Или) и! (НЕ). Круглые скобки могут быть использованы для принудительной группировки операторов.

Андрей Волков

типы данных PostgreSQL

До этого момента разговор о типах данных PostgreSQL велся в общих словах (см. вот этот мой блог). Из схемы видно, что использованные типы (далеко не все из имею­щихся в PostgreSQL) - это скорее базовые типы, известные средству проектирования, которые могут быть преобразованы в реальные типы данных PostgreSQL при создании реальных таблиц.

Перед нами осталось еще одно препятствие, преодолением которого мы пока не занимались, - генерирование уникальных ключей таких полей, как customer_id и item_id . Вы, конечно же, помните, что каждая строка таблицы должна быть однозначно идентифицируемой и что в тех случаях, когда нет очевидного набора столбцов, который мог быть использоваться для достижения этой цели, добавляется дополнитель­ный столбец, столбец с уникальным идентификатором. На ум прихо­дит поле целых чисел или символьное поле, при этом, добавляя каж­дую новую строку, необходимо генерировать новое уникальное значе­ние для столбца.

Поскольку необходимость введения дополнительного уникального столбца встречается при проектировании баз данных повсеместно, су­ществует и встроенное решение, новый тип данных SERIAL . Этот специ­альный тип представляет собой целое число, автоматически увеличи­вающееся при добавлении строки в таблицу и устанавливающее новое уникальное значение при добавлении каждой строки. Если новая стро­ка вводится в таблицу, имеющую столбец типа SERIAL , не нужно указывать никакого значения для этого столбца, СУБД сама автоматичес­ки присвоит следующее значение.

В большинстве баз данных при присваивании последовательных вели­чин удаленные строки не учитываются. Присваиваемое число просто увеличивается для каждой новой строки. Средство проектирования, с помощью которого были выполнены представленные выше диаграм­мы, показывает поля типа SERIAL как INTEGER , потому что этот тип яв­ляется базовым.

Символьный массив фиксированного размера, размер указыва­ется в скобках после названия типа. В столбцах данного типа PostgreSQL всегда будет сохранять ровно указанное количество символов. Если CHAR(256) служит для хранения одного символа, в базе данных будет занято как минимум 256 байт, которые и бу­дут возвращены при извлечении данных.

Это также символьный массив, но (как понятно из названия) пе­ременной длины, и обычно место, занимаемое в базе данных, практически совпадает с фактическим размером сохраняемых данных. При обращении к полю VARCHAR возвращается то коли­чество символов, которое и было сохранено. В скобках после на­звания типа указывается максимально возможная длина. Ес­тественно возникает вопрос о том, зачем нужны оба эти типа, почему нельзя ограничиться одним VARCHAR ? Дело в производи­тельности. Записи фиксированной длины база данных может об­рабатывать гораздо быстрее, чем записи переменной длины. По­этому если, например, известно, что размер данных в столбце не больше четырех символов, то лучше всегда сохранять четыре символа, а не заставлять базу данных каждый раз определять размер, т. к. места выиграно немного, а вот производительность для переменной длины обычно уменьшается.

Позволяет хранить данные о годе, месяце и дне. Конечно же, есть и другие родственные типы, позволяющие хранить данные о времени (вместе с информацией о дате или без). Вернемся к этому позже.

Возможность хранить числа с указанным количеством разрядов (первое число в скобках) и фиксированным количеством разря­дов после запятой (второе число в скобках). Так, NUMERIC(7,2) со­хранит ровно семь разрядов, два из них - после запятой.

Далее в моем блоге будут рассмотрены и другие типы данных PostgreSQL, при этом окажется, что какие-то из них больше подходят для хране­ния денежных значений, чем NUMERIC , поскольку несмотря на то, что использовать NUMERIC весьма удобно, это не самый эффективный способ хранения чисел с плавающей запятой в PostgreSQL.

Значение NULL

Новичков в теории баз данных может смутить такое понятие, как NULL . В терминах баз данных NULL обычно означает, что величина не извест­на (хотя существуют еще одна-две разновидности определения с едва уловимыми отличиями).

Посмотрим на таблицу orderinfo, в ней содержится столбец дат заказа, а также столбец дат отгрузки, оба имеют тип DATE . Как следует посту­пить, если заказ уже получен, но еще не отправлен? Что сохранить в столбце дат отгрузки? Можно сохранить специальную дату, сигналь­ную величину (sentinel value), которая указывала бы, что заказ еще не отправлен. В системах UNIX можно использовать в качестве такой да­ты 1 января 1970 года, т. к. именно с этого дня системы UNIX ведут свой отсчет. В любом случае эта дата должна предшествовать дате соз­дания базы данных, тогда будет очевидно, что дата специальная, в на­шем же случае она будет иметь смысл «еще не отправлено».

Понятно, что такое решение далеко от идеала. Наличие специальных величин, разбросанных по таблицам, свидетельствует о неудачности проекта и часто приводит к ошибкам. Например, если к работе над проектом подключается новый программист, который не знает о при­сутствии специальных дат, он может заняться подсчетом того, сколь­ко времени в среднем проходит между размещением заказа и его от­грузкой, и получить весьма неожиданные результаты (если в несколь­ких случаях даты отправления были установлены как предшествую­щие дате размещения заказа).

К счастью, во всех реляционных базах данных существует специаль­ная величина под названием NULL , которая обычно означает «в настоя­щий момент неизвестно». Обратите внимание, что это не ноль, не пус­тая строка и не нечто, что могло бы быть представлено в поле некоторо­го типа. «Неизвестное» очень сильно отличается от 0 и пустой строки.

Чрезвычайно важно присматривать за такими величинами, потому что они могут появляться в произвольных местах, причиняя неудоб­ства. В таблице orderinfo можно установить дату отправки в NULL (до того, как заказ отгружен), значение «в настоящий момент неизвест­но» полностью соответствует нашей ситуации.

Существует и несколько другое значение NULL (оно не так распростра­нено, как первое) - «не относится» (not relevant) к данной строке. Предположим, например, что проводится опрос группы людей, при этом один из вопросов касается цвета очков. Но для тех, кто очки не носит, этот вопрос, естественно, не имеет никакого смысла. В таком случае можно использовать NULL в соответствующем столбце, для того чтобы показать, что информация не имеет отношения к данной кон­кретной строке.

Проверка на NULL

Одним из свойств NULL является следующее: при сравнении двух значе­ний NULL результатом всегда будет «не равны». Это может удивить, но подумайте, ведь NULL - это неизвестное, поэтому абсолютно логично, что при сравнении двух неизвестных оказывается, что они не равны.

В SQL предоставлена специальная возможность проверки величин на значение NULL, если необходимо найти их и проверить, то задается во­прос 'IS NULL'.

Поведение величин NULL может иметь свои особенности, поэтому при проектировании таблицы можно указать, что в некоторых столбцах не могут храниться NULL. Обычно удобно бывает сказать, что для столбцов будет выполняться условие NOT NULL', - для уверенности в том, что NULL там не появится (например, в столбце, представляющем собой первичный ключ). Некоторые проектировщики баз данных пропаган­дируют практически полную отмену использования величин NULL, но все же в них есть и определенная польза. Поэтому, как правило, под­держивается применение величин NULL в отдельных столбцах при на­личии реальной потребности в значениях, которые не определены.

Читайте также: