Todos os produtos
Search
Central de documentação

Hologres:FAQ sobre instruções SQL do Hologres

Última atualização: Jul 06, 2026

Este tópico lista códigos de erro comuns de SQL do Hologres, com suas respectivas causas e soluções.

HG_ERRCODE_FDW_ERROR

Erro: failed to import foreign schema from odps: Can't find file system factory

  • Causa: O Hologres não consegue acessar o sistema de arquivos da tabela do MaxCompute devido a um erro de configuração.

  • Solução: Verifique as configurações do servidor externo e da tabela externa. Alternativamente, importe os dados para uma tabela interna do Hologres.

ERRCODE_FDW_ERROR

Erro: Failed to import foreign schema from ODPS: Authorization Failed: xxx

  • Causa: A conta atual não tem as permissões necessárias na tabela especificada do MaxCompute.

  • Solução: Conceda as permissões necessárias à conta no MaxCompute. Para obter detalhes, consulte Gerenciar permissões de usuário usando comandos.

Erro: failed to import foreign schema from odps:Table not found -xxx

  • Causa: A tabela especificada não existe no MaxCompute.

  • Solução: Verifique se o nome da tabela e o projeto estão corretos no MaxCompute.

ERRCODE_UNIQUE_VIOLATION ou violação de chave primária

Erro: Update row with Key (id)=(xxxx) multiple times or duplicate key value violates unique constraint

  • Causa: Os dados gravados contêm valores duplicados de chave primária, o que viola a restrição de unicidade.

  • Solução:

    • Se o erro ocorrer em uma instrução INSERT, use a sintaxe INSERT INTO xx ON CONFLICT para desduplicar as chaves primárias. Para obter detalhes, consulte INSERT ON CONFLICT(UPSERT).

    • Se esse erro ocorrer com uma instrução INSERT...ON CONFLICT, os próprios dados de source contêm chaves primárias duplicadas. Para obter mais informações, consulte Erros comuns.

    • Esse erro também pode ocorrer se uma tabela tiver um tempo de vida (TTL) expirado e os dados expirados ainda não tiverem sido excluídos fisicamente. Nesse caso, use a função hg_remove_duplicated_pk para limpar os dados duplicados. Para obter detalhes, consulte Erros comuns.

ERRCODE_CHECK_VIOLATION ou restrição de partição

Erro: ERROR: new row for relation violates partition constraint

  • Causa: Os dados inseridos em uma tabela de partição filha não correspondem à definição do valor da partição. Por exemplo, inserir uma linha com um valor de partição diferente de '20240110' em uma partição definida para '20240110' causa esse erro. Exemplo:

    CREATE TABLE public.tbl_20240110 PARTITION OF public.tbl FOR VALUES IN('20240110');
    
    INSERT INTO public.tbl_20240110 SELECT * FROM odps_tbl where sale_date >'20240110';
    
    error: new row for relation "tbl_20240110" violates partition constraint
    
  • Solução: Garanta que os dados gravados em uma tabela de partição filha atendam à restrição da partição.

ERRCODE_NOT_NULL_VIOLATION ou restrição not-null ou UsageProblem

Erro: null value in column "xxx" violates not-null constraint

  • Causa: Um valor NULL foi gravado em uma coluna que possui uma restrição NOT NULL.

  • Solução: Remova as linhas que contêm valores NULL nessa coluna e tente novamente a operação de gravação.

ERRCODE_UNDEFINED_TABLE

Erro: Dispatch query failed: Table not found

  • Causa: A tabela não existe. Isso geralmente ocorre quando a tabela foi criada recentemente e seus metadados ainda não foram propagados, ou quando uma operação TRUNCATE ou DROP foi executada na tabela durante a execução da consulta.

  • Solução: Use o Query Insight no HoloWeb para verificar se há operações DDL simultâneas, como TRUNCATE ou DROP. Resolva quaisquer conflitos e tente executar a consulta novamente. Evite executar operações DDL em tabelas consultadas ativamente. Para obter detalhes, consulte Query Insight.

ERRCODE_QUERY_CANCELED ou Query is cancelled

