Sql

Postgresql типы данных: PostgreSQL: Documentation: 9.3: Data Types

Содержание

PostgreSQL типы данных — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Ниже приведен список типов данных, доступных в PostgreSQL, который включает строковые, числовые и тип даты / время.

Типы данных String

Ниже приведены Типы данных String в PostgreSQL :

Синтаксис типов данныхПояснение
char (size)Где size — это количество символов для хранения. Строка фиксированной длины. Пробел дополняется справа до size символов.
character (size)Где size — это количество символов для хранения. Строка фиксированной длины. Пробел дополняется справа до size символов.
varсимвол (size)Где size — это количество символов для хранения. Строка переменной длины.
character varying(size)Где size — это количество символов для хранения. Строка переменной длины.
textСтрока переменной длины.

Числовые типы данных

Ниже приведены числовые типы данных в PostgreSQL:

Синтаксис типов данныхПояснение
bit(size)Битовая строка фиксированной длины,
 где size — длина строки битов.
varbit(size) bit varying(size)Битовая строка переменной длины,
 где size — длина строки битов.
smallintЭквивалентно int2.
  2-байтовое целое число со знаком.
intЭквивалентно int4.
4-байтовое целое число со знаком.
integerЭквивалентно int4.
4-байтовое целое число со знаком.
bigintБольшое целочисленное значение, эквивалентное int8.
8-байтовое целое число со знаком.
smallserialНебольшое целочисленное значение с автоинкрементом, эквивалентное serial2.
2-байтовое целое число со знаком, автоинкрементное.
serialАвтоинкрементное целочисленное значение, эквивалентное serial4.
4-байтовое целое число со знаком, автоинкрементное.
bigserialБольшое автоинкрементное целочисленное значение, эквивалентное serial8.
8-байтовое целое число со знаком, автоинкрементное.
numeric(m,d)Где m — это общее количество цифр, а d — это число после десятичной дроби.
double precision8 байт, двойная точность, число с плавающей точкой
real4-байтовое число одинарной точности с плавающей точкой
moneyСтоимость валюты.
boolЛогический логический тип данных — true или false
booleanЛогический логический тип данных — true или false

Дата / Время Типы данных

Ниже приведены дата / время типы данных в PostgreSQL:

Синтаксис типов данныхПояснение
dateОтображается как «YYYY-MM-DD».
timestampОтображается как «YYYY-MM-DD HH:MM:SS».
timestamp without time zoneОтображается как «YYYY-MM-DD HH:MM:SS».
timestamp with time zoneОтображается как ‘YYYY-MM-DD HH:MM:SS-TZ’.
Эквивалентно timestamptz.
timeОтображается как ‘HH:MM:SS’ без часового пояса.
time without time zoneОтображается как ‘HH:MM:SS’ без часового пояса.
time with time zoneОтображается как ‘HH:MM:SS-TZ’ с часовым поясом.
Эквивалентно timetz.
Рубрика: Программирование PostgreSQL | Permalink

Выбор типа данных для строк/текста (char vs varchar vs text) — PostgreSQL Cook Book

В PostgreSQL есть три типа данных для хранения текстовой информации:

  • character(n), char(n) — текст фиксированной длины (строка всегда имеет строго заданный размер)
  • character varying(n), varchar(n) — текст с ограничением по длине (максимальная длина строка может быть ограничена)
  • text — текст неограниченной длины

Физически максимальный размер любых строк в PostgreSQL ограничен одним гигабайтом (1GB).

Примечание

Логическое ограничение на максимальный размер строки (char(n), varchar(n), где n — логическое ограничение), задаваемое пользователем для конкретного поля, лимитирует количество символов в строке, а не длину строки в байтах. Поэтому, несмотря на физический лимит на максимальный размер строки в 1GB, реальное максимальное количество символов в строке может быть меньше, так как различные кодировки символов могут использовать больше одного байта для представления одного символа.

CHAR(N)

Этот тип всегда имеет ограничение по длине. Даже, если длина не задана (char), то подразумевается, что она равна единице, то есть char ~ char(1).

Тип имеет одну особенность, которая выделяет есть среди других текстовых типов. Так как поля с этим типом имеют фиксированный размер (не больше / не меньше заданного), то, при сохранении в таблицу у всех строк, длина которых меньше этого размера, оставшееся пустое место в конце строки заполняется пробелами. Поэтому при сохранении значения ‘123’ в поле с типом char(6) в таблицу реально сохранится ‘123___’. Это может стать неприятным сюрпризом.

При операциях сравнения полей с типом char(n) пробелы в конце строки игнорируются.

denis=# SELECT '123   '::char(6) = '123';
 ?column?
----------
 t
(1 row)

VARCHAR

Тип без заданной длины интерпретируется PostgreSQL, как безразмерная строка эквивалентная типу text

. При попытке записать в текстовое поле ограниченной длины значение, которое превышает заданные размеры, генерируется ошибка. Строка этого типа хранится в базе данных без изменений (в отличии от char(n)), поэтому нагрузка на процессор при обработке varchar-строк немного меньше, чем при работе с char(n).

TEXT

Этот тип позволяет сохранять строки размером до одного гигабайта. Поэтому его часто используют для хранения текстов, html-страниц и прочей тестовой информации размер которой превышает одну строку текста.

Предупреждение

Тип text является специфическим типом PostgreSQL, поэтому при разработке приложений для работы с разными СУБД, лучше использовать безразмерный varchar для лучшей переносимости бизнес-логики.

