PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

релацията вече съществува след добавяне на поле Many2many в odoo

Разбрах това. Трябва да кажа, че мисля, че това технически се квалифицира като грешка в Odoo.

Резюме

Имената на моите модели бяха твърде дълги. Всеки път, когато задавате _name свойство, по-дълго от 16 знака, настройвате себе си, за да изпитате потенциално този проблем.

Подробности

Когато създадете Mnogo2many релация, odoo настройва нова таблица на база данни за тази релация и след това създава два индекса на база данни за таблицата. Техните имена са както следва:

  • __rel__id_index
  • __rel__id_index

Където и <модел2> са _name свойство на подходящ модел. Можете да наблюдавате това в _m2m_raise_or_create_relation метод на BaseModel на odoo .

Има обаче една уловка. Идентификатори по подразбиране в PostgreSQL (включително идентификатори на индекси) не може да бъде по-дълъг от 63 знака :

Odoo не взема това предвид. Той щастливо генерира много по-дълги идентификатори, които след това се съкращават от PostgreSQL. Ако и двата идентификатора споделят едни и същи първи 63 знака (което за по-дълги идентификатори е доста вероятно), те ще бъдат третирани от PostgreSQL като еднакви. Това означава, че първият индекс ще бъде създаден, но създаването на втория ще доведе до грешка, тъй като той споделя идентификатор, който вече е бил използван (поне според PostgreSQL).

И така, каква е максималната дължина на _name имотът може да има, като избягва проблема? Зависи от това колко знака се споделят между имената на два модела в m2m отношение, но за да избегнете напълно съкращаването на идентификатора, никога не трябва да използвате имена, по-дълги от 16 знака.

Защо 16? PostgreSQL идентификаторите не могат да бъдат по-дълги от 63 знака. В индексните идентификатори, генерирани от odoo, има 15 фиксирани знака. Това ни оставя с 48 знака, които трябва да поемат три повторения на имена на модели. Това от своя страна ни оставя с 16 знака за едно име на модел.

Друг начин за заобикаляне на проблема би бил ръчното задаване на кратко име на релация чрез relation атрибут на Mnogo2many поле.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Шаблони и модификатори за числово форматиране в PostgreSQL

  2. Как да създадете последователност, използвайки начална стойност от заявка?

  3. PostgreSQL схеми/пространства от имена с Django

  4. Как мога да накарам инсталирането на gem да работи на OS X Lion с Ruby 1.8.7 без сег неизправност?

  5. Как да стартирате PostgreSQL Server на Mac OS X чрез Homebrew