Erro: ERROR: canceling statement due to statement timeout

  • Causa: O tempo de execução da consulta excedeu o tempo limite da instrução configurado no cliente.

  • Solução: Otimize a consulta para reduzir o tempo de execução ou aumente a duração do tempo limite. Para obter detalhes sobre as configurações de tempo limite, consulte Gerenciar consultas.

Erro: ERROR: Query:[xxx] Get result failed: canceling statement due to user request

  • Causa: A consulta foi cancelada, geralmente porque uma operação DROP ou TRUNCATE foi executada na tabela durante a execução.

  • Solução: Use o Query Insight no HoloWeb para verificar se há operações DDL conflitantes. Para obter detalhes, consulte Query Insight. Evite executar operações DDL durante a execução de consultas.

Erro: query is cancelled Cannot find index full ID:xxx (table id: x, index id: x) in storages or it is deleting

  • Causa: Uma operação TRUNCATE ou DROP foi executada em uma das tabelas consultadas durante a execução. Isso alterou o ID da tabela e causou o cancelamento da consulta.

  • Solução: Use o Query Insight para verificar se uma operação TRUNCATE ou DROP foi executada simultaneamente à sua consulta. Para obter detalhes, consulte Query Insight.

ERRCODE_FEATURE_NOT_SUPPORTED ou Unsupported feature

Erro: Feature not supported: insert into parent table

  • Causa: O Hologres não oferece suporte à inserção de dados diretamente em uma tabela de partição pai.

  • Solução: Insira os dados em uma tabela de partição filha específica. Para obter detalhes, consulte CREATE PARTITION TABLE.

Erro: SELECT INTO is not supported now.

  • Causa: O Hologres não oferece suporte à sintaxe SELECT INTO.

  • Solução: Use a sintaxe INSERT INTO SELECT para inserir dados. Para obter detalhes, consulte INSERT.

Erro: ALTER TABLE CHANGE OWNER is not supported in SLPM (Schema-Level Permission Mode)

  • Causa: Não é possível usar ALTER TABLE para alterar o proprietário da tabela no modelo de permissão no nível de esquema (SLPM).

  • Solução: No SLPM, os proprietários das tabelas são grupos de usuários. Para alterar as permissões de um usuário, remova-o do grupo de usuários. Para obter detalhes, consulte Remover um usuário de um grupo de usuários.

Erro: Feature not supported: INSERT ON CONFLICT RETURNING

  • Causa: O Hologres não oferece suporte à sintaxe INSERT ON CONFLICT RETURNING.

  • Solução: Use a sintaxe INSERT ON CONFLICT sem a cláusula RETURNING. Para obter detalhes, consulte INSERT ON CONFLICT(UPSERT).

Erro: ERROR: INSERT in ddl transaction is not supported now

  • Causa: Por padrão, o Hologres não oferece suporte a instruções DML, como INSERT, dentro de um bloco de transação BEGIN...COMMIT. Exemplo:

    BEGIN;
    INSERT xxx
    commit;
    ERROR: INSERT in ddl transaction is not supported now
  • Solução: Execute a instrução INSERT fora da transação ou ative as transações DML. Para obter detalhes, consulte Capacidades de transação SQL.

Erro: Creating publication with table that without binlog is not supported now

  • Causa: Uma publicação foi criada para uma tabela que não tem o binlog ativado. As publicações exigem binlog para assinar alterações de dados.

  • Solução: Ative o binlog na tabela antes de criar a publicação. Só é possível criar publicações para tabelas com binlog ativado. Para obter detalhes, consulte Usar JDBC para consumir binlogs do Hologres.

Erro: Feature not supported: INSERT on conflict contains un-unique column

  • Causa: O alvo do conflito na instrução INSERT ON CONFLICT referencia uma coluna que não é chave primária.

  • Solução: O alvo do conflito em INSERT ON CONFLICT deve referenciar apenas colunas de chave primária.

Erro: Feature not supported: UPDATE with shard keys

  • Causa: O Hologres não oferece suporte a operações UPDATE em colunas de chave primária ou chave de distribuição.

  • Solução: Não atualize colunas de chave primária ou chave de distribuição. Para alterar esses valores, use DELETE para remover a linha antiga e INSERT para adicionar uma nova.

