postgresql - 如何在不使用双引号的情况下以驼峰而不是小写形式获取 Postgres 中的列别名?

标签 postgresql

我有一些现成的 mysql 查询,我想将其转换为 Postgres sql。但问题是列名 alise Postgres 将所有名称返回为小写格式。我可以使用双引号,但我有很多查询,所以它非常昂贵。有没有什么办法可以用驼峰字母而不是小写字母来获取数据。

最佳答案

正如@a_horse_with_no_name 所说,出于所有实际目的,这是不可能的。我想您可以下载源代码,修改它以按照您喜欢的方式工作,然后重新编译和测试它。但我认为这是一个非常非常糟糕的主意。

在数据库方面,您有两个明智的选择。

  • 用什么替换 MySQL 的反引号。
  • 用双引号替换 MySQL 的反引号。

假设您从 MySQL 开始。

create table `Test` (
  `TestId` integer primary key,
  `TestName` varchar(35) not null
);

create or replace view `TestAll` as
select `TestId`, `TestName` 
from `Test`;

将所有反引号替换为空。在 PostgreSQL 中运行它。

create table Test (
  TestId integer primary key,
  TestName varchar(35) not null
);

create or replace view TestAll as
select TestId, TestName 
from Test;

PostgreSQL 会将所有标识符折叠为小写。一切都会正常工作。 (除非您可能正在使用保留字。总是一个坏主意。)

第二种选择,用双引号替换反引号。

create table "Test" (
  "TestId" integer primary key,
  "TestName" varchar(35) not null
);

create or replace view "TestAll" as
select "TestId", "TestName"
from "Test";

PostgreSQL 保留分隔标识符的大小写。一切仍然有效。

您选择的方式可能与您的应用程序代码的编写方式有关。 Rails、Laravel 和 Django 等 Web 框架始终生成带分隔符的标识符。 (我认为这可能适用于所有 Web 框架;这是生成 SQL 的最安全方式。)其他程序可能会或可能不会使用定界标识符,并且它们在转换时可能或多或少会遇到麻烦。


如果您有一个文本格式的 MySQL 转储文件,您可以使用此 sed 单行代码将每个反引号替换为双引号。

$ sed -i -e 's/`/"/g' mysql_dump.file

用这种方式替换所有反引号。

$ sed -i -e 's/`//g' mysql_dump.file

这样,sed 将就地修改文件,而不进行备份。使用 man sed 以获得更多选项。

关于postgresql - 如何在不使用双引号的情况下以驼峰而不是小写形式获取 Postgres 中的列别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28404107/

相关文章:

python - 在 Postgresql 中保存时区时出错

perl - 如何在 Solaris 上为 Perl 编译 64 位 Postgres 绑定(bind)?

python - 自定义用户类和 Postgresql 模式的 Django "relation does not exist"错误

ruby-on-rails - 如何使用 change_column 在 rails migration postgres 中使用 hstore 生成正确的 sql

java - 尝试通过 liquibase、postgresql、spring boot 创建新数据库。结果-> "databasechangelog"不存在

sql - 使用 PL/pgSQL 数组时出现查询错误

mysql - 如何在 SQL 中将多行合并为一行?

django - 使用 Django 和 postgresql 创建 Azure 网站

php - GCP SQL Postgres 权限问题 : can't run a query with postgres user with generated symfony db

Postgresql levenshtein 和预组合字符与组合字符