PostgreSQL:如何定义和使用“全局”常量

时间:2013-04-04 19:05:22

标签: postgresql user-defined-types

我正在写一些处理一些批量上传数据的存储过程。可以标记每个输入行以查找各种应用程序错误。我总共有近100种不同类型的错误,以及十几种不同的文件加载程序。

在C / C ++中,错误代码的习惯用法是项目范围的包含(类)文件中的一堆#defineconst,然后在应用程序代码中使用符号名称。编译器检查任意拼写。 Java / C#也提供了类似的构造。如何在plpgsql中获得类似的效果?我已经玩过在postgresql.conf中设置这些,但这是一个合理的方法吗?它显然不会在编译时工作。我不想将conf文件的写权限授予应用程序开发人员。此外,它将需要为每次应用程序更改重新加载conf,可能是系统稳定性问题。我相信还有许多其他缺点。

同样,我还需要简单的“用户定义”类型,其中我想修复某些应用程序数据类型的表示,例如“part_number”为varchar(20),“currency_code”是char(3)等等。同样,在C / C ++中,可以根据具体情况使用typedefstruct。所以我尝试在PostgreSQL中创建一个TYPE,以便在表,视图和函数头之间保持一致的使用。但是对于UDT,我遇到了一系列新问题:指定主键,以及CSV输入规范,其中现在必须在括号中给出值。在PostgreSQL中有没有不同的方法来处理这些目标?

我是PostgreSQL的新手。我们在Linux上使用9.2。我很想使用预处理器,但它与我见过的任何设计工具都不兼容。

1 个答案:

答案 0 :(得分:1)

对于第一个问题,您可能会使用ENUM类型。

CREATE TYPE flag AS ENUM ('ok', 'bad', 'superbad');

至少可以对每个旗帜状态的拼写进行完整性检查。

对于你的第二个问题(并且请在将来提出多个问题 - 因为它会保留主题)你可能想看看DOMAINs