2016-02-26 3 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

Спасибо. Во всяком случае, это наводит меня на правильный путь. Сам код на самом деле не представляет этот конкретный запрос в строке 21 или строке 208 postgres.inc.php, поэтому теперь моя задача - выяснить, что генерирует этот запрос! –

+0

Я думаю, что он всегда был зарезервирован либо из-за * right join *, либо * right() *, поэтому не знаю, почему он работал с другой установкой. –

+0

Я нашел его! Я не понимал, что _acl_right_agg является «функцией» в самой базе данных - здесь я искал файлы PHP. Я запустил grep для этой функции в файлах PHP и обнаружил некоторые сценарии обновления, которые «вставляли» эту функцию в базу данных, что давало мне понять правду. Теперь в новую проблему, но это прогресс. Спасибо. –

Смежные вопросы