我们正在使用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上类似的线程
谢谢你的意见或反馈
斯文
发布于 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中模式的每日检查来强制执行它。
丑得像地狱一样。
发布于 2011-10-13 05:25:20
奇怪的是,我可能有你需要的东西,尽管答案可能是一个惊喜。
我们的PLSQL混淆器通常用于对PLSQL代码进行置乱,以使其难以理解。
它所做的事情之一是重命名标识符。通常,它会选择“随机”名称,这些名字很难让人们可靠地手动阅读或复制。但是,有一个功能可以让您精确地控制名称的映射方式。(全部都在文档中),您可以很容易地使用它来实现您想要的效果。
对于标识符名称的长度,这并不奇怪,因此,使用长标识符对PLSQL进行天真的转换不会影响到它。重命名之后,您需要确保名称都适当地短。
发布于 2011-10-13 15:50:45
我使用perl并指向一个pg_dump文件。关于缩短这个名字,我有这样的想法:
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
外键、触发器等。
https://stackoverflow.com/questions/7749312
复制相似问题