2013-03-19 109 views
1

我是PostgresSQL的新用户。我现在工作的项目是在Zend框架中将数据库从mysql升级到postgresSQL。我通过“ESF数据库迁移工具包”将数据库迁移到PostgresSQL。 “Emp_FirstName”,“Emp_LastName”等字段名称在PostgresSQL中如何以“emp_firstname”和“emp_lastname”存储。这导致了代码中的错误。然而,当我在更新PostgreSQL的备案的以Emp_FirstName其示值误差PostgresSQL字段名称

********** Error ********** 

ERROR: column "Emp_FirstName" does not exist 
SQL state: 42703 
Character: 8 

能否请你让我知道是否有可能给申请的名称完全一样MYSQL?

+0

可以显示查询 – PSR 2013-03-19 10:59:19

+0

为了将来的参考,请*总是*显示:精确的查询文本,确切的错误信息(正如您所做的一样,谢谢),精确的PostgreSQL版本'select version()',以及其他相关细节你的平台。事情发生时,这个问题并不重要,但它经常会发生。 – 2013-03-19 11:17:02

回答

1

迁移工具不是“双引号”标识符,所以他们的情况被PostgreSQL压缩为小写。您的代码必须引用标识符,以便保留大小写。 PostgreSQL是区分大小写的,并且可以将未加引号的标识符变大,MySQL is case-insensitive on Windows and Mac and case-sensitive on *nix

有关PostgreSQL行为的详细信息,请参见the PostgreSQL manual section on identifiers and keywords。无论如何,你应该可以阅读,这样你就可以理解字符串引用是如何工作的。

你需要选择其中一个选项:

  • 更改您的代码不引用标识符;
  • 将您的迁移工具更改为在创建模式时引用标识符;
  • 手工迁移模式,而不是使用迁移工具;
  • 手动修复工具生成的SQL中的标识符的引用;或
  • 小写的所有标识符,因此不会对PG

事情的最后一个选项不会帮助你,当你加入甲骨文的支持并发现甲骨文 -cases所有标识符,所以我建议选择前四个选项之一。我没有找到一种方法让迁移工具在30秒内的Google搜索中引用标识符,但没有花费太多时间。我会首先寻找控制迁移工具中引用模式的选项。

PostgreSQL没有配置选项来始终将标识符视为引用或使用区分大小写的标识符比较。

这远不是您遇到的唯一不兼容问题,因此请准备更改查询和应用程序代码。在某些情况下,如果你打算继续支持MySQL,你甚至可能需要一个MySQL查询和一个PostgreSQL查询。

如果您在MySQL中没有使用sql_mode = ANSI并使用STRICT模式,那么与使用这些选项相比,您将会遇到更多移植问题,因为这两个选项都使MySQL更接近SQL标准行为。