Резюме

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

Для хранения строк довольно комфортным выбором будет тип varchar без ограничения по длине (если нет жесткого условия, которое не в коем случае нельзя нарушить). Тип char имеет ряд специфических особенностей, которые в большинстве случаев будут только мешать при работе с базой данных. Тип text является специфическим для PostrgeSQL и не имеет никаких преимуществ/недостатком перед типом varchar без ограничения по длине.postgres postgres 15551 0.0 0.1 57536 7132 pts/0 S 18:02 0:00 postgres -i postgres 15554 0.0 0.0 57536 1184 ? Ss 18:02 0:00 postgres: writer process postgres 15555 0.0 0.0 57536 916 ? Ss 18:02 0:00 postgres: checkpointer process postgres 15556 0.0 0.0 57536 916 ? Ss 18:02 0:00 postgres: wal writer process postgres 15557 0.0 0.0 58504 2244 ? Ss 18:02 0:00 postgres: autovacuum launcher process postgres 15558 0.0 0.0 17512 1068 ? Ss 18:02 0:00 postgres: stats collector process postgres 15582 0.0 0.0 58772 3080 ? Ss 18:04 0:00 postgres: joe runbug 127.0.0.1 idle postgres 15606 0.0 0.0 58772 3052 ? Ss 18:07 0:00 postgres: tgl regression [local] SELECT waiting postgres 15610 0.0 0.0 58772 3056 ? Ss 18:07 0:00 postgres: tgl regression [local] idle in transaction

(Формат вызова ps, а так же детали отображаемой информации зависят от платформы. Это пример для одной из последних Linux систем.) Первым здесь перечислен главный процесс сервера. Для этого процесса отображены аргументы команды, которые использовались при его запуске. Следующие пять процессов — это фоновые рабочие процессы, которые были автоматически запущены процессом сервера. (Процесса «stats collector» в этом списке не будет, если запуск сборщика статистики отключён в системе; аналогично может быть отключён и процесс «autovacuum launcher» — фоновый процесс автоочистки.) Во всех остальных строках перечислены серверные процессы, каждый из которых обрабатывает одно клиентское подключение. Командная строка каждого такого процесса имеет следующий формат:

postgres: user database host activity

Пользователь, СУБД и компьютер (клиента) остаются неизменными на протяжении всего клиентского подключения, а индикатор деятельности меняется. Возможные виды деятельности: idle (т. е. ожидание команды клиента), idle in transaction (ожидание клиента внутри блока BEGIN) или название типа команды, например, SELECT. Кроме того, если в настоящий момент серверный процесс ожидает высвобождения блокировки, которую держит другая сессия, то к виду деятельности добавляется waiting. В приведённом выше примере мы видим, что процесс 15606 ожидает, когда процесс 15610 завершит свою транзакцию и, следовательно, освободит какую-то блокировку. (Процесс 15610 является блокирующим, поскольку никаких других активных сессий нет. В более сложных случаях может потребоваться обращение к системному представлению 

pg_locks, для того чтобы определить, кто кого блокирует.)

Если установлено значение cluster_name, имя кластера также будет показываться в выводе команды ps:

$ psql -c ''SHOW cluster_name''
 cluster_name
--------------
 server1
(1 row)

$ ps aux|grep server1
postgres   27093  0.0  0.0  30096  2752 ?        Ss   11:34   0:00 postgres: server1: writer process
...

Если параметр update_process_title был отключён, то индикатор деятельности не обновляется; название процесса устанавливается только один раз при запуске нового процесса. На некоторых платформах это позволяет значительно сократить накладные расходы при выполнении команды; на других платформах этот выигрыш может быть незначителен.

Подсказка

В Solaris требуется особый подход. Следует использовать /usr/ucb/psвместо /bin/ps. Также следует использовать два флага w, а не один. Кроме того, при выводе статусов команд с помощью ps статус для исходной команды postgres должен отображаться в сокращённом формате для каждого серверного процесса. Если вы не сделаете все три вещи, то вывод ps для каждого серверного процесса будет исходной командной строкой postgres.

28.2. Сборщик статистики

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

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

28.2.1. Конфигурация системы сбора статистики

Поскольку сбор статистики несколько увеличивает накладные расходы при выполнении запроса, есть возможность настроить СУБД так, чтобы выполнять или не выполнять сбор статистической информации. Это контролируется конфигурационными параметрами, которые обычно устанавливаются в файле postgresql.conf.

Параметр track_activities включает мониторинг текущих команд, выполняемой любым серверным процессом.

Параметр track_counts определяет необходимость сбора статистики по обращениям к таблицам и индексам.

Параметр track_functions включает отслеживание использования пользовательских функций.

Параметр track_io_timing включает мониторинг времени чтения и записи блоков.

Обычно эти параметры устанавливаются в postgresql.conf, поэтому они применяются ко всем серверным процессам, однако, используя команду SET, их можно включать и выключать в отдельных сессиях. (Для того чтобы обычные пользователи не скрывали свою работу от администратора СУБД, изменять эти параметры с помощью команды SET могут только суперпользователи.)

Сборщик статистики использует временные файлы для передачи собранной информации другим процессам PostgreSQL. Имя каталога, в котором хранятся эти файлы, задаётся параметром stats_temp_directory, по умолчанию он называется pg_stat_tmp

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

28.2.2. Просмотр статистики

