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 precision | 8 байт, двойная точность, число с плавающей точкой |
real | 4-байтовое число одинарной точности с плавающей точкой |
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. |
Выбор типа данных для строк/текста (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_tables
, pg_stat_xact_sys_tables
, pg_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. Возможные
значения:
|
wait_event | text | Имя ожидаемого события, если обслуживающий процесс находится в состоянии ожидания, а в противном случае — NULL. За подробностями обратитесь к Таблице 28.4. |
state | text | Общее текущее состояние этого серверного процесса.
Возможные значения:
|
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 9223372036854775807 -9223372036854775808- JUnit
- LoadRunner
- Ручное тестирование
- Мобильное тестирование
- Mantis
- Почтальон
- QTP
- Назад
- Центр качества SAP (ALM)
- 351 Центр контроля качества (ALM)
- 35 Soap Управление тестированием
- TestLink
MY Linux. jsSAP
- Назад
- 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
- 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
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
Дробный литерал всегда считается типа 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
# & |