Novos limites de tamanho máximo para objetos de banco de dados (pendente)

Atenção

Essa mudança de comportamento está no pacote 2025_03.

Para saber o status atual do pacote, consulte Histórico do pacote.

Nota

Essa mudança de comportamento foi originalmente introduzida no pacote 2025_02, mas foi transferida para o pacote 2025_03. Essa mudança de comportamento permanece desativada por padrão em 2025_03.

Quando esse pacote de mudança de comportamento é ativado, o armazenamento de objetos de banco de dados é alterado da seguinte forma:

Antes da mudança:

Para colunas dos seguintes tipos, o comprimento máximo permitido é de 16 MB:

  • VARCHAR

  • VARIANT

  • ARRAY

  • OBJECT

Para colunas dos seguintes tipos, o comprimento máximo permitido é de 8 MB:

  • BINARY

  • GEOGRAPHY

  • GEOMETRY

As instruções que tentam armazenar valores maiores do que esses comprimentos máximos permitidos falham.

Após a mudança:

Para colunas dos seguintes tipos, o comprimento máximo permitido é de 128 MB:

  • VARCHAR

  • VARIANT

  • ARRAY

  • OBJECT

Para colunas dos seguintes tipos, o comprimento máximo permitido é de 64 MB:

  • BINARY

  • GEOGRAPHY

  • GEOMETRY

As instruções que tentam armazenar valores até esses novos comprimentos máximos permitidos são bem-sucedidas. As instruções que tentam armazenar valores maiores do que esses comprimentos máximos permitidos falham.

Tanto nas tabelas existentes quanto nas criadas após a alteração, o comprimento padrão para colunas do tipo VARIANT, ARRAY e OBJECT é de 128 MB, e o comprimento padrão para colunas do tipo GEOGRAPHY e GEOMETRY é de 64 MB.

No entanto, o comprimento padrão para colunas do tipo VARCHAR e BINARY é de 16 MB e 8 MB, respectivamente. Para colunas do tipo VARCHAR, você pode aumentar o comprimento especificando-o explicitamente ao criar uma nova tabela ou alterar uma tabela existente. Para colunas do tipo BINARY, você pode aumentar o comprimento especificando-o explicitamente ao criar uma nova tabela. Você não pode alterar o comprimento de uma coluna BINARY em uma tabela existente.

Se uma tabela tiver um novo limite e armazenar objetos que excedam 16 MB, todas as tabelas downstream criadas usando CREATE TABLE AS SELECT (CTAS) a partir dessa tabela falharão. Para evitar essa falha, ajuste a instrução CTAS e defina explicitamente o tamanho da coluna VARCHAR correspondente para 134217728 (67108864 para BINARY).

Se o pacote 2025_03 for ativado e depois desativado, os objetos do banco de dados com limites de tamanho maiores nas tabelas permanecerão acessíveis. O suporte à leitura de objetos grandes foi introduzido com BCR-1779, que já está ativado para todas as contas e não pode ser desativado.

Para obter mais informações sobre os novos limites de tamanho, consulte Limites de tamanho para objetos de banco de dados.

Tamanhos maiores que 16 MB são visíveis nos resultados de consulta

Tamanhos maiores que 16 MB para VARCHAR e 8 MB para BINARY são visíveis nos resultados de consulta. Por exemplo, os tamanhos são visíveis em consultas que chamam a função SYSTEM$TYPEOF ou consultas de exibições que fornecem informações sobre funções e procedimentos (por exemplo, o INFORMATION_SCHEMA Exibição FUNCTIONS).

O exemplo a seguir concatena duas colunas que têm 16 MB de tamanho:

CREATE OR REPLACE TABLE test_larger_sizes(col1 VARCHAR, col2 VARCHAR) AS
  SELECT 'foo', 'bar';

SELECT SYSTEM$TYPEOF(CONCAT(col1, col2)) FROM test_larger_sizes;
Copy
+-----------------------------------+
| SYSTEM$TYPEOF(CONCAT(COL1, COL2)) |
|-----------------------------------|
| VARCHAR(33554432)[LOB]            |
+-----------------------------------+

Para funções e procedimentos, os novos tamanhos são mostrados na exibição INFORMATION_SCHEMA FUNCTIONS:

CREATE OR REPLACE FUNCTION test_larger_sized_func(in_arg VARCHAR)
  RETURNS VARCHAR
  LANGUAGE JAVASCRIPT
  CALLED ON NULL INPUT AS
$$
  RETURN NULL;
$$
;

SELECT data_type FROM INFORMATION_SCHEMA.FUNCTIONS
  WHERE function_name = 'TEST_LARGER_SIZED_FUNC';
Copy
+--------------------+
| DATA_TYPE          |
|--------------------|
| VARCHAR(134217728) |
+--------------------+

A mensagem de erro muda para tamanhos maiores que 16 MB

A mensagem de erro pode mudar para algumas consultas.

O exemplo a seguir é de uma inserção para uma coluna VARCHAR que retorna um erro:

CREATE OR REPLACE TABLE test_larger_size_error(col VARCHAR);
INSERT INTO test_larger_size_error SELECT RANDSTR(20000000, 1);
Copy

A seguinte mensagem de erro é retornada antes da alteração:

100082 (22000): Max LOB size (16777216) exceeded, actual size of parsed column is 20000000

A seguinte mensagem de erro é retornada após a alteração:

100078 (22000): String
'CaFHJdoX3upWliCCdAPXXgytQuXzQpFO4laQEFdmiE1NDOywjwHoBqSNTCzTW66ynuR7EsI4ZxStCh3VMIBMYeHWgv1gUZRmHEK4kGmZcC02jGQhnnFJ0jtcIEWBIN6vKGkvSwG482IvfgVVwF3FTj7sb86t1SK9qigI6ujlSNByytIYBk0lkI1MM0zpRFeH2BNvGxtI.'
is too long and would be truncated

Drivers suportados

Talvez você precise atualizar a versão do driver para a que suporta objetos de banco de dados maiores. Caso contrário, um erro semelhante ao seguinte pode ser retornado:

100067 (54000): The data length in result column <column_name> is not supported by this version of the client.
Actual length <actual_size> exceeds supported length of 16777216.

Para obter informações sobre os drivers compatíveis, consulte Versões de driver que oferecem suporte a objetos grandes no conjunto de resultados.

Suporte a Iceberg

Nas tabelas Iceberg não gerenciadas, o comprimento padrão das colunas VARCHAR e BINARY é de 128 MB. Esse limite se aplica a tabelas recém-criadas ou atualizadas. As tabelas criadas antes da ativação do novo limite de tamanho e não atualizadas ainda têm o limite de tamanho antigo. Atualize as tabelas existentes para aumentar os limites de tamanho.

Nas tabelas Iceberg gerenciadas, o comprimento padrão das colunas VARCHAR e BINARY é de 128 MB. As tabelas criadas antes da ativação do novo limite de tamanho ainda têm o limite de tamanho antigo.

Para aplicar o novo tamanho às colunas do tipo VARCHAR nessas tabelas, recrie as tabelas ou altere as colunas. O exemplo a seguir altera uma coluna para usar o novo limite de tamanho:

ALTER ICEBERG TABLE my_iceberg_table
  ALTER COLUMN col1 SET DATA TYPE VARCHAR(134217728);
Copy

Para aplicar o novo tamanho às colunas do tipo BINARY nessas tabelas, recrie as tabelas. Você não pode alterar o comprimento de uma coluna BINARY em uma tabela existente.

Ref: 1942