Erro: time before 1925 not supported

  • Causa: As funções relacionadas a tempo suportam, por padrão, o intervalo de 1925 a 2282. Valores fora desse intervalo causam um erro.

  • Solução: Para funções como to_char, to_date ou to_timestamp, defina o parâmetro GUC hg_experimental_functions_use_pg_implementation antes da instrução SQL para habilitar um intervalo de tempo mais amplo. Para obter detalhes, consulte Funções de data e hora.

Erro: Group by key is type of imprecise not supported

  • Causa: A cláusula GROUP BY referencia uma coluna com um tipo de dados impreciso, como FLOAT.

  • Solução: Use tipos de dados precisos em vez de FLOAT na cláusula GROUP BY.

Erro: CREATE TABLE is not supported for current instance

  • Causa: A instância atual é uma instância de Cluster Compartilhado (o endpoint começa com hgmc, por exemplo hgmc-cn-xxwwwkkk) ou é uma instância secundária. É possível visualizar o endpoint no console do Hologres. Instâncias de Cluster Compartilhado suportam apenas tabelas externas, não tabelas internas. Instâncias secundárias são somente leitura.

  • Solução:

    • Se você usar uma instância de Cluster Compartilhado, crie uma tabela externa usando a sintaxe de tabela externa. Para obter detalhes, consulte CREATE FOREIGN TABLE. Alternativamente, use uma instância exclusiva para criar tabelas internas.

    • Se você usar uma instância secundária, crie as tabelas na instância primária.

Erro: ALTER TABLE ALTER COLUMN SET TYPE is not supported now

  • Causa: O Hologres não oferece suporte à alteração do tipo de dados de uma coluna com ALTER TABLE.

  • Solução: Para alterar o tipo de uma coluna, recrie a tabela com o tipo de coluna desejado.

Erro: ERROR: Currently materialized view does not support aggregate on expressions, only support single column

  • Causa: Visualizações materializadas de tabela única não oferecem suporte a expressões agregadas em colunas computadas.

  • Solução: Evite usar expressões em visualizações materializadas de tabela única. Use apenas agregações de coluna única. Para obter detalhes, consulte Gerenciar visualizações materializadas usando SQL.

Erro: ERROR: SELECT rule's target list has too few entries

  • Causa: Visualizações materializadas em tempo real não oferecem suporte a expressões agregadas em colunas computadas.

  • Solução: Evite usar expressões em visualizações materializadas em tempo real. Para obter detalhes, consulte Gerenciar visualizações materializadas usando SQL.

Erro: TransactionRowStore::DumpFlushDelta Not implemented

  • Causa: A versão atual do Hologres possui uma limitação de implementação na sintaxe DELETE FROM table USING, o que causa esse erro.

  • Solução: Reescreva a instrução SQL para evitar o uso da cláusula USING para exclusões em lote. Em vez disso, use a seguinte sintaxe:

    DELETE FROM table WHERE (col1, col2) IN ((val1, val2), ...);

ERRCODE_UNDEFINED_OBJECT

Erro: column xxx does not exist

  • Causa: A coluna especificada não existe na tabela.

  • Solução: Verifique se o nome da coluna na instrução SQL está correto.

Erro: Table group xxx does not exist

  • Causa: O grupo de tabelas especificado não existe.

  • Solução: Especifique um grupo de tabelas existente ao criar a tabela ou crie o grupo de tabelas primeiro.

Erro: The specified partition does not exist

  • Causa: Esse erro geralmente ocorre durante gravações ou atualizações de dados quando a tabela de partição filha de destino não existe.

  • Solução: Crie a partição filha necessária antes de gravar os dados.

Erro: create binlog reader failed: Fail to find any shards, please check if the table group is in current virtual warehouse

  • Causa: O grupo de tabelas especificado não está carregado no warehouse virtual atual.

  • Solução: Verifique se o grupo de tabelas está carregado no warehouse virtual. Caso contrário, configure o warehouse virtual para carregá-lo. Para obter detalhes, consulte Autorizar um warehouse virtual a acessar dados.

