2016-06-12 2 views
2

Я использую Propel2 ОРМ ж/PostgreSQL, это моя конфигурация:Propel2 дифф обнаруживает несуществующих изменения с 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

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

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.

Любые идеи?

EDIT: это 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'; 
+0

Для записей я переключился на Doctrine 2. –

ответ

11

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

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

+13

Пожалуйста, оставьте этот ответ в покое. Если это правильно, оно предоставляет важную информацию. Если что-нибудь, отредактируйте, чтобы улучшить его. –

+0

Я думаю, это правильный ответ, поскольку он решает проблему, хотя и косвенно –

0

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

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

Она сводится к простой команде дифферента при разделении схемы в PostGreSQL 9.5

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