1.0 Beta Migration#
Use one of the following scripts to migrate from RelStorage 1.0 beta to RelStorage 1.0. Alter the scripts to match the Python default encoding. For example, if ‘import sys; print sys.getdefaultencoding()’ says the encoding is “iso-8859-1”, change all occurrences of ‘UTF-8’ or ‘UTF8’ to ‘ISO-8859-1’.
PostgreSQL 8.3 (using the psql command):
ALTER TABLE transaction
ALTER username TYPE BYTEA USING (convert_to(username, 'UTF-8')),
ALTER description TYPE BYTEA USING (convert_to(description, 'UTF-8'));
PostgreSQL 8.2 and below (using the psql command):
ALTER TABLE transaction
ALTER username TYPE BYTEA USING
(decode(replace(convert(username, 'UTF-8'), '\\', '\\\\'), 'escape')),
ALTER description TYPE BYTEA USING
(decode(replace(convert(description, 'UTF-8'), '\\', '\\\\'), 'escape'));
MySQL (using the mysql command):
ALTER TABLE transaction
MODIFY username BLOB NOT NULL,
MODIFY description BLOB NOT NULL;
Oracle (using the sqlplus command):
ALTER TABLE transaction ADD (
new_username RAW(500),
new_description RAW(2000),
new_extension RAW(2000));
UPDATE transaction
SET new_username = UTL_I18N.STRING_TO_RAW(username, 'UTF8'),
new_description = UTL_I18N.STRING_TO_RAW(description, 'UTF8'),
new_extension = extension;
ALTER TABLE transaction DROP (username, description, extension);
ALTER TABLE transaction RENAME COLUMN new_username TO username;
ALTER TABLE transaction RENAME COLUMN new_description TO description;
ALTER TABLE transaction RENAME COLUMN new_extension TO extension;
Migration From PGStorage to RelStorage#
PostgreSQL:
-- Migration from PGStorage to RelStorage
-- Do all the work in a transaction
BEGIN;
-- Remove the commit_order information (RelStorage has a better solution).
DROP SEQUENCE commit_seq;
ALTER TABLE transaction DROP commit_order;
-- Make the special transaction 0 match RelStorage
UPDATE transaction SET username='system',
description='special transaction for object creation'
WHERE tid = 0;
-- Add the MD5 column and some more constraints.
ALTER TABLE object_state
ADD CONSTRAINT object_state_tid_check CHECK (tid > 0),
ADD CONSTRAINT object_state_prev_tid_fkey FOREIGN KEY (prev_tid)
REFERENCES transaction,
ADD COLUMN md5 CHAR(32);
UPDATE object_state SET md5=md5(state) WHERE state IS NOT NULL;
-- Replace the temporary tables used for packing.
DROP TABLE pack_operation;
DROP TABLE pack_transaction;
DROP TABLE pack_keep;
DROP TABLE pack_garbage;
CREATE TABLE pack_lock ();
CREATE TABLE object_ref (
zoid BIGINT NOT NULL,
tid BIGINT NOT NULL,
to_zoid BIGINT NOT NULL
);
CREATE INDEX object_ref_from ON object_ref (zoid);
CREATE INDEX object_ref_tid ON object_ref (tid);
CREATE INDEX object_ref_to ON object_ref (to_zoid);
CREATE TABLE object_refs_added (
tid BIGINT NOT NULL PRIMARY KEY
);
CREATE TABLE pack_object (
zoid BIGINT NOT NULL PRIMARY KEY,
keep BOOLEAN NOT NULL,
keep_tid BIGINT
);
CREATE INDEX pack_object_keep_zoid ON pack_object (keep, zoid);
-- Now commit everything
COMMIT;