Uploaded image for project: 'Doctrine DBAL'
  1. Doctrine DBAL
  2. DBAL-50

PgSQL driver does not create indexes on foreign key columns

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: 2.0.0-BETA4
    • Fix Version/s: 2.0.0-RC1-RC3
    • Component/s: Schema Managers
    • Labels:
      None

      Description

      The PostgreSQL database does not create indexes for foreign key columns, the user has to create them by hand. I think that indexes for foreign keys should be created automatically... On my system, an index will not be created automatically for the group_id column in the user table.

      /**
       * @Entity
       */
      class User {
          /**
           * @ManyToOne(targetEntity="Group", inversedBy="users")
           */
          protected $group;
      }
      
      /**
       * @Entity
       */
      class Group {
          /**
           * @OneToMany(targetEntity="User", mappedBy="group")
           */
          protected $users;
      
          public function __construct() {
              $this->users = new \Doctrine\Common\Collections\ArrayCollection();
          }
      }
      

      I am using current git clone and PgSQL 8.4.

        Issue Links

          Activity

          Hide
          petr_motejlek Petr Motejlek added a comment -

          I'd just like to add that there's an even worse problem with this – the indices are not created even for tables that Doctrine creates automatically – for example the joining tables...

          Show
          petr_motejlek Petr Motejlek added a comment - I'd just like to add that there's an even worse problem with this – the indices are not created even for tables that Doctrine creates automatically – for example the joining tables...
          Hide
          beberlei Benjamin Eberlei added a comment -

          i'll look into it.

          Show
          beberlei Benjamin Eberlei added a comment - i'll look into it.
          Hide
          beberlei Benjamin Eberlei added a comment -

          Fixed in master, leading to several follow up bugs that all had to be fixed:

          1. generate identifier allowed first char to be a number
          2. postgresql composite foreign key detection left a space in the second (and more) column names
          3. Index column names were not sanitized to lower-case, leading to comparison bugs.

          There has been a major refactoring now such that, for each foreign key there is always an explicit index being created. On SQLite, Postgres and Oracle this can lead to quite some additional indexes being created now using SchemaTool --update. MySQL already did this implicitly.

          There are now heuristics that detect duplicate indexes (based on columns indexed) and override rules (adding primary on columns foo, bar will delete index on columns foo bar).

          Show
          beberlei Benjamin Eberlei added a comment - Fixed in master, leading to several follow up bugs that all had to be fixed: 1. generate identifier allowed first char to be a number 2. postgresql composite foreign key detection left a space in the second (and more) column names 3. Index column names were not sanitized to lower-case, leading to comparison bugs. There has been a major refactoring now such that, for each foreign key there is always an explicit index being created. On SQLite, Postgres and Oracle this can lead to quite some additional indexes being created now using SchemaTool --update. MySQL already did this implicitly. There are now heuristics that detect duplicate indexes (based on columns indexed) and override rules (adding primary on columns foo, bar will delete index on columns foo bar).
          Hide
          beberlei Benjamin Eberlei added a comment -

          Note, this commit will not get into Doctrine ORM master unless you update the git-submodule explicitly:

          cd lib/vendor/doctrine-dbal
          git checkout master
          

          For RC-1 this will be visible to the ORM trunk/master also.

          Show
          beberlei Benjamin Eberlei added a comment - Note, this commit will not get into Doctrine ORM master unless you update the git-submodule explicitly: cd lib/vendor/doctrine-dbal git checkout master For RC-1 this will be visible to the ORM trunk/master also.

            People

            • Assignee:
              beberlei Benjamin Eberlei
              Reporter:
              petr_motejlek Petr Motejlek
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: