首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从PostgreSQL到Oracle

从PostgreSQL到Oracle
EN

Stack Overflow用户
提问于 2011-10-13 03:59:03
回答 3查看 953关注 0票数 1

我们正在使用PostgreSQL (我们对此很满意!),但由于客户策略,我们需要在甲骨文上运行我们的应用程序。不幸的是,我们的ERD充满了超过30个字符长度的标识符(列名和关系名称)(甚至21世纪的Oracle11g也无法消化这一点,ORA-00972 !)

您知道有什么工具可以帮助自动重命名长名吗?

my_very_long_rel_from_table1_to_table2 to rel_0123

或者其他灵巧的菜谱?(不,我们不会重命名50+表中的所有内容)

https://stackoverflow.com/questions/194945/migrating-from-postgresql-to-oracle上类似的线程

谢谢你的意见或反馈

斯文

EN

回答 3

Stack Overflow用户

发布于 2011-10-13 05:55:32

Excel。然后是sed

列出Postgres架构中的所有标识符(例如来自information_schema)。粘贴到A列中的Excel中。复制到B列。创建一个列C,它将显示B. Sort中的标识符名长度。手动缩短B中的标识符,长度超过30,直到没有任何标识符为止(我建议不要自动这样做,因为这会使您的数据库混淆)。创建列D,其中D1为:串联(“sed 's/",A1,"/",B1,”/g“)。

复制D列以文件"change_columns.sh“。通过它过滤Postgres架构。过滤您的客户程序源代码通过它。

引入关系名称不超过30个字符的策略。例如,使用cron中模式的每日检查来强制执行它。

丑得像地狱一样。

票数 2
EN

Stack Overflow用户

发布于 2011-10-13 05:25:20

奇怪的是,我可能有你需要的东西,尽管答案可能是一个惊喜。

我们的PLSQL混淆器通常用于对PLSQL代码进行置乱,以使其难以理解。

它所做的事情之一是重命名标识符。通常,它会选择“随机”名称,这些名字很难让人们可靠地手动阅读或复制。但是,有一个功能可以让您精确地控制名称的映射方式。(全部都在文档中),您可以很容易地使用它来实现您想要的效果。

对于标识符名称的长度,这并不奇怪,因此,使用长标识符对PLSQL进行天真的转换不会影响到它。重命名之后,您需要确保名称都适当地短。

票数 0
EN

Stack Overflow用户

发布于 2011-10-13 15:50:45

我使用perl并指向一个pg_dump文件。关于缩短这个名字,我有这样的想法:

代码语言:javascript
运行
复制
sub shorten_name {
    my $name = shift;
    return $name if (length $name <= 30);

    my @abbreviations = ('calculation,calc', 'measure,meas', 'point,pt', ...); 

    my $new_name = $name;
    foreach my $abbr (@abbreviations) {
        my ($f, $r) = split ',', $abbr;
        $new_name =~ s/$f/$r/g;
        last if (length($new_name) <= 30);
    }

    if (length $new_name > 30) {
        warn "Unable to shorten $name\n";
    }
    return $new_name;
}

我使用数组和散列,因为我想控制使用缩短的顺序(一些缩写比其他的要好得多)。

这是一个非常丑陋的脚本,但它以可重复的方式完成了任务。

其他需要注意的是数据类型映射(尤其是oracle不支持的数据类型)、域、on update外键、触发器等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7749312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档