UPDATE source_domains SET extra_data = REPLACE(extra_data::text, '\u0000', '')::jsonb WHERE extra_data::text LIKE '%\u0000%';
### meu banco estava em sqlite, migrei os dados para o postgres, pode ter ocorrido algum problema com a informação
### SQLSTATE[22P05]: Untranslatable character: 7 ERROR: unsupported Unicode escape sequence DETAIL: \u0000 cannot be converted to text. CONTEXT: JSON data, line 1: ...nk":"78297849","telephones":"ph:+61-4-10852\u0000... parallel worker (Connection: pgsql, SQL: select count(*) as aggregate from "source_domains" where ("extra_data"->>'techSpendUsd' = $5000) and "source_domains"."deleted_at" is null)
A mensagem de erro que você está recebendo indica que há um problema com caracteres não traduzíveis ao tentar manipular dados JSON no PostgreSQL. Especificamente, o erro menciona uma sequência de escape Unicode não suportada, \u0000
, que é o caractere nulo (null character). O PostgreSQL não permite caracteres nulos em strings de texto.
-
Caractere Nulo nos Dados:
- Durante a migração de dados do SQLite para o PostgreSQL, caracteres nulos podem ter sido incluídos nos dados. O PostgreSQL não suporta esses caracteres em strings de texto.
-
Limpeza dos Dados:
- Antes de importar os dados para o PostgreSQL, é importante limpar os dados para remover caracteres nulos. Você pode fazer isso no SQLite ou no arquivo de exportação antes da importação.
-
Remover Caracteres Nulos:
-
Se os dados já estão no PostgreSQL, você pode tentar remover os caracteres nulos diretamente no banco de dados. Aqui está um exemplo de como você pode fazer isso:
UPDATE source_domains SET extra_data = REPLACE(extra_data::text, '\u0000', '')::jsonb WHERE extra_data::text LIKE '%\u0000%';
-
Este comando substitui o caractere nulo por uma string vazia em todos os registros que contêm esse caractere.
-
-
Verificar e Corrigir Dados JSON:
- Certifique-se de que os dados JSON estejam bem formados e não contenham caracteres ou sequências inválidas.
-
Revisar o Processo de Migração:
- Se possível, revise o processo de migração para garantir que os dados sejam exportados e importados corretamente, sem caracteres indesejados.
- Backup: Antes de realizar operações de limpeza ou atualização em massa, faça backup dos dados para evitar perda de informações.
- Testes: Teste as operações de limpeza em um ambiente de desenvolvimento antes de aplicá-las em produção.
- Ferramentas de Migração: Considere usar ferramentas de migração que possam ajudar a identificar e corrigir problemas de compatibilidade entre diferentes sistemas de banco de dados.
Seguindo essas etapas, você deve ser capaz de resolver o problema com caracteres não traduzíveis no PostgreSQL e garantir que seus dados estejam corretos e utilizáveis.
<?php
use Illuminate\Support\Facades\DB;
require_once __DIR__ . '/core.php';
$tables = [
'users',
'jobs',
'failed_jobs',
'source_domains',
'source_files',
'tags',
'campaigns',
'domain_task_runners',
'domain_task_logs',
'domain_error_logs',
];
foreach($tables as $tableName) {
$columnName = 'id';
$sql = "SELECT setval(pg_get_serial_sequence('{$tableName}', '{$columnName}'), coalesce(max($columnName)+1, 1), false) FROM {$tableName}";
$result = DB::statement($sql);
dump([
'sql' => $sql,
'result' => $result,
]);
}