PostgreSQL 可以创建区分大小写的数据库吗?

Gre*_*ill 10 postgresql case-sensitive

我正在将一些代码从某些版本的 Sybase 移植到 PostgreSQL。这是一个使用 Sybase 客户端库的 C 应用程序。我的方法是编写一个翻译层,将调用转换dbsqlexec()PQexec()(例如)。那部分主要是工作。

看来 Sybase 数据库是以区分大小写的方式设置的(关于数据库对象名称)。例如,既有WIDGET桌子又有widget桌子。看起来这个应用程序中的约定是全大写名称表示实际数据表,而小写名称在运行某些处理时用作临时表。

根据4.1 Lexical Structure,“关键字和未加引号的标识符不区分大小写。 ”我知道我可以双引号标识符来禁用自动折叠为小写,但我不想通过无数行手动执行此操作使用此数据库的代码。

有没有办法设置 PostgreSQL 来禁用数据库对象标识符的这种自动大小写折叠?

我的替代方法是编写一些代码来检查每个 SQL 语句并在每个标识符(不是关键字)周围加上双引号。

Gre*_*ill 3

我最终编写了一些代码,将应用程序生成的 SQL 转换为 PostgreSQL 兼容的 SQL。这非常简单:

  • 将语句拆分为合理的标记,跳过单引号字符串文字
  • 双引号不是关键字或数字的任何内容

我还利用这一层将调用转换为isnullto coalesce。到目前为止,它运行得很好。