-- run AS webuser or GRANT INSERT ON accessgroups TO webuser later
ALTER TABLE archiveobjects ALTER readrights SET NOT NULL;
ALTER TABLE archiveobjects ALTER writerights SET NOT NULL;
-- create and populate new accessgroups table
CREATE TABLE accessgroups ( md5 VARCHAR PRIMARY KEY NOT NULL,
  aclstring VARCHAR NOT NULL );
INSERT INTO accessgroups (md5, aclstring) VALUES ('everybody','everybody'),
  ('nobody','nobody'), ('cleared','cleared'),
  ('anyAuthenticatedUser','anyAuthenticatedUser');
INSERT INTO accessgroups (md5, aclstring) SELECT md5(readrights),
  readrights FROM archiveobjects WHERE readrights LIKE ' %' AND
  readrights NOT IN (SELECT aclstring FROM accessgroups) GROUP BY readrights;
INSERT INTO accessgroups (md5, aclstring) SELECT md5(writerights),
  writerights FROM archiveobjects WHERE writerights LIKE ' %' AND
  writerights NOT IN (SELECT aclstring FROM accessgroups) GROUP BY writerights;
GRANT SELECT ON accessgroups TO public;
-- convert the affected archiveobjects columns to the new encoding
-- if index already existed, DROP INDEX READRIGHTS_AO_IDX before this
UPDATE archiveobjects SET readrights = md5(readrights)
  WHERE readrights LIKE ' %';
UPDATE archiveobjects SET writerights = md5(writerights)
  WHERE writerights LIKE ' %';
-- now it is time for some performance related commands
REINDEX TABLE archiveobjects;
-- this VACUUM FULL can take long time but can reduce disk usage a lot
VACUUM FULL VERBOSE ANALYZE archiveobjects ;
CREATE INDEX READRIGHTS_AO_IDX ON ARCHIVEOBJECTS ( READRIGHTS );
REINDEX TABLE corpusstructure;
-- run this postgresql script before installing corpusstructure 1.4 or newer
-- only needed to update from older versions, not for newly created archives
