Todos os produtos
Search
Central de documentação

PolarDB:varbitx

Última atualização: Sep 02, 2026

A extensão varbit nativa do PostgreSQL Community Edition oferece suporte apenas a operações básicas do tipo BIT. PolarDB for PostgreSQL estende a extensão varbit com operações BIT adicionais para casos de uso mais amplos, como sistemas de recomendação com perfilamento de usuários em tempo real, sistemas de publicidade com controle de acesso e sistemas de bilhetagem.

Pré-requisitos

A versão do PolarDB for PostgreSQL deve ser PostgreSQL 11.

Funções

Função

Descrição

get_bit (varbit a, int b, int c) returns varbit

Extrai c bits a partir da posição b e retorna um valor varbit.

Exemplo: get_bit('111110000011', 3, 5) retorna 11000.

set_bit_array (varbit a, int b, int c, int[] d) returns varbit

Define os bits nas posições de índice especificadas no array d como b (0 ou 1). Os bits além do comprimento original são preenchidos com c (0 ou 1).

Exemplo: set_bit_array('111100001111', 0, 1, array[1,15]) retorna 1011000011111110.

bit_count (varbit a, int b, int c, int d) returns int

A partir da posição c, conta o número de valores b (0 ou 1) dentro de d bits. Se o intervalo exceder o comprimento da string de bits, apenas os bits existentes serão contados.

Exemplo: bit_count('1111000011110000', 1, 5, 4) retorna 1 (0001).

bit_count (varbit a, int b) returns int

Conta o número de valores b (1 ou 0).

Exemplo: bit_count('1111000011110000', 1) retorna 8.

bit_fill (int a, int b) returns varbit

Preenche uma string de bits de comprimento b com o valor a (0 ou 1).

Exemplo: bit_fill(0,10) retorna 0000000000.

bit_rand (int a, int b, float c) returns varbit

Gera uma string de bits aleatória de comprimento a, com uma proporção aleatória de b (0 ou 1) especificada por c.

Exemplo: bit_rand(10, 1, 0.3) pode retornar 0101000001.

bit_posite (varbit a, int b, boolean c) returns int[]

Retorna o array de posições de índice de b (0 ou 1). A indexação começa em 0. Se c for verdadeiro, as posições retornam em ordem crescente; caso contrário, em ordem decrescente.

Exemplo: bit_posite ('11110010011', 1, true) retorna [0,1,2,3,6,9,10], bit_posite ('11110010011', 1, false) retorna [10,9,6,3,2,1,0].

bit_posite (varbit a, int b, int c, boolean d) returns int[]

Retorna o array de posições de índice de b (0 ou 1), limitado a c posições. A indexação começa em 0. Se d for verdadeiro, as posições retornam em ordem crescente; caso contrário, em ordem decrescente.

Exemplo: bit_posite ('11110010011', 1, 3, true) retorna [0,1,2], bit_posite ('11110010011', 1, 3, false) retorna [10,9,6].

get_bit_array (varbit a, int b, int c, int d) returns int[]

Extrai c bits a partir da posição b e retorna o array de posições de índice dos valores d (0 ou 1).

Exemplo: get_bit_array('111110000011', 3, 5, 1) retorna o array de índices [3,4] para 11000.

get_bit_array (varbit a, int b, int[] c) returns int[]

Verifica os bits nas posições de índice especificadas no array c quanto ao valor b (0 ou 1) e retorna as posições de índice correspondentes. Posições que excedem o comprimento da string de bits não são incluídas.

Exemplo: get_bit_array('111110000011', 1, array[1,5,6,7,10,11]) retorna array[1,10,11].

set_bit_array (varbit a, int b, int c, int[] d, int e) returns varbit

Define os bits nas posições de índice especificadas no array d como b (0 ou 1). Interrompe após definir e bits. Os bits além do comprimento original são preenchidos com c (0 ou 1).

Exemplo: set_bit_array('111100001111', 1, 0, array[4,5,6,7], 2) retorna 111111001111 (define como 1, preenche com 0 além do comprimento original e interrompe após definir 2 bits).

set_bit_array_record (varbit a, int b, int c, int[] d) returns (varbit,int[])

Define os bits nas posições de índice especificadas no array d como b (0 ou 1). Os bits além do comprimento original são preenchidos com c (0 ou 1). Retorna o valor varbit atualizado e o array de posições de índice dos bits definidos como b nesta operação.

Exemplo: set_bit_array_record('111100001111', 0, 1, array[1,15]) retorna 1011000011111110 (define como 0, preenche com 1 além do comprimento original) e retorna array[1,15].

set_bit_array_record (varbit a, int b, int c, int[] d, int e) returns (varbit,int[])

Define os bits nas posições de índice especificadas no array d como b (0 ou 1). Os bits além do comprimento original são preenchidos com c (0 ou 1). Interrompe após definir e bits com sucesso. Retorna o valor varbit atualizado e o array de posições de índice dos bits definidos como b nesta operação.

Exemplo: set_bit_array_record('111100001111', 1, 0, array[1,4,5,6,7], 2) retorna 111111001111 (define como 1, preenche com 0 além do comprimento original e interrompe após definir 2 bits com sucesso) e retorna array[4,5] (array[1] já era 1, portanto não foi alterado).

bit_count_array (varbit a, int b, int[] c) returns int

Conta o número de valores 0 ou 1 nas posições de índice especificadas.

Exemplo: bit_count_array('1111000011110000', 1, array[1,2,7,8]) retorna 3.

Uso

  • Crie a extensão

    CREATE EXTENSION varbitx;
  • Exclua a extensão

    DROP EXTENSION varbitx;
  • Use as funções

    Execute select <function>. Exemplos:

    • Função bit_count

      select bit_count('1111000011110000', 1, 5, 4);

      Saída retornada:

       bit_count   
      -----------  
               1  
      (1 row)  
    • Função set_bit_array_record

      select set_bit_array_record('111100001111', 1, 0, array[1,4,5,6,7], 2);

      Saída retornada:

        set_bit_array_record    
      ------------------------  
       (111111001111,"{4,5}")  
      (1 row)

    Para obter mais informações sobre as funções, consulte Functions.