П.4.1. Перечень типов данных
Символьные типы
· character(n), char(n) – символьная строка фиксированной длины, дополненная пробелами до n символов. Занимает в памяти (4 + n) байт;
· character varying(n), varchar(n) – символьная строка переменной длины, максимальный размер равен n. Занимает в памяти до (4 + n) байт;
· text – строка переменной длины, максимальный размер не ограничен.
Числовые типы
· integer, int, int4 – целые числа в интервале от –2 147 483 648 до 2 147 483 647. Занимает в памяти 4 байта;
· smallint, int2 – целые числа в интервале от –32 768 до 32 767. Занимает в памяти 2 байта;
· bigint, int8 – целые числа в интервале от –9 223 372 036 854 775 807 до 9 223 372 036 854 775 807. Занимает в памяти 8 байт;
· numeric(p,s), decimal(p,s) – целые и вещественные числа из p цифр (всего) и s цифр в дробной части. Тип numeric (также называемый типом decimal) предназначен для представления сколь угодно больших или малых значений с фиксированной точностью, задаваемой пользователем. В круглых скобках указываются два значения: точность и масштаб. Точность определяет максимальное количество цифр (включая цифры в дробной части), а масштаб определяет количество цифр только в дробной части. Если параметры не заданы, по умолчанию точность равна 30, а масштаб – 6. Максимальная точность (а следовательно, и максимальный размер), задаваемая таким образом, равна 1000. На практике 1000 цифр обычно вполне достаточно. В отличие от вещественных чисел, при попытке вставить в поле numeric число, не входящее в интервал допустимых значений, происходит ошибка переполнения. В остальном допускается вставка любого числа, не нарушающего заданной точности. Например, в поле numeric(11,6) можно безопасно сохранить значение 9.99999999 с лишними цифрами в дробной части (хотя оно будет округлено до 10.000000). С другой стороны, попытка сохранения числа 99999.99999999 завершается неудачей;
· real, float4 – вещественные числа, 6 значащих цифр, неограниченный размер (с ограниченной точностью);
· double precision, float8, float – вещественные числа, 15 значащих цифр, неограниченный размер (с ограниченной точностью). Занимает в памяти 8 байт;
· money – вещественные числа с двумя цифрами в дробной части в интервале от –21 474 836.48 до 21 474 836.47 для представления денежных величин. Занимает в памяти 4 байта. Тип считается устаревшим и использовать его не рекомендуется. Вместо типа money следует использовать тип numeric с масштабом 2 и точностью, достаточной для представления максимальной необходимой величины (включая 2 цифры для дробной части);
· serial – целые числа в интервале от 0 до 2 147 483 647 с автоматическим приращением. Занимает в памяти 4 байта. Хотя тип serial не относится к числу стандартных типов, он часто используется при создании в таблице полей-идентификаторов, содержащих уникальное значение для каждой записи. В типе serial объединены функциональные возможности 4-байтового типа integer, индекса и последовательности.
Логические и двоичные типы данных
· boolean, bool – отдельная логическая величина (true или false);
· bit(n) – битовая последовательность фиксированной длины (ровно n бит);
· bit varying(n), varbit(n) – битовая последовательность переменной длины (до n бит).
Типы даты и времени
· date – календарная дата (год, месяц и день) от 4 713 г. до н.э. до 32 767 г. н.э. Занимает в памяти 4 байта;
· time – время суток без часового пояса от 00:00:00 до 23:59:59.99. Занимает в памяти 4 байта;
· time with time zone – время суток с часовым поясом от 00:00:00+12 до 23:59:59.99–12. Занимает в памяти 4 байта;
· timestamp with time zone, timestamp – календарная дата и время с часовым поясом от 1 903 г. н.э. до 2 037 г. н.э. Занимает в памяти 8 байт.
Встроенные константы даты и времени:
· current – текущее время обработки транзакции, не привязывается к конкретному времени и возвращает текущее системное время;
· now – фиксированное время обработки транзакции;
· today – полночь текущего дня;
· tomorrow – полночь следующего дня;
· yesterday – полночь предыдущего дня;
· infinity – абстрактная константа, более "поздняя" по сравнению со всеми допустимыми значениями даты и времени;
· -infinity – абстрактная константа, более "ранняя" по сравнению со всеми допустимыми значениями даты и времени;
· epoch – 1970-01-01 00:00:00+00 ("день рождения" Unix).
Интервальный тип
· interval – фиксированный интервал времени. Сам по себе тип interval представляет лишь количественную величину, не связанную с определенными начальным или конечным моментом. Интервалы часто используются в сочетании с типами даты и времени для вычисления новой величины посредством сложения или вычитания. Кроме того, они могут пригодиться для быстрого вычисления точного промежутка времени между двумя датами или моментами времени, для чего одна величина вычитается из другой.
Синтаксис определения интервалов:
длина1 единица1 [длина 2 единица2 ...] [ago]
Здесь:
· длина – продолжительность интервала, заданная в виде целого или вещественного (для микросекунд) числа. Интерпретация числа определяется следующим параметром;
· единица – единица, в которой измеряется заданный интервал. Разрешены следующие ключевые слова: second, minute, hour, day, week, month, year, decade, century, millenium. Также допускаются сокращения (любой длины при условии однозначной интерпретации) и формы множественного числа;
· ago – необязательное ключевое слово указывает, что описываемый период времени предшествует некоторому моменту, а не следует после него.
Примеры использования значений типа интервал:
date('1980-06-25') + interval('21 years 8 days')
date('1980-06-25') - interval('21 years 8 days ago')
Геометрические типы
· box – прямоугольник на плоскости;
· line – бесконечная линия на плоскости;
· lseg – отрезок на плоскости;
· circle – круг с заданным центром и радиусом;
· path – замкнутая или разомкнутая геометрическая фигура на плоскости;
· point – точка на плоскости;
· polygon – замкнутый многоугольник на плоскости.
Сетевые типы
· cidr – спецификация сети IP;
· inet – сетевой IP-адрес с необязательными битами подсети;
· macaddr – МАС-адрес (например, аппаратный адрес адаптера Ethernet).
Системные типы
· oid – идентификатор объекта (записи);
· xid – идентификатор транзакции.
П.4.2. Преобразование типов
В PostgreSQL поддерживаются три отдельных варианта синтаксиса преобразования (приведения типов), то есть механизма приведения данных от одного типа к другому. В команде SQL преобразование типов позволяет явно задать тип создаваемой константы (вместо его косвенного определения по правилам языка).
Приведение строковой константы к другому типу может выполняться любым из трех способов:
· тип 'значение'
· 'значение' :: тип
· CAST ('значение' AS тип)
Числовые константы преобразуются в символьную строку следующими способами:
· значение :: тип
· CAST (значение AS тип)
Здесь значение представляет константу, тип которой требуется изменить, а тип – новый тип этой константы.
Преобразование к другому типу данных не ограничивается одними константами. Поля набора данных, возвращаемого запросом SQL, также могут преобразовываться к другому типу, при этому используются следующие формы синтаксиса:
· идентификатор :: тип
· CAST (идентификатор AS тип)
Следует учесть, что не каждый тип данных может быть приведен к любому другому типу. Например, не существует осмысленного преобразования символьной строки abcd в двоичную последовательность типа bit. Недопустимые попытки преобразования приводят к ошибкам PostgreSQL.
Кроме синтаксических форм преобразования типа существуют некоторые функции, позволяющие добиться практически того же результата. Имена этих функций часто совпадают с именами итоговых типов (например, text()), хотя существуют и узкоспециализированные варианты (например, bitfromint4()).
П.4.3. Константы
При работе с базами данных многие объекты хранятся на диске, а для обращения к ним используются идентификаторы (имена таблиц, полей и функций). Однако неизбежно настанет момент, когда в систему потребуется передать новые данные – например, при вставке новых записей, при формировании секций с критериями удаления или модификации или при вычислениях на базе существующих записей. Такие данные передаются в виде констант, также иногда называемых "литералами". Константы предназначены для "буквального" представления данных в командах SQL (вместо ссылки на них по идентификатору).
Константы с косвенной типизацией автоматически распознаются модулем лексического разбора PostgreSQL по их синтаксису. В PostgreSQL поддерживаются пять вариантов констант с косвенной типизацией:
· строковые константы;
· битовые последовательности;
· целочисленные константы;
· вещественные константы;
· логические константы.
Строковые константы
Строковая константа представляет собой произвольную последовательность символов, заключенную в апострофы, например 'Louisa May'. Этот факт порождает следующую семантическую проблему: если в самой последовательности символов встречается апостроф, граница строковой константы будет определена неверно. Чтобы экранировать апостроф в строке (то есть обеспечить его интерпретацию как литерал), следует поставить два апострофа подряд, например 'PostgreSQL''s great!'. PostgreSQL также позволяет экранировать апострофы обратной косой чертой в стиле языка С, например 'PostgreSQL\'s great!'.
Битовые последовательности
Битовые последовательности предназначены для представления двоичных величин в виде произвольной последовательности нулей и единиц. Как и строковые константы, битовые последовательности заключаются в апострофы, но начинаются обязательно с префикса В (в верхнем или нижнем регистре), например B'00000000'. По наличию этого символа PostgreSQL определяет, что строка является битовой последовательностью, а не обычной символьной строкой.
В соответствии с синтаксисом PostgreSQL открывающий апостроф должен следовать сразу же после префикса В, а битовая последовательность не может содержать других символов, кроме 0 и 1.
Целочисленные константы
В PostgreSQL целочисленной константой считается любая лексема, состоящая из цифр (без десятичной точки) и не заключенная в апострофы.
Вещественные константы
Вещественные константы используются для представления не только целых, но и дробных величин.
Существуют несколько форматов представления вещественных констант:
· ##.##
· ##e[+-]##
· [##].##[e[+-]##]
· ##.[##][e[+-]##]
Запись ## означает одну или несколько цифр.
В первом формате до десятичной точки и после нее должна стоять хотя бы одна цифра. Это необходимо для того, чтобы модуль лексического анализа PostgreSQL опознал значение как вещественную, а не целочисленную константу. В других форматах хотя бы одна цифра должна стоять до или после экспоненты, обозначенной буквой е. Наличие десятичной точки и/или экспоненты отличает вещественные константы от целочисленных.
Логические константы
Допустимые обозначения логических констант: true, false, 't', 'f', 'true', 'false', 'y', 'n', 'yes', 'no', '1', '0'.
П.5. Операторы
В PostgreSQL поддерживаются стандартные операторы и функции SQL, определенные в стандарте ANSI/ISO, – математические операторы, основные функции форматирования текста, выделение компонентов даты/времени и т.д. Кроме того, в PostgreSQL реализованы многочисленные нестандартные расширения, в том числе операторы поиска по регулярным выражениям (здесь не рассматриваются) и универсальная функция форматирования данных to_char().
Операторы – это лексемы, предназначенные для выполнения операций с константами и идентификаторами и возвращающие результаты этих операций. Некоторые ключевые слова SQL тоже считаются операторами из-за воздействия на данные в командах SQL.
Действия, выполняемые оператором, зависят от контекста его применения. Область применения операторов чрезвычайно широка, от выполнения математических операций и конкатенации строк до разнообразных сравнений.
Дата: 2019-02-19, просмотров: 412.