ERRCODE_INSUFFICIENT_PRIVILEGE ou permission denied

Para erros relacionados a permissões, consulte os seguintes tópicos:

ERRCODE_OUT_OF_MEMORY ou OOM

Erro: Total memory used by all existing queries exceeded memory limitation

  • Causa: A consulta excedeu o limite de memória e acionou um erro de falta de memória (OOM).

  • Solução: Para obter detalhes, consulte Solucionar erros OOM.

ERRCODE_DATATYPE_MISMATCH

Erro: internal error: Datasets has different schema

  • Causa: Os esquemas dos conjuntos de dados combinados (por exemplo, em uma instrução UNION ou INSERT...SELECT) não correspondem em contagem de colunas, ordem ou tipo de dados.

  • Solução: Garanta que a contagem de colunas, a ordem e os tipos de dados sejam consistentes em todas as partes da instrução.

ERRCODE_DIVISION_BY_ZERO

  • Causa: A instrução SQL contém uma divisão por zero.

  • Solução:

    • Evite divisores iguais a zero ou use uma expressão CASE WHEN para tratar esse caso.

    • Crie uma extensão compatível com MySQL e ative a opção que permite divisão por zero. Para obter detalhes, consulte Migrar dados do MySQL para o Hologres.

ERRCODE_STRING_DATA_RIGHT_TRUNCATION

Erro: value too long for type character varying(xxx)

  • Causa: O valor dos dados excede o limite de comprimento character varying(n) definido para a coluna.

  • Solução: Trunque ou transforme os dados, aumente o limite de comprimento do VARCHAR ou altere o tipo da coluna para TEXT.

ERRCODE_PROGRAM_LIMIT_EXCEEDED ou Exceed Odps scan limit

Erro: Exceeds the partition limitation of 512, current match xxx partitions.

  • Causa: A consulta verifica mais de 512 partições na tabela externa do MaxCompute, o que excede o limite padrão.

  • Solução: Adicione mais condições de filtro de partição ou aumente o limite de verificação de partições usando o seguinte parâmetro GUC. Para obter detalhes, consulte FAQ sobre integração com MaxCompute.

    set hg_foreign_table_max_partition_limit =xx;

Erro: Build desc failed: Exceeds the scan limitation of 200 GB, current scan xxx GB.

  • Causa: A quantidade de dados verificados na tabela externa do MaxCompute excede o limite de 200 GB.

  • Solução:

    • Adicione mais condições de filtro para reduzir a quantidade de dados verificados.

    • Importe os dados para uma tabela interna do Hologres, que não possui limite de tamanho de verificação.

ERRCODE_SYNTAX_ERROR

Erro: syntax error at or near "xxxxx"

  • Causa: A instrução SQL apresenta um erro de sintaxe.

  • Solução: Revise e corrija a sintaxe SQL.

ERRCODE_UNDEFINED_FUNCTION

Erro: DISTINCT is not implemented for window functions

  • Causa: Atualmente, o Hologres não oferece suporte à palavra-chave DISTINCT em funções de janela.

  • Solução: Remova a palavra-chave DISTINCT da função de janela.

Erro: ERROR:function xxx does not exist

  • Causa: A extensão necessária não está instalada ou a chamada da função usa uma sintaxe inválida.

  • Solução: Instale a extensão necessária ou corrija a sintaxe da função.

Erro: ERROR: function jsonb_set(json, text[], jsonb, boolean) does not exist

  • Causa: Os tipos de argumento não correspondem à assinatura da função JSONB_SET.

  • Solução: Garanta que o primeiro argumento de JSONB_SET seja do tipo JSONB, não JSON. Para obter detalhes, consulte Tipos de dados JSON e JSONB.

ERRCODE_E_R_E_READING_SQL_DATA_NOT_PERMITTED

Erro: You have NO privilege 'odps:Select' on xxx

  • Causa: A conta atual não tem permissões para consultar a tabela do MaxCompute.

  • Solução: Conceda as permissões necessárias à conta no MaxCompute.