Для просмотра текущего состояния системы предназначены несколько предопределённых представлений, которые перечислены в Таблице 28.1. В дополнение к ним есть несколько других представлений, перечисленных в Таблице 28.2, позволяющих просмотреть результаты сбора статистики. Кроме того, на базе нижележащих статистических функций можно создать собственные представления, как описано в Подразделе 28.2.3.

Наблюдая собранные данные в сборщике статистики, важно понимать, что эта информация обновляется не сразу. Каждый серверный процесс передаёт новые статистические данные сборщику статистики непосредственно перед переходом в режим ожидания; то есть запрос или транзакция в процессе выполнения не влияют на отображаемые данные статистики. К тому же, сам сборщик статистики формирует новый отчёт не чаще, чем раз в PGSTAT_STAT_INTERVAL миллисекунд (500 мс, если этот параметр не изменялся при установке сервера). Так что отображаемая информация отстаёт от того, что происходит в настоящий момент. Однако информация о текущем запросе, собираемая с параметром track_activities, всегда актуальна.

Ещё одним важным моментом является то, что когда в серверном процессе запрашивают какую-либо статистику, сначала он получает наиболее свежий моментальный снимок от сборщика статистики и затем до окончания текущей транзакции использует этот снимок для всех статистических представлений и функций. Так что на протяжении одной транзакции статистическая информация меняться не будет. Подобным же образом информация о текущих запросах во всех сессиях собирается в тот момент, когда она впервые запрашивается в рамках транзакции, и эта же самая информация будет отображаться на протяжении всей транзакции. Это не ошибка, а полезное свойство СУБД, поскольку оно позволяет выполнять запросы к статистическим данным и сравнивать результаты, не беспокоясь о том, что статистические данные изменяются. Но если для каждого запроса вам нужны новые результаты, то их следует выполнять вне любых транзакционных блоков. Или же можно вызывать функцию pg_stat_clear_snapshot(), которая сбросит ранее полученный снимок статистики в текущей транзакции (если он был). При следующем обращении к статистической информации будет сформирован новый моментальный снимок.

Через представления pg_stat_xact_all_tablespg_stat_xact_sys_tablespg_stat_xact_user_tables, и pg_stat_xact_user_functions транзакции также доступна её собственная статистика (ещё не переданная сборщику статистики). Данные в этих представлениях ведут себя не так, как описано выше; наоборот, в течение транзакции они постоянно обновляются.

Таблица 28.1. Динамические статистические представления

Имя представления Описание
pg_stat_activity Одна строка для каждого серверного процесса c информацией по текущей активности процесса, такой как состояние и текущий запрос. За подробностями обратитесь к pg_stat_activity.
pg_stat_replication По одной строке для каждого процесса WAL-отправителя со статистикой по репликации на резервном сервере, к которому подключён этот процесс. За подробностями обратитесь к pg_stat_replication.
pg_stat_wal_receiver Только одна строка со статистикой приёмника WAL, полученной с сервера, на котором работает приёмник. За подробностями обратитесь к pg_stat_wal_receiver.
pg_stat_ssl Одна строка для каждого подключения (обычного и реплицирующего), в которой показывается информация об использовании SSL для данного подключения. Подробности описаны в pg_stat_ssl.
pg_stat_progress_vacuum По одной строке с текущим состоянием для каждого обслуживающего процесса (включая рабочие процессы автоочистки), в котором работает VACUUM. См. Подраздел 28.4.1.

Таблица 28.2. Представления собранной статистики

Имя представления Описание
pg_stat_archiver Только одна строка со статистикой о работе активности процесса архивации WAL. Более подробно смотрите pg_stat_archiver.
pg_stat_bgwriter Только одна строка со статистикой о работе фонового процесса записи. Более подробно смотрите pg_stat_bgwriter.
pg_stat_database Одна строка для каждой базы данных со статистикой на уровне базы. Более подробно смотрите pg_stat_database.
pg_stat_database_conflicts По одной строке на каждую базу данных со статистикой по отменам запросов, выполненным вследствие конфликта с процессами восстановления на резервных серверах. Более подробно смотрите pg_stat_database_conflicts.
pg_stat_all_tables По одной строке на каждую таблицу в текущей базе данных со статистикой по обращениям к этой таблице. Более подробно смотрите pg_stat_all_tables.
pg_stat_sys_tables Аналогично pg_stat_all_tables, за исключением того, что отображаются только системные таблицы.
pg_stat_user_tables Аналогично pg_stat_all_tables, за исключением того, что отображаются только пользовательские таблицы.
pg_stat_xact_all_tables Подобно pg_stat_all_tables, но подсчитывает действия, выполненные в текущей транзакции к настоящему моменту (которые ещё не вошли в pg_stat_all_tables и связанные представления). Столбцы для числа живых и мёртвых строк, а также количества операций очистки и сбора статистики, в этом представлении отсутствуют.
pg_stat_xact_sys_tables Аналогично pg_stat_xact_all_tables, за исключением того, что отображаются только системные таблицы.
pg_stat_xact_user_tables Аналогично pg_stat_xact_all_tables, за исключением того, что отображаются только пользовательские таблицы.
pg_stat_all_indexes По одной строке для каждого индекса в текущей базе данных со статистикой по обращениям к этому индексу. Более подробно смотрите pg_stat_all_indexes.
pg_stat_sys_indexes Аналогично pg_stat_all_indexes, за исключением того, что показываются только индексы по системным таблицам.
pg_stat_user_indexes Аналогично pg_stat_all_indexes, за исключением того, что показываются только индексы по пользовательским таблицам.
pg_statio_all_tables По одной строке для каждой таблицы в текущей базе данных со статистикой по операциям ввода/вывода для этой таблицы. Более подробно смотрите pg_statio_all_tables.
pg_statio_sys_tables Аналогично pg_statio_all_tables, за исключением того, что показываются только системные таблицы.
pg_statio_user_tables Аналогично pg_statio_all_tables, за исключением того, что показываются только пользовательские таблицы.
pg_statio_all_indexes По одной строке для каждого индекса в текущей базе данных со статистикой по операциям ввода/вывода для этого индекса. Более подробно смотрите pg_statio_all_indexes.
pg_statio_sys_indexes Аналогично pg_statio_all_indexes, за исключением того, что показываются только индексы по системным таблицам.
pg_statio_user_indexes Аналогично pg_statio_all_indexes, за исключением того, что показываются только индексы по пользовательским таблицам.
pg_statio_all_sequences По одной строке для каждой последовательности в текущей базе данных со статистикой по операциям ввода/вывода для этой последовательности. Более подробно смотрите pg_statio_all_sequences.
pg_statio_sys_sequences Аналогично pg_statio_all_sequences, за исключением того, что показываются только системные последовательности. (В настоящее время системных последовательностей нет, поэтому это представление всегда пусто.)
pg_statio_user_sequences Аналогично pg_statio_all_sequences, за исключением того, что показываются только пользовательские последовательности.
pg_stat_user_functions По одной строке для каждой отслеживаемой функции со статистикой по выполнениям этой функции. Более подробно смотрите pg_stat_user_functions.
pg_stat_xact_user_functions Аналогично pg_stat_user_functions, однако подсчитываются только вызовы функций, выполненные в текущей транзакции (которые ещё не были включены в pg_stat_user_functions).

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

