Peter Kalambet
Technogeek Labs
Published in
1 min readDec 31, 2015

--

Те, кто по прежнему сидит на IBM Bluemix или Heroku в качестве хост-платформ для blog-engine Ghost и пытались обновиться на версию 0.7 или выше могли столкнуться с проблемой при обновлении-миграции баз данных Postgres.

ERR ERROR: "pg_stat_statements" is not a table 
ERR error: "pg_stat_statements" is not a table
ERR at Connection.parseE (/home/vcap/app/node_modules/pg/lib/connection.js:534:11)
...

Проблема относится не только к таблицам pg_*, но и ко всем “сервисным” таблицам. Связано это с тем, что при PaaS/сервисом-хостинге прав на удаление таких таблиц у пользователя просто нет.

Ранее код миграции БД содержал исключительное условие в клаузе WHERE для Postgress-клиента, но, во-первых, это условие убрали (сам коммит тут и немного обсуждений тут), во-вторых, только оно бы не помогло, потому что кроме таблицы pg_stat_statements там ещё есть таблицы geography_columns, spatial_ref_sys и другие.

Чтобы решить эту проблему достаточно просто добавить обратно WHERE-клаузу и немного её расширить. Ссылка на GitHub.

На pull request эти изменения, безусловно, не тянут. Так как решают проблему конкретного сервис-провайдера с конкретным тарифным планом (права на изменения баз на платных тарифах ElephantSQL могут быть другие). Как мне кажется, правильным решением было бы брать список таблиц принадлежащих Ghost и проводить операции именно над ними, а не обходить весь список имён таблиц в information_schema.tables.

--

--