Erro: The sensitive label of column 'xxx' is 2, but your effective label is 0

  • Causa: A conta atual tem acesso apenas a algumas colunas na tabela do MaxCompute.

  • Solução: Conceda permissões mais amplas no nível de coluna no MaxCompute ou consulte apenas as colunas às quais você tem acesso. Para obter detalhes sobre autorização, consulte Gerenciar permissões de usuário usando comandos.

ERRCODE_DUPLICATE_OBJECT

Erro: extension "xxxxx" already exists

  • Causa: A extensão especificada já existe no banco de dados.

  • Solução: A extensão já está instalada. Nenhuma ação é necessária. Para evitar esse erro, use CREATE EXTENSION IF NOT EXISTS.

ERRCODE_INVALID_TEXT_REPRESENTATION ou invalid input

Erro: invalid input syntax for type numeric: \"\"

  • Causa: A coluna NUMERIC contém dados inválidos, como strings vazias, que não podem ser analisados como um valor numérico.

  • Solução: Limpe os dados de source para garantir que estejam em conformidade com o tipo NUMERIC. Por exemplo, converta strings vazias para NULL ou 0.

Erro: invalid input syntax for integer: xxx

  • Causa: A coluna INT contém dados que não podem ser analisados como um número inteiro.

  • Solução: Limpe os dados inválidos.

ERRCODE_BAD_COPY_FILE_FORMAT

Erro: missing data for column "xxx". failed to query next

  • Causa: O formato do arquivo de dados está incorreto. Isso frequentemente ocorre quando os dados contêm o delimitador especificado no comando COPY (como vírgula ou espaço), resultando em uma incompatibilidade na contagem de colunas.

  • Solução: Limpe os dados ou use um delimitador diferente que não apareça nos valores dos dados.

ERRCODE_UNDEFINED_COLUMN

Erro: ERROR: INSERT has more expressions than target columns

  • Causa: O número de valores na instrução INSERT excede o número de colunas na tabela de destino.

  • Solução: Garanta que o número de valores na instrução INSERT corresponda ao número de colunas de destino.

ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE

Erro: bigint out of range

  • Causa: O valor excede o intervalo válido do tipo BIGINT.

  • Solução: Garanta que os dados estejam dentro do intervalo BIGINT (-9.223.372.036.854.775.808 a 9.223.372.036.854.775.807) ou use o tipo NUMERIC para valores maiores.

Erro: numeric field overflow in function round

  • Causa: O valor NUMERIC excede seu limite de precisão definido.

  • Solução: Ajuste a precisão da coluna NUMERIC para acomodar os dados ou limpe os dados para se adequarem à precisão definida.

ERRCODE_DATETIME_FIELD_OVERFLOW

Erro: InsertOverwrite insert select table data failed : column a.unsign_type does not exist

  • Causa: A coluna especificada não existe na tabela ou um nome de parâmetro está incorreto.

  • Solução: Revise e corrija a sintaxe SQL.

Erro: mismatched properties: table orientation is "column" but storage format is "sst"

  • Causa: Propriedades da tabela incompatíveis. O armazenamento orientado a colunas foi especificado, mas o formato de armazenamento foi definido como SST, que é incompatível.

  • Solução: Revise e corrija a instrução SQL.

ERRCODE_INVALID_DATETIME_FORMAT

Erro: invalid value "" for "yyyy". Value must be an integer.

  • Causa: Os dados não estão em conformidade com o formato de data e hora esperado.

  • Solução: Garanta que os dados contenham valores válidos de data e hora antes da gravação.

ERRCODE_CHARACTER_NOT_IN_REPERTOIRE

Erro: invalid byte sequence for encoding "UTF8": 0xe9 0x80

  • Causa: Os dados contêm caracteres que não são válidos na codificação UTF-8.

  • Solução: Limpe os dados inválidos.

ERRCODE_DUPLICATE_TABLE

Erro: relation "xxxx" already exists

  • Causa: A tabela especificada já existe no banco de dados.

  • Solução: Use um nome de tabela diferente ou use CREATE TABLE IF NOT EXISTS para evitar o erro.

ERRCODE_UNTRANSLATABLE_CHARACTER