Представления pg_statio_ полезны, прежде всего, для определения эффективности буферного кеша. Если количество фактических дисковых чтений существенно меньше количества чтений из буферного кеша, то это означает, что кеш справляется с большинством запросов на чтение без обращения к ядру. Однако эта статистика не даёт полной картины: PostgreSQL обрабатывает дисковый ввод/вывод так, что данные, не находящиеся в буферном кеше PostgreSQL, могут все ещё располагаться в кеше ввода/вывода ядра, и, следовательно, для их получения физическое чтение может не использоваться. Для получения более детальной информации о процессе ввода/вывода в PostgreSQL рекомендуется использовать сборщик статистики PostgreSQL в сочетании с утилитами операционной системы, которые дают более полное представление о том, как ядро осуществляет ввод/вывод.

Таблица 28.3. Представление pg_stat_activity

Столбец Тип Описание
datid oid OID базы данных, к которой подключён этот серверный процесс
datname name Имя базы данных, к которой подключён этот серверный процесс
pid integer Идентификатор процесса этого серверного процесса
usesysid oid OID пользователя, подключённого к этому серверному процессу
usename name Имя пользователя, подключённого к этому серверному процессу
application_name text Название приложения, подключённого к этому серверному процессу
client_addr inet IP-адрес клиента, подключённого к этому серверному процессу. Значение null в этом поле означает, что клиент подключён через сокет Unix на стороне сервера или что это внутренний процесс, например, автоочистка.
client_hostname text Имя компьютера для подключённого клиента, получаемое в результате обратного поиска в DNS по client_addr. Это поле будет отлично от null только в случае соединений по IP и только при включённом режиме log_hostname.
client_port integer Номер TCP-порта, который используется клиентом для соединения с этим серверным процессом, или -1, если используется сокет Unix
backend_start timestamp with time zone Время запуска процесса, т. е. время, когда клиент подсоединился к серверу
xact_start timestamp with time zone Время начала текущей транзакции в этом процессе или null при отсутствии активной транзакции. Если текущий запрос был первым в своей транзакции, то значение в этом столбце совпадает со значением столбца query_start.
query_start timestamp with time zone Время начала выполнения активного в данный момент запроса, или, если state не active, то время начала выполнения последнего запроса
state_change timestamp with time zone Время последнего изменения состояния (поля state)
wait_event_type text Тип события, которого ждёт обслуживающий процесс, если это имеет место; в противном случае — NULL. Возможные значения:
  • LWLockNamed: Обслуживающий процесс ожидает определённую именованную лёгкую блокировку. Такие блокировки защищают определённые структуры данных в разделяемой памяти. Имя блокировки будет показывается в wait_event.

  • LWLockTranche: Обслуживающий процесс ожидает одну из группы связанных лёгких блокировок. Все блокировки в этой группе выполняют схожие функции; общее предназначение блокировок в этой группе показывается в wait_event.

  • Lock: Обслуживающий процесс ожидает тяжёлую блокировку. Тяжёлые блокировки, также называемые блокировками менеджера блокировок или просто блокировками, в основном защищают объекты уровня SQL, такие как таблицы. Однако они также применяются для взаимоисключающего выполнения некоторых внутренних операций, например, для расширения отношений. Тип ожидаемой блокировки показывается в wait_event.

  • BufferPin: Серверный процесс ожидает доступа к буферу данных, когда никакой другой процесс не обращается к этому буферу. Ожидание закрепления буфера может растягиваться, если другой процесс удерживает открытый курсор, который читал данные из нужного буфера.

