summaryrefslogtreecommitdiffstats
path: root/src/share/database/scripts/pgsql/upgrade_006.1_to_006.2.sh.in
diff options
context:
space:
mode:
Diffstat (limited to 'src/share/database/scripts/pgsql/upgrade_006.1_to_006.2.sh.in')
-rw-r--r--src/share/database/scripts/pgsql/upgrade_006.1_to_006.2.sh.in71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/share/database/scripts/pgsql/upgrade_006.1_to_006.2.sh.in b/src/share/database/scripts/pgsql/upgrade_006.1_to_006.2.sh.in
new file mode 100644
index 0000000..76bb8cd
--- /dev/null
+++ b/src/share/database/scripts/pgsql/upgrade_006.1_to_006.2.sh.in
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+# Copyright (C) 2020-2022 Internet Systems Consortium, Inc. ("ISC")
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# shellcheck disable=SC1091
+# SC1091: Not following: ... was not specified as input (see shellcheck -x).
+
+# Exit with error if commands exit with non-zero and if undefined variables are
+# used.
+set -eu
+
+# shellcheck disable=SC2034
+# SC2034: ... appears unused. Verify use (or export if used externally).
+prefix="@prefix@"
+
+# Include utilities. Use installed version if available and
+# use build version if it isn't.
+if [ -e @datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh ]; then
+ . "@datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh"
+else
+ . "@abs_top_builddir@/src/bin/admin/admin-utils.sh"
+fi
+
+VERSION=$(pgsql_version "$@")
+
+if [ "$VERSION" != "6.1" ]; then
+ printf 'This script upgrades 6.1 to 6.2. '
+ printf 'Reported version is %s. Skipping upgrade.\n' "${VERSION}"
+ exit 0
+fi
+
+psql "$@" >/dev/null <<EOF
+
+-- Starting from this version we allow specifying multiple IP reservations
+-- for the same address in certain DHCP configurations. The server may check
+-- uniqueness of the IP addresses on its own. This is no longer checked at
+-- the database level to facilitate the use cases when a single host may
+-- get the same reserved IP address via different interfaces.
+
+-- Replace the unique index with non-unique index so the queries for
+-- hosts by IPv4 address are still efficient.
+--
+-- Note we have introduced a bug a while ago which causes the index to have
+-- different names depending on whether the schema was created via the
+-- dhcpdb_create.pgsql script or via updates. Therefore, let's make sure
+-- that we drop the index regardless of its current name.
+DROP INDEX IF EXISTS key_dhcp4_ipv4_address_subnet_id;
+DROP INDEX IF EXISTS hosts_dhcp4_ipv4_address_subnet_id;
+CREATE INDEX key_dhcp4_ipv4_address_subnet_id
+ ON hosts (ipv4_address ASC, dhcp4_subnet_id ASC);
+
+-- Replace the unique index with non-unique index so the queries for
+-- hosts by IPv6 address are still efficient.
+ALTER TABLE ipv6_reservations DROP CONSTRAINT IF EXISTS key_dhcp6_address_prefix_len;
+CREATE INDEX key_dhcp6_address_prefix_len
+ ON ipv6_reservations (address ASC, prefix_len ASC);
+
+-- Update the schema version number
+UPDATE schema_version
+ SET version = '6', minor = '2';
+
+-- Schema 6.2 specification ends here.
+
+-- Commit the script transaction
+COMMIT;
+
+EOF