Erro: character with byte sequence 0xe4 0x9e 0xab in encoding "UTF8" has no equivalent in encoding "GBK"

  • Causa: Um caractere UTF-8 não tem equivalente na codificação GBK de destino.

  • Solução: Limpe os dados inválidos.

ERRCODE_GROUPING_ERROR

Erro: column "xxx" must appear in the GROUP BY clause or be used in an aggregate function

  • Causa: Uma coluna não agregada na lista SELECT não está incluída na cláusula GROUP BY. Todas as colunas na lista SELECT devem aparecer no GROUP BY ou ser usadas em uma função de agregação.

  • Solução: Adicione a coluna à cláusula GROUP BY ou use-a em uma função de agregação.

ERRCODE_INVALID_TRANSACTION_STATE

Erro: SET_TABLE_PROPERTY and CREATE TABLE statement are not in the same transaction for table

  • Causa: As instruções CREATE TABLE e call set_table_property não estão na mesma transação.

  • Solução: Agrupe a instrução CREATE TABLE e todas as instruções call set_table_property no mesmo bloco de transação. Exemplo:

    begin;
    CREATE TABLE tbl (
     xxxx
    );
    call set_table_property('tbl', 'orientation', 'xx');
    call set_table_property('tbl', 'distribution_key', 'xxx');
    commit;

ERRCODE_AMBIGUOUS_COLUMN

Erro: column reference "xxx" is ambiguous

  • Causa: O nome da coluna em uma consulta JOIN é ambíguo porque existe em várias tabelas. Por exemplo, em SELECT id FROM t1 INNER JOIN t2 ON t1.id=t2.id, id na cláusula SELECT é ambíguo porque pode se referir a t1 ou t2.

  • Solução: Qualifique a coluna com o nome da tabela ou alias (por exemplo, t1.id).

ERRCODE_DUPLICATE_COLUMN

Erro: column "xxx" specified more than once

  • Causa: Um nome de coluna aparece mais de uma vez em uma instrução CREATE TABLE.

  • Solução: Remova a coluna duplicada da instrução CREATE TABLE.

ERRCODE_AMBIGUOUS_FUNCTION

Esse erro ocorre quando uma chamada de função corresponde a múltiplas sobrecargas e o banco de dados não consegue determinar qual usar. Para resolver, converta explicitamente os argumentos para os tipos de dados desejados.

ERRCODE_INVALID_COLUMN_DEFINITION

Erro: invalid definition of a numeric type

  • Causa: Uma coluna NUMERIC ou DECIMAL foi definida sem especificar sua precisão.

  • Solução: Especifique a precisão para a coluna NUMERIC ou DECIMAL, como NUMERIC(38, 18).

ERRCODE_CANNOT_COERCE

Erro: cannot cast type date to integer

  • Causa: O tipo DATE não pode ser convertido para o tipo INTEGER.

  • Solução: Modifique a sintaxe SQL para usar uma conversão de tipo válida.

ERRCODE_UNDEFINED_SCHEMA ou ERRCODE_INVALID_SCHEMA_NAME

Erro: schema "xxxx" does not exist

  • Causa: O esquema não existe no banco de dados.

  • Solução: Verifique se o nome do esquema na instrução SQL está correto ou crie o esquema primeiro.

ERRCODE_INTERNAL_ERROR

Indica um erro interno inesperado.

Erro: internal error: Connect timeout, err: std_exception: Connection refused

  • Causa: A instância do Hologres está indisponível ou não responde.

  • Solução: Abra um ticket de suporte para investigar a interrupção da instância do Hologres.

Erro: too many shards in this instance

  • Causa: A contagem de shards especificada excede o limite total de shards da instância.

  • Solução: Verifique o limite de shards da sua instância e reduza a contagem de shards adequadamente. Para obter detalhes, consulte Gerenciamento de instâncias.

Erro: internal error: Write is not allowed in readonly mode

  • Causa: Operações de gravação (INSERT, UPDATE, DELETE) não são suportadas em uma instância secundária (réplica de leitura).

  • Solução: Execute operações de gravação na instância primária. Instâncias secundárias suportam apenas consultas SELECT.