wait_event text Имя ожидаемого события, если обслуживающий процесс находится в состоянии ожидания, а в противном случае — NULL. За подробностями обратитесь к Таблице 28.4.
state text Общее текущее состояние этого серверного процесса. Возможные значения:
  • active: серверный процесс выполняет запрос.

  • idle: серверный процесс ожидает новой команды от клиента.

  • idle in transaction: серверный процесс находится внутри транзакции, но в настоящее время не выполняет никакой запрос.

  • idle in transaction (aborted): Это состояние подобно idle in transaction, за исключением того, что один из операторов в транзакции вызывал ошибку.

  • fastpath function call: серверный процесс выполняет fast-path функцию.

  • disabled: Это состояние отображается для серверных процессов, у которых параметр track_activities отключён.

backend_xid xid Идентификатор верхнего уровня транзакции этого серверного процесса или любой другой.
backend_xmin xid текущая граница xmin для серверного процесса.
query text Текст последнего запроса этого серверного процесса. Если state имеет значение active, то в этом поле отображается запрос, который выполняется в настоящий момент. Если процесс находится в любом другом состоянии, то в этом поле отображается последний выполненный запрос.

В представлении pg_stat_activity для каждого серверного процесса будет присутствовать по одной строке с информацией, относящейся к текущей деятельности этого процесса.

Примечание

Значения в столбцах wait_event и state не зависят друг от друга. Если обслуживающий процесс находится в состоянии active (активен), он может ожидать какое-то событие, или не ожидать никакое. Если состояние active и поле wait_event содержит не NULL, это означает, что запрос выполняется, но заблокирован чем-то в системе.

Таблица 28.4. Описание wait_event

Тип события ожидания Название события ожидания Описание
LWLockNamed ShmemIndexLock Ожидание при поиске или выделении области в разделяемой памяти.
OidGenLock Ожидание при выделении или назначении OID.
XidGenLock Ожидание при выделении или назначении идентификатора транзакции.
ProcArrayLock Ожидание при получении снимка или очистке идентификатора транзакции в конце транзакции.
SInvalReadLock Ожидание при получении или удалении из общей очереди сообщений аннулирования.
SInvalWriteLock Ожидание при добавлении в общую очередь сообщения аннулирования.
WALBufMappingLock Ожидание при замене страницы в буферах WAL.
WALWriteLock Ожидание при записи буферов WAL на диск.
ControlFileLock Ожидание при чтении или изменении управляющего файла либо при создании нового файла WAL.
CheckpointLock Ожидание при выполнении контрольной точки.
CLogControlLock Ожидание при чтении или изменении состояния транзакции.
SubtransControlLock Ожидание при чтении или изменении информации о подтранзакции.
MultiXactGenLock Ожидание при чтении или изменении общего состояния мультитранзакций.
MultiXactOffsetControlLock Ожидание при чтении или изменении смещений мультитранзакций.
MultiXactMemberControlLock Ожидание при чтении или изменении членов мультитранзакций.
RelCacheInitLock Ожидание при чтении или записи файла инициализации кеша отношения.
CheckpointerCommLock Ожидание при управлении запросами fsync.
TwoPhaseStateLock Ожидание при чтении или изменении состояния подготовленных транзакций.
TablespaceCreateLock Ожидание при создании или удалении табличного пространства.
BtreeVacuumLock Ожидание при чтении или изменении информации, связанной с очисткой, для индекса-B-дерева.
AddinShmemInitLock Ожидание при управлении выделением блоков в общей памяти.
AutovacuumLock Ожидание в рабочем процессе или процедуре запуска автоочистки при изменении или чтении текущего состояния рабочих процессов автоочистки.
AutovacuumScheduleLock Ожидание при подтверждении, что таблица, выбранная для очистки, всё ещё нуждается в очистке.
SyncScanLock Ожидание при получении начального положения сканирования таблицы для синхронизированного сканирования.
RelationMappingLock Ожидание при изменении в файле сопоставления отношений, используемого для хранения связей файловых узлов с каталогом БД.
AsyncCtlLock Ожидание при чтении или изменении общего состояния уведомлений.
AsyncQueueLock Ожидание при чтении или изменении сообщений уведомлений.
SerializableXactHashLock Ожидание при получении или сохранении информации о сериализуемых транзакциях.
SerializableFinishedListLock Ожидание при обращении к списку завершённых сериализуемых транзакций.

PostgreSQL: Документация: 9.3: Типы данных

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

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

В таблице 8-1 показаны все встроенные универсальные типы данных.Большая часть альтернативы имена, перечисленные в столбце «Псевдонимы», являются имена, используемые PostgreSQL внутри компании по историческим причинам. В кроме того, доступны некоторые внутренние или устаревшие типы, но здесь не указаны.

Таблица 8-1. Типы данных

