Поддержка CakePHP 3.x для базы данных PostgreSQL 8.0 — 8.2

Из того, что я могу сказать, CakePHP 3.x заявляет о поддержке поддержки PostgreSQL 8+, но на практике я обнаружил, что в стандартной комплектации отсутствует PostgreSQL 8.3 для regclass :: text. Если вы попробуете простую модель в CakePHP 3, вы получите ошибку, подобную этой

There was 1 error:

1) App\Test\TestCase\Model\Table\SampleListsTableTest::testFoo
Cake\Database\Exception: SQLSTATE[42846]: Cannot coerce: 7 ERROR:      cannot cast type regclass to text
LINE 11: ...  pg_get_serial_sequence(attr.attrelid::regclass::text, attr...

Это потому, что преобразование regclass :: text не существует до PostgreSQL 8.3. Я проверял это на нескольких экземплярах PostgreSQL 8.2. Исправление довольно просто, но не сразу очевидно.

DROP CAST IF EXISTS (regclass AS text);
CREATE OR REPLACE FUNCTION public.text(regclass) RETURNS text STRICT
STABLE AS '
SELECT pg_catalog.textin(pg_catalog.regclassout($1::regclass));'
LANGUAGE 'SQL';
CREATE CAST (regclass AS text) WITH FUNCTION public.text(regclass);

Я не уверен, следует ли считать это ошибкой в ​​CakePHP 3.x или ее следует включить в качестве предостережения для поддержки более старых Postgres в примечаниях по установке, но в любом случае, если кто-то может подтвердить это поведение, было бы замечательно.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]