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;