Название Псевдонимы Описание
bigint int8 восьмибайтовое целое со знаком
bigserial серийный 8 восьмибайтовое целое с автоматическим приращением
бит [(n) ] битовая строка фиксированной длины
переменный бит [(n)] варбит [(n) ] битовая строка переменной длины
логическое булев логическое логическое значение (истина / ложь)
ящик ящик прямоугольный на плоскости
байт двоичные данные («байтовый массив»)
символ [(n)] знаков [(n) ] символьная строка фиксированной длины
разные символы [(n)] varchar [(n) ] Символьная строка переменной длины
cidr Сетевой адрес IPv4 или IPv6
круг круг на плоскости
дата календарная дата (год, месяц, день)
двойной точности float8 Число двойной точности с плавающей запятой (8 байт)
инет Адрес хоста IPv4 или IPv6
целое интервал, интервал 4 четырехбайтовое целое число со знаком
интервал [поля] [(p)] временной интервал
json Данные JSON
строка бесконечная линия на плоскости
lseg Отрезок на плоскости
macaddr MAC (Media Access Control) адрес
деньги денежная сумма
числовой [(p, s)] десятичное [(p, s)] точное число с возможностью выбора точности
путь геометрический путь на плоскости
точка геометрическая точка на плоскости
многоугольник замкнутый геометрический путь на плоскости
реальный с плавающей запятой 4 Число с плавающей запятой одинарной точности (4 байта)
smallint внутр2 двухбайтовое целое число со знаком
smallserial серийный 2 двухбайтовое целое с автоинкрементом
серийный серийный 4 четырехбайтовое целое с автоинкрементом
текст Символьная строка переменной длины
время [(p)] [ без часового пояса] время суток (без часового пояса)
время [(p)] с часовым поясом timetz время суток, включая часовой пояс
отметка времени [(p)] [без часового пояса] дата и время (без часового пояса)
отметка времени [(p)] с часовым поясом метка времени дата и время, включая часовой пояс
tsquery текстовый поисковый запрос
цвектор текстовый поиск документа
txid_snapshot снимок идентификатора транзакции на уровне пользователя
uuid универсальный уникальный идентификатор
xml Данные XML

Совместимость: Следующие типы (или их варианты написания) задаются SQL: bigint, bit, bit изменяющийся, логический, символ, изменяющийся символ, персонаж, varchar, дата, двойная точность, целое число, интервал, числовой, десятичный, настоящий, smallint, время (с часовым поясом или без него), отметка времени (с часовым поясом или без него), xml.

Каждый тип данных имеет внешнее представление, определяемое его функции ввода и вывода. Многие из встроенных типов имеют очевидные внешние форматы. Однако несколько типов либо уникальны для PostgreSQL, например геометрический пути или иметь несколько возможных форматов, таких как дата и время типы. Некоторые функции ввода и вывода не обратимы, т.е. результат функции вывода может потерять точность, когда по сравнению с исходным вводом.

