https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=35552

Igor Baptista da Costa <igor.bapti...@neki-it.com.br> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |igor.bapti...@neki-it.com.b
                   |                            |r

--- Comment #4 from Igor Baptista da Costa <igor.bapti...@neki-it.com.br> ---
Hello Victor,

I was facing the same error when updating koha from version 20.11 to 23.11 and
was able to solve it.

The error:
ERROR - {UNKNOWN}: DBI Exception: DBD::mysql::db do failed: Cannot change
column 'itemnumber': used in a foreign key constraint 'tmp_holdsqueue_ibfk_1'
at /usr/share/koha/lib/C4/Installer.pm line 741

happens because the file of database patch that fix the "Bug 28966 - Holds
queue view too slow to load for large numbers of holds", of the koha version
23.06.00.013, tries to run an alter statment that change the column
"itemnumber" to primary key, but this column already is a foreign key, so this
alter statment fails. 

(the file that im talking about: 
https://github.com/Koha-Community/Koha/blob/23.11.x/installer/data/mysql/db_revs/230600013.pl

in your server if the koha was installed from the package manager using
koha-common the path for this file is:
/usr/share/koha/intranet/cgi-bin/installer/data/mysql/db_revs/230600013.pl)

So, I changed this file to before run the alter statment that turns the column
"itemnumber" into primary key, I added some code to drop the foreign key
"tmp_holdsqueue_ibfk_1" (that refers to the "itemnumber" column) and it index,
and after that run the alter statment, and after the alter statment it
recreates the foreign key. This is what the code looks like:

use Modern::Perl;

return {
    bug_number  => "28966",
    description => "Holds queue view too slow to load for large numbers of
holds",
    up          => sub {
        my ($args) = @_;
        my ( $dbh, $out ) = @$args{qw(dbh out)};

        unless ( primary_key_exists( 'tmp_holdsqueue', 'itemnumber' ) ) {

            if (foreign_key_exists('tmp_holdsqueue', 'tmp_holdsqueue_ibfk_1'))
{
                    $dbh->do(
                        q{ALTER TABLE tmp_holdsqueue DROP FOREIGN KEY
tmp_holdsqueue_ibfk_1}
                    );
                    $dbh->do(
                        q{ALTER TABLE tmp_holdsqueue DROP INDEX
tmp_holdsqueue_ibfk_1}
                    );
            }

            $dbh->do(
                q{ALTER TABLE tmp_holdsqueue ADD PRIMARY KEY (itemnumber)}
            );

            $dbh->do(
                q{ALTER TABLE tmp_holdsqueue ADD KEY `tmp_holdsqueue_ibfk_1`
(`itemnumber`), ADD CONSTRAINT `tmp_holdsqueue_ibfk_1` FOREIGN KEY
(`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE
CASCADE}
            );
        }

        say $out "Set primary key for table 'tmp_holdsqueue' to 'itemnumber'";
    },
};

Regards,
Igor Baptista from Neki-it.

-- 
You are receiving this mail because:
You are watching all bug changes.
You are the assignee for the bug.
_______________________________________________
Koha-bugs mailing list
Koha-bugs@lists.koha-community.org
https://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-bugs
website : http://www.koha-community.org/
git : http://git.koha-community.org/
bugs : http://bugs.koha-community.org/

Reply via email to