8.10. Битовые строки
Битовые строки представляют собой последовательности из 1 и 0. Их можно использовать для хранения или отображения битовых масок. В SQL есть два битовых типа: bit(
и n
)bit varying(
, где n
)n
— положительное целое число.
Длина значения типа bit
должна в точности равняться n
; при попытке сохранить данные длиннее или короче произойдёт ошибка. Данные типа bit varying
могут иметь переменную длину, но не превышающую n
; строки большей длины не будут приняты. Запись bit
без указания длины равнозначна записи bit(1)
, тогда как bit varying
без указания длины подразумевает строку неограниченной длины.
Примечание
При попытке привести значение битовой строки к типу bit(
, оно будет усечено или дополнено нулями справа до длины ровно n
)n
бит, ошибки при этом не будет. Подобным образом, если явно привести значение битовой строки к типу bit varying(
, она будет усечена справа, если её длина превышает n
)n
бит.
Синтаксис констант битовых строк описан в Подразделе 4.1.2.5, а все доступные битовые операторы и функции перечислены в Разделе 9.6.
Пример 8.3. Использование битовых строк
CREATE TABLE test (a BIT(3), b BIT VARYING(5)); INSERT INTO test VALUES (B'101', B'00'); INSERT INTO test VALUES (B'10', B'101');ОШИБКА: длина битовой строки (2) не соответствует типу bit(3)
INSERT INTO test VALUES (B'10'::bit(3), B'101'); SELECT * FROM test;a | b -----+----- 101 | 00 100 | 101
Для хранения битовой строки используется по 1 байту для каждой группы из 8 бит, плюс 5 или 8 байт дополнительно в зависимости от длины строки (но длинные строки могут быть сжаты или вынесены отдельно, как описано в Разделе 8.3 применительно к символьным строкам).
63.2. Built-in Operator Classes
The core PostgreSQL distribution includes the GIN operator classes shown in Table 63.1. (Some of the optional modules described in Appendix F provide additional GIN operator classes.)
Table 63.1. Built-in GIN Operator Classes
Name | Indexed Data Type | Indexable Operators |
---|---|---|
_abstime_ops | abstime[] | && <@ = @> |
_bit_ops | bit[] | && <@ = @> |
_bool_ops | boolean[] | && <@ = @> |
_bpchar_ops | character[] | && <@ = @> |
_bytea_ops | bytea[] | && <@ = @> |
_char_ops | "char"[] | && <@ = @> |
_cidr_ops | cidr[] | && <@ = @> |
_date_ops | date[] | && <@ = @> |
_float4_ops | float4[] | && <@ = @> |
_float8_ops | float8[] | && <@ = @> |
_inet_ops | inet[] | && <@ = @> |
_int2_ops | smallint[] | && <@ = @> |
_int4_ops | integer[] | && <@ = @> |
_int8_ops | bigint[] | && <@ = @> |
_interval_ops | interval[] | && <@ = @> |
_macaddr_ops | macaddr[] | && <@ = @> |
_money_ops | money[] | && <@ = @> |
_name_ops | name[] | && <@ = @> |
_numeric_ops | numeric[] | && <@ = @> |
_oid_ops | oid[] | && <@ = @> |
_oidvector_ops | oidvector[] | && <@ = @> |
_reltime_ops | reltime[] | && <@ = @> |
_text_ops | text[] | && <@ = @> |
_time_ops | time[] | && <@ = @> |
_timestamp_ops | timestamp[] | && <@ = @> |
_timestamptz_ops | timestamp with time zone[] | && <@ = @> |
_timetz_ops | time with time zone[] | && <@ = @> |
_tinterval_ops | tinterval[] | && <@ = @> |
_varbit_ops | bit varying[] | && <@ = @> |
_varchar_ops | character varying[] | && <@ = @> |
jsonb_ops | jsonb | ? ?& ?| @> |
jsonb_path_ops | jsonb | @> |
tsvector_ops | tsvector | @@ @@@ |
Of the two operator classes for type jsonb
, jsonb_ops
is the default. jsonb_path_ops
supports fewer operators but offers better performance for those operators. See Section 8.14.4 for details.