Из того, что я могу сказать, 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 в примечаниях по установке, но в любом случае, если кто-то может подтвердить это поведение, было бы замечательно.
Задача ещё не решена.
Других решений пока нет …