2016-02-26 49 views
1

我已被雇佣将运行在PHP/PostgreSQL后端服务器上的网站从1台服务器移动到另一台服务器。我从来没有使用PostgreSQL,并认为这将是一个非常简单的任务。我错了。新服务器:疑难解答PostgreSQL语法错误

我成功地解决了一些与权限和权限被拒绝相关的问题。

我目前的问题困扰了我。当我访问主页时,出现500错误。

新服务器运行PostgreSQL 9.2.14,我不知道旧版本的PostgreSQL是什么版本。我只收到文件&数据库转储 - 我从来没有访问过旧的服务器本身。

检查错误日志,我看到:

[26-Feb-2016 08:06:45 America/New_York] PHP Fatal error: Uncaught exception 'DbQueryException' with message 'ERROR: syntax error at or near ")" LINE 1: SELECT ABS(right) 
         ^QUERY: SELECT ABS(right) CONTEXT: PL/pgSQL function _acl_right_agg(integer[],acl_entity_rights) line 21 at assignment' in /home/user/public_html/includes/lib/db/postgres.inc.php:208 Stack trace: 
#0 /home/user/public_html/includes/lib/db/base.inc.php(439): PostgresDB->query('\n    ...', 3) 
#1 /home/user/public_html/includes/wt-navigation.php(3831): BaseDB->getScalar('\n    ...', '-2', 'anonymous','pub...') 
#2 /home/user/public_html/includes/wt-navigation.php(3913): NavCache::lookupNodeId('-1') 
#3 /home/user/public_html/includes/wt-node-types.php(112): NavCache::lookupEdgeName('/', Object(NavNodeTop)) 
#4 /home/user/public_html/includes/wt-navigation.php(3499): NavNodeRoot->_loadProperties() 
#5 /home/user/public_html/init/site.inc.php(22): require_once('/home/user... in /home/user/public_html/includes/lib/db/postgres.inc.php on line 208 

代码不评论,不表示什么(如果有的话),CMS,它实际上是建立在。

如何知道该网站在以前的服务器上工作得很好,如何解决此语法错误?是否有我应该采取的任何调试步骤(编辑代码)来跟踪这个问题?

回答

1

right是保留字。

它应该在查询中被转义:SELECT ABS("right") ...

+0

谢谢。无论如何,这使我走上了正确的轨道。代码本身实际上并不代表postgres.inc.php的第21行或第208行的特定查询,所以现在我的任务是找出产生该查询的内容! –

+0

我认为它总是被保留,因为* right join *或* right()*所以不知道为什么它在另一个安装上工作。 –

+0

我找到了!我没有意识到_acl_right_agg是数据库本身的“函数” - 在这里我正在搜索PHP文件。我在PHP文件上运行了该函数的grep,并发现一些升级脚本将该函数“插入”到数据库中,这让我意识到了事实。现在遇到一个新问题,但这是进步。谢谢。 –