Todos os produtos
Search
Central de documentação

Hologres:FAQ sobre instruções SQL do Hologres

Última atualização: Aug 18, 2026

Este tópico lista códigos de erro comuns de SQL do Hologres, com suas 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 Gerencie user permissions by using commands.

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 deduplicar 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 origem contêm chaves primárias duplicadas. Para mais informações, consulte Common errors.

    • Esse erro também pode ocorrer quando uma tabela tem tempo de vida (TTL) expirado e os dados vencidos ainda não foram excluídos fisicamente. Nesse caso, use a função hg_remove_duplicated_pk para limpar os dados duplicados. Para obter detalhes, consulte Common errors.

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 de partição. Por exemplo, inserir uma linha com valor de partição diferente de '20240110' em uma partição definida para '20240110' gera 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 de partição.

ERRCODE_NOT_NULL_VIOLATION, 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 com restrição NOT NULL.

  • Solução: Remova as linhas com 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 se propagaram, ou quando uma operação TRUNCATE ou DROP foi executada na tabela durante a consulta.

  • Solução: Use o Query Insight no HoloWeb para verificar operações DDL simultâneas, como TRUNCATE ou DROP. Resolva 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 o tempo limite. Para obter detalhes sobre configurações de tempo limite, consulte Gerencie queries.

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

  • Causa: A consulta foi cancelada, normalmente 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 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: Verifique no Query Insight se alguma operação TRUNCATE ou DROP foi executada simultaneamente à 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 direta de dados 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 Remove a user from a user group.

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 aceita 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 transações DML. Para obter detalhes, consulte SQL transaction capabilities.

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

  • Causa: Uma publicação foi criada para uma tabela sem binlog ativado. 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 habilitado. Para obter detalhes, consulte Use JDBC to consume Hologres binlogs.

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

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

  • Solução: O alvo de conflito no 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 de distribuição. Para alterar esses valores, execute DELETE na linha antiga e INSERT em 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 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 Date and time functions.

Erro: Group by key is type of imprecise not supported

  • Causa: A cláusula GROUP BY referencia uma coluna com 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 aceitam 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 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 permite alterar o tipo de dados de uma coluna com ALTER TABLE.

  • Solução: Para modificar o tipo de uma coluna, recrie a tabela com o tipo 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 Gerencie materialized views by using 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 Gerencie materialized views by using SQL.

Erro: TransactionRowStore::DumpFlushDelta Not implemented

  • Causa: A versão atual do Hologres tem 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 a cláusula USING em exclusões em lote. 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 virtual warehouse atual.

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

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 Troubleshoot OOM errors.

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 quantidade de colunas, ordem ou tipo de dados.

  • Solução: Garanta que a quantidade 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 essa situação.

    • Crie uma extensão compatível com MySQL e ative a opção que permite divisão por zero. Para obter detalhes, consulte Migrate data from MySQL to 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, ultrapassando o limite padrão.

  • Solução: Adicione 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 about MaxCompute integration.

    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 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 tem 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 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 do JSONB_SET seja do tipo JSONB, não JSON. Para obter detalhes, consulte JSON and JSONB data types.

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 da 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 Gerencie user permissions by using commands.

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 valor numérico.

  • Solução: Limpe os dados de origem para garantir 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 interpretados como 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 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 o limite de precisão definido.

  • Solução: Ajuste a precisão da coluna NUMERIC para acomodar os dados ou limpe os dados para caberem na 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 invá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, o id na cláusula SELECT é ambíguo, pois pode se referir tanto a t1 quanto a 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: Envie 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 instância e reduza a contagem adequadamente. Para obter detalhes, consulte Instance management.

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 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 o 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 Gerencie connections.

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 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 sem chave primária.

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

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 às tabelas do sistema do Hologres.

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

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

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

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 primeiro os objetos dependentes 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 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 as 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 as 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 usar o tipo serial, recrie a tabela e altere o tipo da coluna para bigserial.

    • Gravar 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 prefixadas com E (como E'\n') suportam sequências de escape 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 horário atrasado?

No Hologres, a função NOW() retorna a hora 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 longa ou se a conexão for reutilizada por meio de pool de conexões, o horário retornado pode ficar atrasado em relação ao horário real do sistema.

Para obter o horário atual 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 pela hora 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 ...).

Usar subconsulta como condição de partição faz com que a eliminação de partições falhe, o que pode resultar em varredura completa da tabela com desempenho severamente degradado. Para evitar esse problema, primeiro consulte o valor da partição e armazene-o em 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 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. Nova instância pode usar 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 no máximo 6.400 colunas. Mesmo após excluir 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 contagem de colunas zerada.

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