upgrade.php: implemented some of the postgresql functions; have not tested it yet though

git-svn-id: https://svn.code.sf.net/p/postfixadmin/code/trunk@271 a1433add-5e2c-0410-b055-b7f2511e0802
postfixadmin-2.3
David Goodwin 17 years ago
parent 595ee7d37a
commit 3c2bf37f4a

@ -101,20 +101,20 @@ function db_query_parsed($sql, $ignore_errors = 0, $attach_mysql = "") {
$sql = "$sql $attach_mysql"; $sql = "$sql $attach_mysql";
} elseif($CONF['database_type'] == 'pgsql') { } elseif($CONF['database_type'] == 'pgsql') {
static $replace = array( $replace = array(
'{AUTOINCREMENT}' => 'SERIAL', '{AUTOINCREMENT}' => 'SERIAL',
'{PRIMARY}' => 'primary key', '{PRIMARY}' => 'primary key',
'{UNSIGNED}' => '', '{UNSIGNED}' => '',
'{FULLTEXT}' => '', '{FULLTEXT}' => '',
'{BOOLEAN}' => 'BOOLEAN NOT NULL', '{BOOLEAN}' => 'BOOLEAN NOT NULL',
'{UTF-8}' => '', # TODO: UTF-8 is simply ignored. '{UTF-8}' => '', # TODO: UTF-8 is simply ignored.
'{LATIN1}' => '', # TODO: same for latin1 '{LATIN1}' => '', # TODO: same for latin1
'{IF_NOT_EXISTS}' => 'IF NOT EXISTS', # TODO: does this work with PgSQL? '{IF_NOT_EXISTS}' => '', # TODO: does this work with PgSQL? NO
'{RENAME_COLUMN}' => 'CHANGE COLUMN', # TODO: probably wrong '{RENAME_COLUMN}' => 'ALTER COLUMN', # PgSQL : ALTER TABLE x RENAME x TO y
'int(1)' => 'int2', 'int(1)' => 'int',
'int(10)' => 'int4', 'int(10)' => 'int',
'int(11)' => 'int4', 'int(11)' => 'int',
'int(4)' => 'int4', 'int(4)' => 'int',
); );
} else { } else {
@ -141,7 +141,7 @@ function _drop_index ($table, $index) {
if ($CONF['database_type'] == 'mysql' || $CONF['database_type'] == 'mysqli' ) { if ($CONF['database_type'] == 'mysql' || $CONF['database_type'] == 'mysqli' ) {
return "ALTER TABLE $table DROP INDEX $index"; return "ALTER TABLE $table DROP INDEX $index";
} elseif($CONF['database_type'] == 'pgsql') { } elseif($CONF['database_type'] == 'pgsql') {
return "DROP INDEX $index"; # TODO: on which table?! return "DROP INDEX $index"; # Index names are unique with a DB for PostgreSQL
} else { } else {
echo "Sorry, unsupported database type " . $conf['database_type']; echo "Sorry, unsupported database type " . $conf['database_type'];
exit; exit;
@ -160,15 +160,23 @@ function upgrade_1() {
echo "upgrade_1"; echo "upgrade_1";
} }
function upgrade_2() { function upgrade_2_mysql() {
# upgrade pre-2.1 database # upgrade pre-2.1 database
# from TABLE_BACKUP_MX.TXT # from TABLE_BACKUP_MX.TXT
$table_domain = table_by_key ('domain'); $table_domain = table_by_key ('domain');
$result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN transport VARCHAR(255) AFTER maxquota;", TRUE); $result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN transport VARCHAR(255) AFTER maxquota;", TRUE);
// don't think PGSQL supports 'AFTER transport'
$result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN backupmx {BOOLEAN} DEFAULT {BOOL_FALSE} AFTER transport;", TRUE); $result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN backupmx {BOOLEAN} DEFAULT {BOOL_FALSE} AFTER transport;", TRUE);
} }
function upgrade_3() { function upgrade_2_pgsql() {
$table_domain = table_by_key ('domain');
$result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN transport VARCHAR(255)", TRUE);
$result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN backupmx BOOLEAN DEFAULT false", TRUE);
}
function upgrade_3_mysql() {
# upgrade pre-2.1 database # upgrade pre-2.1 database
# from TABLE_CHANGES.TXT # from TABLE_CHANGES.TXT
$table_admin = table_by_key ('admin'); $table_admin = table_by_key ('admin');
@ -177,6 +185,8 @@ function upgrade_3() {
$table_mailbox = table_by_key ('mailbox'); $table_mailbox = table_by_key ('mailbox');
$table_vacation = table_by_key ('vacation'); $table_vacation = table_by_key ('vacation');
// these will not work on PostgreSQL; syntax is :
// ALTER TABLE foo RENAME f1 TO f2
$all_sql = split("\n", trim(" $all_sql = split("\n", trim("
ALTER TABLE $table_admin {RENAME_COLUMN} create_date created DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL; ALTER TABLE $table_admin {RENAME_COLUMN} create_date created DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL;
ALTER TABLE $table_admin {RENAME_COLUMN} change_date modified DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL; ALTER TABLE $table_admin {RENAME_COLUMN} change_date modified DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL;
@ -213,76 +223,66 @@ function upgrade_4_mysql() { # MySQL only
function upgrade_4_pgsql() { # PgSQL only function upgrade_4_pgsql() { # PgSQL only
# changes between 2.1 and moving to sourceforge # changes between 2.1 and moving to sourceforge
$table_domain = table_by_key('domain');
$table_admin = table_by_key('admin');
$table_alias = table_by_key('alias');
$table_domain_admins = table_by_key('domain_admins');
$table_log = table_by_key('log');
$table_mailbox = table_by_key('mailbox');
$table_vacation = table_by_key('vacation');
/* TODO $result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN quota int NOT NULL default '0'");
Changes in DATABASE_PGSQL.TXT: (in diff format - "-" means removed, "+" means added) $result = db_query_parsed("ALTER TABLE $table_domain ALTER COLUMN domain DROP DEFAULT");
$result = db_query_parsed("CREATE INDEX domain_domain_active ON domain(domain,active)");
TABLE domain
- domain character varying(255) NOT NULL default '', $result = db_query_parsed("ALTER TABLE $table_admin ALTER COLUMN domain DROP DEFAULT");
+ domain character varying(255) NOT NULL, $result = db_query_parsed("ALTER TABLE $table_alias ALTER COLUMN address DROP DEFAULT");
+ quota integer NOT NULL default 0, $result = db_query_parsed("ALTER TABLE $table_alias ALTER COLUMN domain DROP DEFAULT");
$result = db_query_parsed("CREATE INDEX alias_address_active ON alias(address,active)");
+CREATE INDEX domain_domain_active ON domain(domain,active);
$result = db_query_parsed("ALTER TABLE $table_domain_admins ALTER COLUMN username DROP DEFAULT");
TABLE "admin" $result = db_query_parsed("ALTER TABLE $table_domain_admins ALTER COLUMN domain DROP DEFAULT");
- "username" character varying(255) NOT NULL default '',
+ "username" character varying(255) NOT NULL, $result = db_query_parsed("BEGIN;
ALTER TABLE $table_log RENAME COLUMN data TO data_old;
ALTER TABLE $table_log ADD COLUMN data TYPE text NOT NULL default '';
TABLE alias UPDATE $table_log SET data = CAST(data_old AS text);
- address character varying(255) NOT NULL default '', ALTER TABLE $table_log DROP COLUMN data_old;
+ address character varying(255) NOT NULL, COMMIT;");
- domain character varying(255) NOT NULL default '',
+ domain character varying(255) NOT NULL REFERENCES domain, $result = db_query_parsed("ALTER TABLE $table_mailbox ALTER COLUMN username DROP DEFAULT");
$result = db_query_parsed("ALTER TABLE $table_mailbox ALTER COLUMN domain DROP DEFAULT");
+CREATE INDEX alias_address_active ON alias(address,active);
$result = db_query_parsed("BEGIN;
TABLE domain_admins ALTER TABLE $table_mailbox RENAME COLUMN domain TO domain_old;
- username character varying(255) NOT NULL default '', ALTER TABLE $table_mailbox ADD COLUMN domain TYPE varchar(255) REFERENCES domain (domain);
+ username character varying(255) NOT NULL, UPDATE $table_mailbox SET domain = domain_old;
- domain character varying(255) NOT NULL default '', ALTER TABLE $table_mailbox DROP COLUMN domain_old;
+ domain character varying(255) NOT NULL REFERENCES domain, CREATE INDEX mailbox_username_active ON mailbox(username,active);
COMMIT;");
TABLE log
- data character varying(255) NOT NULL default ''
+ data text NOT NULL default '' $result = db_query_parsed("ALTER TABLE $table_vacation ALTER COLUMN body SET DEFAULT = ''");
$result = db_query_parsed("ALTER TABLE $table_vacation DROP COLUMN cache");
TABLE mailbox
- username character varying(255) NOT NULL default '', $result = db_query_parsed("ALTER TABLE $table_vacation RENAME COLUMN domain to domain_old");
+ username character varying(255) NOT NULL, $result = db_query_parsed("ALTER TABLE $table_vacation ADD COLUMN domain TYPE character varying(255) REFERENCES domain ");
- domain character varying(255) NOT NULL default '', $result = db_query_parsed("UPDATE $table_vacation SET domain = domain_old");
+ domain character varying(255) NOT NULL REFERENCES domain, $result = db_query_parsed("ALTER TABLE $table_vacation DROP COLUMN domain_old");
+CREATE INDEX mailbox_username_active ON mailbox(username,active); $result = db_query_parsed("CREATE INDEX vacation_email_active ON vacation(email,active)");
TABLE vacation $result = db_query_parsed("
- email character varying(255) NOT NULL default '', CREATE TABLE vacation_notification (
+ email character varying(255) PRIMARY KEY, on_vacation character varying(255) NOT NULL REFERENCES vacation(email) ON DELETE CASCADE,
- body text NOT NULL, notified character varying(255) NOT NULL,
+ body text NOT NULL DEFAULT '', notified_at timestamp with time zone NOT NULL DEFAULT now(),
- cache text NOT NULL, CONSTRAINT vacation_notification_pkey primary key(on_vacation,notified)
+ cache text NOT NULL DEFAULT '', );");
- domain character varying(255) NOT NULL default '',
+ "domain" character varying(255) NOT NULL REFERENCES "domain",
- active boolean NOT NULL default true,
+ active boolean DEFAULT true NOT NULL
- Constraint "vacation_key" Primary Key ("email")
-COMMENT ON TABLE vacation IS 'Postfix Admin - Virtual Vacation';
+CREATE INDEX vacation_email_active ON vacation(email,active);
+CREATE TABLE vacation_notification (
+ on_vacation character varying(255) NOT NULL REFERENCES vacation(email) ON DELETE CASCADE,
+ notified character varying(255) NOT NULL,
+ notified_at timestamp with time zone NOT NULL DEFAULT now(),
+ CONSTRAINT vacation_notification_pkey primary key(on_vacation,notified)
+);
*/
} }
function upgrade_79_mysql() { # MySQL only function upgrade_79_mysql() { # MySQL only

Loading…
Cancel
Save