Propel2 diff обнаруживает несуществующие изменения с PostgreSQL

Я использую Propel2 ORM с PostgreSQL, это моя конфигурация:

propel:
database:
connections:
default:
adapter: pgsql
dsn: pgsql:host=localhost;port=5432;dbname=sps_db
user: postgres
password: postgres
settings:
charset: utf8

Это моя примерная схема:

<?xml version="1.0" encoding="utf-8"?>
<database name="default" defaultIdMethod="native" defaultPhpNamingMethod="underscore" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="http://xsd.propelorm.org/1.6/database.xsd" >
<table name="product" description="Available products table">
<column name="id_product" autoIncrement="true" primaryKey="true" type="BIGINT" required="true"/>
<column name="id_product_barcode" type="BIGINT" />
<column name="name" type="VARCHAR" size="200" required="true" />
<column name="id_product_manufacturer" type="INTEGER" required="true" />
<column name="id_product_category" type="INTEGER" required="true"/>
<column name="id_product_photo" type="BIGINT" />
</table>
</database>

PostgreSQL 9.5 был недавно установлен на Ubuntu 16.04.
Когда я бегу propel diff а также propel migrate в первый раз все ок и таблицы генерируются.

Вот первая сгенерированная миграция: http://pastebin.com/hK9qwfeA

Если, не меняя схему, я повторно запускаю diff propel, обнаруживает изменения (которых не существует):

Comparing models...
Structure of database was modified in datasource "default": 1 modified tables

Со следующим сгенерированным файлом миграции: http://pastebin.com/Yx143CKp

Конечно, если я выполню миграционный файл, SQL жалуется:

  [PDOException]
SQLSTATE[42701]: Duplicate column: 7 ERROR:  column "id_product" of relation "product" already exists

Я не могу понять, что происходит. Все вышеперечисленное с гораздо более сложной схемой (и с этой тоже) работает корректно с MySQL.

Есть идеи?

РЕДАКТИРОВАТЬ: это SQL из pgSql для таблицы, сгенерированной при первой миграции:

CREATE TABLE public.product
(
id_product bigint NOT NULL DEFAULT nextval('product_id_product_seq'::regclass),
id_product_barcode bigint,
name character varying(200) NOT NULL,
id_product_manufacturer integer NOT NULL,
id_product_category integer NOT NULL,
id_product_photo bigint,
CONSTRAINT product_pkey PRIMARY KEY (id_product)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.product
OWNER TO postgres;
COMMENT ON TABLE public.product
IS 'Available products table';

2

Решение

Понижение PostgreSQL с 9.5.x до 9.4.8 решило эту проблему для меня.

Это может быть ошибка в 9.5.x.

11

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

После некоторой отладки и исследования (мы полагали, что это было изменение метаданных 9.5), мы обнаружили следующее:

https://github.com/propelorm/Propel2/pull/1245

Все сводится к простой команде обрезки при разбиении схемы в postgresql 9.5.

0

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