我有一些现成的 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/