将oracle迁移到postgresql编码的字节序列无效;UTF8";:0x00
我正在将应用程序从oracle迁移到postgresql。在我已经迁移的其中一个函数中,我将数据从不同的oracle db(oracle中的db link,postgresql中的oracle_fdw扩展)从几个表复制到postgresql db中的本地表中。但是,我得到了下一个错误:将oracle迁移到postgresql编码的字节序列无效;UTF8";:0x00,oracle,postgresql,utf-8,plpgsql,oracle-fdw,Oracle,Postgresql,Utf 8,Plpgsql,Oracle Fdw,我正在将应用程序从oracle迁移到postgresql。在我已经迁移的其中一个函数中,我将数据从不同的oracle db(oracle中的db link,postgresql中的oracle_fdw扩展)从几个表复制到postgresql db中的本地表中。但是,我得到了下一个错误: 编码“UTF8”的字节序列无效:0x00 我在这个论坛上看到一些人有这样的问题,但他们没有尝试直接从远程数据库复制数据(他们从转储或csv加载数据…) 不知该怎么办?PostgreSQL不允许字符串中的“零”字符
编码“UTF8”的字节序列无效:0x00
我在这个论坛上看到一些人有这样的问题,但他们没有尝试直接从远程数据库复制数据(他们从转储或csv加载数据…)
不知该怎么办?PostgreSQL不允许字符串中的“零”字符
您必须先清理Oracle数据,然后才能从PostgreSQL检索它们。PostgreSQL不允许字符串中包含“零”字符
您必须先清理Oracle数据,然后才能从PostgreSQL中检索它们。现在它可以与Oracle_fdw 2.3一起使用+ 这是我使用的代码
select 'ALTER FOREIGN TABLE "'||table_schema||'"."'||table_name||'" ALTER COLUMN "'||column_name||'" OPTIONS (ADD strip_zeros ''true'');'
from information_schema."columns" c
where table_name ='my_foreign_table_name'
and table_schema ='my_schema_name_where_foreign_table_created'
and udt_name in ('varchar', 'bpchar');
现在它可以与oracle_fdw 2.3一起使用+ 这是我使用的代码
select 'ALTER FOREIGN TABLE "'||table_schema||'"."'||table_name||'" ALTER COLUMN "'||column_name||'" OPTIONS (ADD strip_zeros ''true'');'
from information_schema."columns" c
where table_name ='my_foreign_table_name'
and table_schema ='my_schema_name_where_foreign_table_created'
and udt_name in ('varchar', 'bpchar');
什么是Oracle DB编码?nls_字符集:IW8ISO8859P8什么是Oracle DB编码?nls_字符集:IW8ISO8859P8“零”字符是什么意思?如何在数据进入postgresql之前对其进行过滤?我在postgresql中运行查询insert into local_table select*from remote_table带有“零字符”我是指带有ASCII(或UNICODE)代码点0的字符。在“从
远程\u表中选择”期间引发错误-其中的某些字符串列包含此类字符。您必须修复Oracle端的数据,我认为这些只是没有任何值的varchar列—varchar的null。那么我到底需要更改什么呢?不,空值不会是问题。如果您在Oracle中选择这样的有问题的值:从atable中选择dump(badcol,16),其中id=42
您将在其中某处看到一个字节0x00。这就是问题所在(将badcol
、atable
、id
和42替换为与您的情况相关的值)。我在postgresql中得到的错误没有指定哪一行有问题-只有表名和列。我怎样才能从这里开始?对于exmaple:插入MANUIM,从MANUIM\u产品中选择*;错误:编码“UTF8”的字节序列无效:0x00上下文:转换列“street”用于“manuim_prod”的外部表扫描,第922311行“零”字符是什么意思?如何在数据进入postgresql之前对其进行过滤?我在postgresql中运行查询insert into local_table select*from remote_table带有“零字符”我是指带有ASCII(或UNICODE)代码点0的字符。在“从远程\u表中选择”期间引发错误-其中的某些字符串列包含此类字符。您必须修复Oracle端的数据,我认为这些只是没有任何值的varchar列—varchar的null。那么我到底需要更改什么呢?不,空值不会是问题。如果您在Oracle中选择这样的有问题的值:从atable中选择dump(badcol,16),其中id=42
您将在其中某处看到一个字节0x00。这就是问题所在(将badcol
、atable
、id
和42替换为与您的情况相关的值)。我在postgresql中得到的错误没有指定哪一行有问题-只有表名和列。我怎样才能从这里开始?对于exmaple:插入MANUIM,从MANUIM\u产品中选择*;错误:编码“UTF8”的字节序列无效:0x00上下文:为“manuim_prod”的外部表扫描转换列“street”,第922311行