Oracle到Postgres转换的包级别常量

时间:2009-10-23 20:13:40

标签: oracle postgresql

我正在考虑将应用程序从Oracle转换为具有数据库中所有业务逻辑的Postrges。目前有一个非常大的包,有大约200个公共常量变量。 Postgres不支持包级变量,所以我在讨论如何转换它。我看到两种可能性,但需要一些关于哪种更好的看法(它们看起来都很讨厌):

  1. 将每个变量转换为返回静态值的函数。这似乎是最有可能的,但似乎非常难看。
  2. 从值中创建一个表。这个问题是它们主要被其他包/函数使用。还有各种类型(数字与变量)。
  3. 有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我选择1,应该很容易编写一个脚本来自动为你执行此操作,然后保持包尽可能接近其原始定义。

答案 1 :(得分:1)

我会混合两种选择。选项将保存在表格中:

create table package_options ( option_name text, option_value text )

为了便于添加新选项或修改并由函数返回以便于查询使用

create function get_option(text) returns text as
$$ select option_value from package_options where option_name=$1 $$
language sql stable;

可能还有get_int_option(text),将值转换为int等。

您还可以添加option_type列和一些约束,以检查类型有效性。

答案 2 :(得分:1)

我正在采用性能方法和接口方法,因为你的问题就出现了。

根据您使用选项2的数据库使用情况,可能会导致数据库中出现热点。这是一个更极端的场景 - 假设你有5000个用户登录系统,这反过来会导致你的代码被激活,而这反过来又选择了你的package_options表。在任何特定时刻,您可能有数千名用户访问该表。

这可能是一个问题,它可能不会PG很好地处理并发性,所以只有测试才能证明什么。您必须对其进行测试才能确定,但​​在考虑这种方法时需要牢记这一点。我还会测试你的选项1场景,看看除了作为一个简单的管理和使用界面之外,哪个表现更好。考虑到所需的测试相对简单,为什么不对它进行测试,这样你就不会因为使用场景选择不好而陷入困境。