1.6.3 -> 1.7.1 upgrade db:migrate fail

Hi all,
I have a db:migrate failure after upgrading. I've posted a pasebin of the
trace here: http://pastebin.com/493zpBcc Here's the gist of it:

– add_index(:parameters, [:reference_id, :name], {:unique=>true})
> rake aborted!
> An error has occurred, this and all later migrations canceled:
>
> PGError: ERROR: could not create unique index
> "index_parameters_on_reference_id_and_name"
> DETAIL: Table contains duplicated values.
> : CREATE UNIQUE INDEX "index_parameters_on_reference_id_and_name" ON
> "parameters" ("reference_id", "name")
>

It looks like I have 12 name, reference_id duplicates. is there a clean
way to clean these out? As far as I can tell in looking at the cases, the
situation occurs when a host parameter overrides a group parameter…

foreman=# select * from ( select name,reference_id, row_number()
over(partition by reference_id, name order by reference_id asc) as row from
parameters) dups where dups.row > 1;
name | reference_id | row

··· -----------------+--------------+----- firewall | 1 | 2 nrpe_ntp | 1 | 2 firewall | 7 | 2 firewall | 16 | 2 firewall | 17 | 2 yum_cron_dotw | 17 | 2 yum_cron_mailto | 17 | 2 yum_template | 17 | 2 yum_update | 17 | 2 firewall | 18 | 2 firewall | 19 | 2 firewall | 21 | 2 (12 rows) foreman=# select * from parameters where reference_id in(1,7,16,17,18,19,21) and name = 'firewall' order by reference_id; id | name | value | reference_id | created_at > updated_at | type | priority -----+----------+-------+--------------+----------------------------+----------------------------+----------------+---------- 61 | firewall | true | 1 | 2013-07-30 15:12:05.205278 | 2013-07-30 15:12:05.205278 | GroupParameter | 3 15 | firewall | false | 1 | 2013-07-15 14:48:53.730826 | 2013-07-15 14:48:53.730826 | HostParameter | 4 173 | firewall | false | 7 | 2013-10-16 17:51:24.445574 | 2013-10-16 17:51:24.445574 | OsParameter | 2 166 | firewall | true | 7 | 2013-10-03 18:41:11.030193 | 2013-10-03 18:41:11.030193 | HostParameter | 4 300 | firewall | false | 16 | 2013-11-13 21:24:23.679679 | 2013-11-13 21:24:23.679679 | HostParameter | 4 184 | firewall | false | 16 | 2013-10-18 18:44:19.610702 | 2013-10-18 18:44:19.610702 | GroupParameter | 3 188 | firewall | false | 17 | 2013-10-18 18:46:43.219681 | 2013-10-18 18:46:43.219681 | GroupParameter | 3 59 | firewall | false | 17 | 2013-07-30 15:00:58.819476 | 2013-07-30 15:00:58.819476 | HostParameter | 4 187 | firewall | false | 18 | 2013-10-18 18:46:28.191101 | 2013-10-18 18:46:28.191101 | GroupParameter | 3 58 | firewall | false | 18 | 2013-07-30 15:00:05.170201 | 2013-07-30 15:00:05.170201 | HostParameter | 4 186 | firewall | false | 19 | 2013-10-18 18:46:16.023781 | 2013-10-18 18:46:16.023781 | GroupParameter | 3 63 | firewall | false | 19 | 2013-07-30 17:13:27.58812 | 2013-07-30 17:13:27.58812 | HostParameter | 4 206 | firewall | false | 21 | 2013-10-31 18:29:50.826137 | 2013-10-31 18:29:50.826137 | GroupParameter | 3 64 | firewall | false | 21 | 2013-07-30 17:20:25.696759 | 2013-07-30 17:20:25.696759 | HostParameter | 4 (14 rows)

Any suggestions? Thanks!

Hi,

··· On Thu, Jan 22, 2015 at 11:35:06AM -0800, Sean Alderman wrote: > -- add_index(:parameters, [:reference_id, :name], {:unique=>true}) > > rake aborted! > > An error has occurred, this and all later migrations canceled: > > > > PGError: ERROR: could not create unique index > > "index_parameters_on_reference_id_and_name" > > DETAIL: Table contains duplicated values. > > : CREATE UNIQUE INDEX "index_parameters_on_reference_id_and_name" ON > > "parameters" ("reference_id", "name")

Probably Bug #8366: Upgrade from 1.6.2 to 1.7rc1 fails during AddUniqueIndexToParameter db migration with duplicate key error - Foreman - take the diff from
the referenced pull request and db:migrate again.

Regards

Michael Moll

It does look like that could be it. I'm guessing I missed it in my search
due to the postgres vs mysql differences. Thanks for the heads up!

··· On Thursday, January 22, 2015 at 3:33:27 PM UTC-5, Michael Moll wrote: > > Hi, > > On Thu, Jan 22, 2015 at 11:35:06AM -0800, Sean Alderman wrote: > > -- add_index(:parameters, [:reference_id, :name], {:unique=>true}) > > > rake aborted! > > > An error has occurred, this and all later migrations canceled: > > > > > > PGError: ERROR: could not create unique index > > > "index_parameters_on_reference_id_and_name" > > > DETAIL: Table contains duplicated values. > > > : CREATE UNIQUE INDEX "index_parameters_on_reference_id_and_name" ON > > > "parameters" ("reference_id", "name") > > Probably http://projects.theforeman.org/issues/8366 - take the diff from > the referenced pull request and db:migrate again. > > Regards > -- > Michael Moll >