Erro: remaining connection slots are reserved for non-replication superuser connections

  • Causa: A instância atingiu seu limite máximo de conexões. Apenas conexões de superusuário são permitidas.

  • Solução: Use uma conta de superusuário para liberar conexões ociosas. Para obter detalhes, consulte Gerenciar conexões.

Erro: Build desc failed: Column type: information_schema.sql_identifier can not translate into hologres type

  • Causa: A consulta referencia colunas de tabelas do sistema com tipos de dados complexos que o Hologres não suporta.

  • Solução: Evite juntar tabelas do sistema com tipos de colunas complexos em consultas do Hologres.

Erro: ERROR: commit ddl phase1 failed: DDLWrite is not allowed on replica

  • Causa: Operações DDL, como modificar a lista de permissões de endereços IP, não podem ser executadas em uma instância secundária.

  • Solução: Modifique a lista de permissões de endereços IP na instância primária.

Erro: current transaction is aborted, commands ignored until end of transaction block

  • Causa: Um comando em uma transação falhou e comandos subsequentes foram emitidos antes de reverter ou encerrar a transação. Exemplo:

    begin;
    create xxxx
    
    begin;
  • Solução: Execute o comando rollback; para encerrar a transação atual e reverter todas as alterações não confirmadas.

Erro: query length xxxxx exceeded the maximum 102400

  • Causa: O comprimento da consulta excede o limite de 102.400 bytes.

  • Solução: Reescreva a consulta para garantir que seu comprimento esteja dentro do limite especificado.

Erro: Modify record by primary key is not on this table

  • Causa: Esse erro ocorre ao gravar dados com o Flink no modo de atualização em uma tabela que não possui chave primária.

  • Solução: Defina uma chave primária apropriada para a tabela de destino. Para obter detalhes, consulte Chave Primária.

Erro: ERROR: xxx for fe, should not be evaluated

  • Causa: A função é executada no mecanismo do Hologres, mas consultas a tabelas do sistema ignoram o mecanismo. A função não pode ser avaliada fora do contexto do mecanismo.

  • Solução: Não use esta função em consultas a tabelas do sistema do Hologres.

Lidar com nomes de colunas que começam com um dígito

Como o Hologres é compatível com PostgreSQL, nomes de colunas que começam com um dígito devem ser colocados entre aspas duplas (").

Se o nome de uma coluna começar com um dígito, coloque-o entre aspas duplas na sua consulta, conforme mostrado no exemplo a seguir:

select bizdate,"1_day_active_users","7_day_active_users" from t_active_users;

Erro: cannot drop table because other objects depend on it

  • Causa: A tabela possui objetos dependentes, como visualizações que a referenciam.

  • Solução: Exclua os objetos dependentes primeiro e depois exclua a tabela.

Erro: BinaryArray cannot contain more than 2147483646 bytes

  • Causa

    Quando as estatísticas da tabela estão desatualizadas, o otimizador pode escolher um plano de execução subotimizado para uma junção de várias tabelas, fazendo com que o tamanho total de uma única coluna dentro de um lote exceda 2 GB e acione esse erro.

  • Solução

    Execute o seguinte comando nas tabelas envolvidas na junção para atualizar suas estatísticas:

    analyze <tablename>;

    Se o erro persistir após a atualização das estatísticas, os dados podem conter valores de coluna muito grandes. Adicione o seguinte parâmetro GUC antes da instrução SQL:

    set hg_experimental_query_batch_size = 1024;

Erro: Cannot reserve capacity larger than 2^31 - 1 for binary

  • Causa e solução

    • Causa 1: Quando as estatísticas da tabela estão desatualizadas, um plano de execução subotimizado pode fazer com que o tamanho total de uma única coluna dentro de um lote exceda 2 GB, acionando esse erro.

      Solução: Execute o comando analyze na tabela para atualizar suas estatísticas.

      analyze <tablename>;
    • Causa 2: O tamanho dos dados em uma coluna da tabela excede 2 GB.

      Solução: Adicione o seguinte parâmetro GUC antes da instrução SQL para reduzir o tamanho do lote lido por cada consulta:

      set hg_experimental_query_batch_size = 1024;

Erro: internal error: Sequence is used out

  • Causa: Uma coluna do tipo serial esgotou seus valores de sequência de incremento automático.

  • Solução:

    • Se você usar o tipo serial, recrie a tabela e altere o tipo da coluna para bigserial.

    • A gravação em uma coluna serial adquire um bloqueio de tabela e pode reduzir a concorrência. Considere evitar o tipo serial, se possível.

Adicionar quebras de linha nos resultados de consultas SQL

No Hologres, para inserir quebras de linha nos resultados de consultas SQL, use a sintaxe de string de escape com o prefixo E. Em strings regulares, \n ou \r\n são tratados como caracteres literais e não produzem quebras de linha.

  • Exemplos

    -- Incorrect: does not produce a line break.
    SELECT STRING_AGG(name, '\r\n') FROM t1;
    
    -- Correct: use an escape string constant with the E prefix.
    SELECT STRING_AGG(name, E'\r\n') FROM t1;
    
    -- You can also use \n only.
    SELECT STRING_AGG(name, E'\n') FROM t1;
  • Descrição

    O Hologres é compatível com a sintaxe do PostgreSQL. No PostgreSQL, strings com o prefixo E (como E'\n') suportam sequências de escape no estilo C. Nessas sequências, \n representa um caractere de nova linha e \r representa um retorno de carro.

O que fazer se a função NOW() retornar um horário atrasado?

No Hologres, a função NOW() retorna o horário de início da transação atual, não o relógio do sistema em tempo real. Se a consulta for executada dentro de uma transação de longa duração ou se a conexão for reutilizada por meio de um pool de conexões, o horário retornado poderá ficar atrasado em relação ao horário real do sistema.

Para obter o horário atual do relógio do sistema em tempo real, use a função CLOCK_TIMESTAMP(). Ao contrário de NOW(), CLOCK_TIMESTAMP() retorna o horário preciso no momento de cada invocação e não é afetado pelo horário de início da transação.

A instrução DELETE suporta subconsultas como seletores dinâmicos de partição?

Não. No Hologres, a eliminação de partições exige que as condições de partição usem valores estáticos ou valores vinculados parametrizados. Subconsultas e expressões dinâmicas não são suportadas como seletores de partição, como WHERE ds = (SELECT MAX(ds) FROM ...).

O uso de uma subconsulta como condição de partição faz com que a eliminação de partições falhe, o que pode resultar em uma varredura completa da tabela com desempenho severamente degradado. Para evitar esse problema, primeiro consulte o valor da partição e armazene-o em uma variável; em seguida, use o valor estático na instrução DELETE.

Como evitar erros do otimizador ORCA sem modificar parâmetros GUC?

Não é possível resolver esse problema conhecido apenas reescrevendo instruções SQL. Para corrigir erros do otimizador ORCA, atualize a instância do Hologres para a versão 4.0 ou posterior.

Por que uma nova instância relata erros ou apresenta problemas de desempenho enquanto a instância antiga funciona normalmente?

Instâncias novas e antigas do Hologres podem se comportar de maneira diferente devido a diferenças de versão, capacidade de computação e variações de carga de trabalho. Uma nova instância pode usar uma versão diferente do mecanismo com regras de validação mais rigorosas ou configurações padrão alteradas. Além disso, a capacidade de computação e o perfil de carga da nova instância podem diferir dos da instância antiga.

Para resolver problemas de compatibilidade e desempenho em novas instâncias, atualize para a versão estável mais recente do Hologres.

Erro: ERROR: tables can have at most 6400 columns

  • Causa: O Hologres limita cada tabela a um máximo de 6.400 colunas. Mesmo depois de excluir uma coluna com DROP COLUMN, a contagem de colunas nos metadados da tabela continua a acumular. Operações frequentes de ADD COLUMN e DROP COLUMN podem fazer com que a contagem total de colunas nos metadados exceda 6.400, acionando esse erro.

  • Solução:

    • Correção de curto prazo: Recrie a tabela e migre os dados. A nova tabela começa com uma contagem de colunas zerada.

    • Recomendação de longo prazo: Otimize o esquema da tabela consolidando colunas que mudam frequentemente em uma única coluna JSON para evitar operações repetidas de ADD/DROP COLUMN.