我正在将一些代码从 Sybase 的某个版本移植到 PostgreSQL。这是一个使用 Sybase 客户端库的 C 应用程序。我的方法是编写一个转换层,将调用转换dbsqlexec()
为PQexec()
(例如)。那部分主要是工作。
似乎 Sybase 数据库是以区分大小写的方式设置的(相对于数据库对象名称)。例如,有一张WIDGET
桌子和一张widget
桌子。看起来这个应用程序中的约定是全大写的名称表示实际的数据表,而小写的名称在运行某些处理时用作临时表。
根据4.1 Lexical Structure,“关键字和未引用的标识符不区分大小写。 ”我知道我可以双引号标识符以禁用自动折叠为小写,但我不想通过无数行手动执行此操作使用此数据库的代码。
有没有办法设置 PostgreSQL 来禁用数据库对象标识符的这种自动大小写折叠?
我的替代方法是编写一些代码来检查每个 SQL 语句并在每个标识符(不是关键字)周围加上双引号。
我最终编写了一些代码,将应用程序生成的 SQL 转换为与 PostgreSQL 兼容的 SQL。这很简单:
我还利用这一层将调用转换
isnull
为coalesce
. 到目前为止,它运作良好。不是直接的。您也许可以对 PostgreSQL 源代码进行相对较小的更改,然后重新编译它。(从 src/backend/parser/parser.c 开始?)但如果它非常简单,我会感到惊讶。