Packages
eventstore
1.2.2
1.4.8
1.4.7
1.4.6
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.3
1.2.2
1.2.1
1.2.0
1.1.0
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc.0
0.17.0
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.14.0
0.14.0-rc.0
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.11.0-rc.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.1
0.2.0
0.1.0
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Event store using PostgreSQL for persistence.
Current section
Files
Jump to
Current section
Files
priv/event_store/migrations/v1.2.0.sql
DO $migration$
BEGIN
-- Drop no UPDATE and DELETE rules to be replaced with triggers
DROP RULE no_update_stream_events ON stream_events;
DROP RULE no_delete_stream_events ON stream_events;
DROP RULE no_update_events ON events;
DROP RULE no_delete_events ON events;
CREATE OR REPLACE FUNCTION event_store_exception()
RETURNS trigger AS $$
DECLARE
message text;
BEGIN
message := 'EventStore: ' || TG_ARGV[0];
RAISE EXCEPTION USING MESSAGE = message;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION event_store_delete()
RETURNS trigger AS $$
DECLARE
message text;
BEGIN
IF current_setting('eventstore.enable_hard_deletes', true) = 'on' OR
current_setting('eventstore.reset', true) = 'on'
THEN
-- Allow DELETE
RETURN OLD;
ELSE
-- Prevent DELETE
message := 'EventStore: ' || TG_ARGV[0];
RAISE EXCEPTION USING MESSAGE = message, ERRCODE = 'feature_not_supported';
END IF;
END;
$$ LANGUAGE plpgsql;
-- Create UPDATE and DELETE triggers
CREATE TRIGGER no_update_events
BEFORE UPDATE ON events
FOR EACH STATEMENT
EXECUTE PROCEDURE event_store_exception('Cannot update events');
CREATE TRIGGER no_delete_events
BEFORE DELETE ON events
FOR EACH STATEMENT
EXECUTE PROCEDURE event_store_delete('Cannot delete events');
CREATE TRIGGER no_update_stream_events
BEFORE UPDATE ON stream_events
FOR EACH STATEMENT
EXECUTE PROCEDURE event_store_exception('Cannot update stream events');
CREATE TRIGGER no_delete_stream_events
BEFORE DELETE ON stream_events
FOR EACH STATEMENT
EXECUTE PROCEDURE event_store_delete('Cannot delete stream events');
CREATE TRIGGER no_delete_streams
BEFORE DELETE ON streams
FOR EACH STATEMENT
EXECUTE PROCEDURE event_store_delete('Cannot delete streams');
-- Streams now require a `deleted_at` column
ALTER TABLE streams ADD COLUMN deleted_at timestamp with time zone;
-- Record schema migration
INSERT INTO schema_migrations (major_version, minor_version, patch_version) VALUES (1, 2, 0);
END;
$migration$ LANGUAGE plpgsql;