Что такое PostgreSQL? Введение, история, особенности, преимущества

  • Начало
  • Тестирование

      • Назад
      • Гибкое тестирование
      • BugZilla
      • Cucumber
      • Тестирование базы данных
      • ETL
      • Тестирование базы данных
      • J2
      • JUnit
      • LoadRunner
      • Ручное тестирование
      • Мобильное тестирование
      • Mantis
      • Почтальон
      • QTP
      • Назад
      • Центр качества SAP (ALM)
      • 351 Центр контроля качества (ALM)
      • 35 Soap Управление тестированием
      • TestLink
  • SAP

      • Назад
      • ABAP 903 52
      • APO
      • Начинающий
      • Basis
      • BODS
      • BI
      • BPC
      • CO
      • Назад
      • CRM
      • Crystal Reports
      • FICO
      • HRM
      • HRM
      • Заработная плата
      • Назад
      • PI / PO
      • PP
      • SD
      • SAPUI5
      • Безопасность
      • Менеджер решений
      • Successfactors
      • SAP Tutorials
    • Apache
    • AngularJS
    • ASP.Net
    • C
    • C #
    • C ++
    • CodeIgniter
    • СУБД
    • JavaScript
    • Назад
    • Java
    • JSP
    • Kotlin
    • Linux
    • Kotlin
    • Maria
    • Kotlin MY Linux. js
    • Perl
    • Назад
    • PHP
    • PL / SQL
    • PostgreSQL
    • Python
    • ReactJS
    • Ruby & Rails
    • Scala
    • SQL
    • SQL Server SQL SQL Back
    • SQL
    • UML
    • VB.Net
    • VBScript
    • Веб-службы
    • WPF
  • Обязательно изучите!

      • Назад
      • Бухгалтерский учет
      • Алгоритмы
      • Android
      • Блокчейн
      • Бизнес-аналитик
      • Веб-сайт сборки
      • Облачные вычисления
      • COBOL
      • COBOL
      • Встроенные системы
      • Компилятор Дизайн
      • 9035
      • Учебники Excel
      • Программирование на Go
      • IoT
      • ITIL
      • Jenkins
      • MIS
      • Сеть
      • Операционная система
      • Назад
      • Salesforce
      • SEO
      • Разработка программного обеспечения
      • VBA
      903 52
  • Big Data

      • Назад
      • AWS
      • BigData
      • Cassandra
      • Cognos
      • Хранилище данных
      • 9035 Microbase
      • DevOps
      • HBase
      • HBase
      • MongoDB
      • NiFi
  • Типы данных PostgreSQL, поддерживаемые в ArcGIS — Справка

    Когда вы создаете таблицу или добавляете столбец в таблицу в базе данных, столбцы создаются как данные определенного типа.Типы данных — это классификации, которые определяют возможные значения и операции, которые могут быть выполнены с данными, а также способ хранения данных в этом столбце в базе данных.

    При доступе к таблицам базы данных из ArcGIS вы можете работать с определенными типами данных. При доступе к таблице базы данных через узел «Подключения к базе данных» в дереве каталога или через слой запроса в ArcMap, ArcGIS отфильтровывает любые неподдерживаемые типы данных. Если вы обращаетесь к таблице базы данных напрямую, неподдерживаемые типы данных не будут отображаться в интерфейсе ArcGIS, и вы не сможете редактировать их через ArcGIS.Точно так же, когда вы копируете таблицы, содержащие неподдерживаемые типы данных, с помощью ArcGIS, он копирует только поддерживаемые типы данных; когда вы вставляете таблицу в другую базу данных или базу геоданных, столбцы неподдерживаемого типа данных не отображаются.

    Когда вы создаете класс пространственных объектов или таблицу в ArcGIS или добавляете столбец в существующую таблицу или класс пространственных объектов с помощью ArcGIS, существует 12 возможных типов данных ArcGIS, которые можно назначить полю. Типы данных базы данных, которые не соответствуют этим типам, нельзя использовать напрямую в клиентских приложениях ArcGIS.

    В первом столбце перечислены типы данных ArcGIS. Во втором столбце указан тип данных PostgreSQL, который будет создан в базе данных. В третьем столбце показано, какие другие типы данных PostgreSQL (если есть) сопоставляются с типом данных ArcGIS при просмотре в ArcGIS.

    Типы данных ArcGIS Созданные типы данных PostgreSQL Другие типы данных PostgreSQL, которые можно просматривать Примечания

    BLOB

    BY

    DATE

    TIMESTAMP БЕЗ ЗОНЫ

    TIMESTAMP

    DOUBLE

    NUMERIC (p)

    0

    BIGLE

    BIGLEM шкала Использование в ArcGIS может повлиять на результирующий тип данных, созданный в базе данных.Дополнительную информацию см. В разделе Типы данных полей ArcGIS.

    FLOAT

    NUMERIC (p)

    Точность и масштаб, указанные в ArcGIS, могут повлиять на результирующий тип данных, созданный в базе данных. Дополнительную информацию см. В разделе Типы данных полей ArcGIS.

    ГЕОМЕТРИЯ

    СТ_ГЕОМЕТРИЯ или ГЕОМЕТРИЯ (PostGIS)

    : Глава 2.Работа с данными в PostgreSQL :: Часть I: Общее использование PostgreSQL :: Postgresql :: SQL :: eTutorials.org

    PostgreSQL предоставляет множество числовых типов данных. Из шести числовых типов четыре являются точными (SMALLINT, INTEGER, BIGINT, NUMERIC (p, s)), а два — приблизительными (REAL, DOUBLE PRECISION).

    Три из четырех точных числовых типов (SMALLINT, INTEGER и BIGINT) могут хранить только целочисленные значения. Четвертый (NUMERIC (p, s)) может точно хранить любое значение, которое соответствует указанному количеству (p) цифр.

    С другой стороны, приблизительные числовые типы не могут точно хранить все значения. Вместо этого приблизительный тип данных хранит приближенное действительное число. Тип DOUBLE PRECISION, например, может хранить в общей сложности 15 значащих цифр, но когда вы выполняете вычисления с использованием значения DOUBLE PRECISION, вы можете столкнуться с ошибками округления. Эту проблему легко увидеть:

    
    фильмы = # выберите 2000.3 - 2000.0;
    
         столбец?
    
    -------------------
    
     0.299999999999955
    
    (1 ряд)
    
     
    Размер, точность и диапазон значений

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

    Таблица 2.3. Типы точных числовых данных

    МАЛЕНЬКИЙ

    2

    ? 32768

    +32767

    ЦЕЛОЕ

    4

    ? 2147483648

    +2147483647

    BIGINT

    8

    ? 9223372036854775808

    +9223372036854775807

    ЧИСЛО (п, с)

    11+ (п / 2)

    Без ограничений

    Без ограничений

    Тип данных NUMERIC (p, s) может точно хранить любое число, которое умещается в пределах указанного количества цифр.При создании столбца типа NUMERIC (p, s) можно указать общее количество десятичных цифр (p) и количество цифр после дробной части. Общее количество десятичных цифр называется точностью, а количество десятичных цифр — шкалой.

    Таблица 2.3 показывает, что нет ограничений на значения, которые вы можете сохранить в столбце NUMERIC (p, s). Фактически, существует предел (обычно 1000 цифр), но вы можете настроить его, изменив символ и перестроив сервер PostgreSQL из исходного кода.

    Два приблизительных числовых типа называются REAL и DOUBLE PRECISION. Таблица 2.4 показывает размер и диапазон для каждого из этих типов данных.

    Таблица 2.4. Приблизительные числовые типы данных

    НАСТОЯЩИЙ

    4

    6 десятичных цифр

    ДВОЙНАЯ ТОЧНОСТЬ

    8

    15 десятичных цифр

    Числовые типы данных также известны под другими именами.Например, INT2 является синонимом SMALLINT. Альтернативные имена для числовых типов данных показаны в таблице 2.5.

    Таблица 2.5. Альтернативные имена для числовых типов данных

    МАЛЕНЬКИЙ

    ИНТ2

    ЦЕЛОЕ

    ИНТ, ИНТ4

    BIGINT

    INT8

    ЧИСЛО (п, с)

    ДЕСЯТИЧНЫЙ (п, с)

    НАСТОЯЩИЙ

    ПОПЛАВК, ПОПЛАВК 4

    ДВОЙНАЯ ТОЧНОСТЬ

    FLOAT8

    Помимо уже описанных числовых типов данных, PostgreSQL поддерживает два «продвинутых» числовых типа: SERIAL и BIGSERIAL.Столбец SERIAL на самом деле представляет собой целое число без знака, значение которого автоматически увеличивается (или уменьшается) на определенное приращение при добавлении новых строк. Точно так же BIGSERIAL — это BIGINT, стоимость которого увеличивается. Когда вы создаете столбец BIGSERIAL или SERIAL, PostgreSQL автоматически создает для вас SEQUENCE. ПОСЛЕДОВАТЕЛЬНОСТЬ — это объект, который генерирует для вас порядковые номера. Я расскажу больше о ПОСЛЕДОВАТЕЛЬНОСТИ позже в этой главе.

    Синтаксис для буквальных значений

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

    Начнем с изучения формата дробных литералов. Дробные литералы можно вводить в любой из следующих форм:

    
    [-] цифры. [цифры] [E [+ | -] цифры]
    
    [-] [цифры]. цифры [E [+ | -] цифры]
    
    [-] цифры [+ | -] цифры
    
     

    Вот несколько примеров допустимых дробных литералов:

    
    3.14159
    
    2.0e + 15
    
    0,2e-15
    
    4e10
    
     

    Числовой литерал, содержащий только цифры, считается целочисленным литералом:

    
    [-] цифры 

    Вот несколько примеров действительных целочисленных литералов:

    
    -100
    
    555
    
    9223372036854775807
    
    -9223372036854775808
    
     

    Дробный литерал всегда считается типа DOUBLE PRECISION. Считается, что целочисленный литерал имеет тип INTEGER, если только значение не слишком велико, чтобы поместиться в целое число? В этом случае ему будет присвоен тип NUMERIC или REAL.

    Поддерживаемые операторы

    PostgreSQL поддерживает множество арифметических операций, операций сравнения и побитовых операторов для числовых типов данных.

    Таблица 2.6. Арифметические операторы для целых чисел

    INT2 q INT2

    + — * /%

    INT2 q INT4

    + — * /%

    INT4 q INT2

    + — * /%

    INT4 q INT4

    + — * /%

    INT4 q INT8

    + — * /

    INT8 q INT4

    + — * /

    INT8 q INT8

    + — * /%

    Таблица 2.

    Операторы сравнения используются для определения отношения между двумя числовыми значениями.PostgreSQL поддерживает обычные операторы: <, <=, <> (не равно), =,> и> =. Вы можете использовать операторы сравнения со всеми возможными комбинациями числовых типов данных (некоторые комбинации потребуют преобразования типов).

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

    Самый простой способ понять побитовые операторы — сначала преобразовать ваши операнды в двоичную запись? Например:

    
    десятичный 12 = двоичный 00001100
    
    десятичный 7 = двоичный 00000111
    
    десятичный 21 = двоичный 00010101
    
     

    Теперь давайте рассмотрим каждого оператора по очереди.

    Оператор AND (&) сравнивает соответствующие биты в каждом операнде и возвращает 1, если оба бита равны 1, и 0 в противном случае? Например:

    
    00001100 и 00000111 и
    
    00010101 00010101
    
    -------- --------
    
    00000100 00000101
    
     

    Оператор OR (|) сравнивает соответствующие биты в каждом операнде и выдает 1, если один (или оба) бит равен 1, и 0 в противном случае? Например:

    
    00001100 | 00000111 |
    
    00010101 00010101
    
    -------- --------
    
    00011101 00010111
    
     

    Оператор XOR (#) аналогичен оператору OR.XOR сравнивает соответствующие биты в каждом операнде и возвращает 1, если любой бит, но не оба бита, равен 1, и дает 0 в противном случае.

    
    00001100 # 00000111 #
    
    00010101 00010101
    
    -------- --------
    
    00011001 00010010
    
     

    PostgreSQL также предоставляет два оператора битового сдвига.

    Оператор сдвига влево (<<) сдвигает биты в первом операнде на n бит влево, где n - второй операнд. Крайние левые n битов отбрасываются, а крайние правые n битов устанавливаются в 0.Сдвиг влево на n битов эквивалентен умножению первого операнда на 2 n ? Например:

    
    00001100 << 2  (десятичный)  = 00110000
    
    00010101 << 3  (десятичное)  = 10101000
    
     

    Оператор сдвига вправо (>>) сдвигает биты>) >>)> в первом операнде на n бит вправо, где n — второй операнд. Крайние правые n битов отбрасываются, а крайние левые биты устанавливаются в 0. Сдвиг вправо на n битов эквивалентен делению первого операнда на 2 n :

    
    00001100 >> 2  (десятичный)  = 00000011
    
    00010101 >> 3  (десятичное)  = 00000010
    
     

    Последний побитовый оператор — это двоичное НЕ (~).В отличие от других побитовых операторов, НЕ является унарным оператором — он принимает единственный операнд. Когда вы применяете оператор NOT к значению, каждый бит в исходном значении переключается: единицы становятся нулями, а нули становятся единицами? Например:

    
    ~ 00001100 = 11110011
    
    ~ 00010101 = 11101010
    
     

    В таблице 2.8 показаны типы данных, которые можно использовать с побитовыми операторами.

    Таблица 2.8. Битовые операторы для целых чисел

    INT2 q INT2

    # & | << >>

    INT4 q INT4

    # & | << >>

    INT8 q INT4

    << >>

    INT8 q INT8

    # & |

    .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *