Skip to content

Instantly share code, notes, and snippets.

@basz
Created September 25, 2018 07:18
Show Gist options
  • Select an option

  • Save basz/16cc9230f4d049cc318508b60d70cfc9 to your computer and use it in GitHub Desktop.

Select an option

Save basz/16cc9230f4d049cc318508b60d70cfc9 to your computer and use it in GitHub Desktop.
-- DROP CONSTRAINT FIRST
ALTER TABLE _7794a224f85453058cf637d52e7c4487568a8271 DROP CONSTRAINT _7794a224f85453058cf637d52e7c4487568a8271_pkey;
-- DROP EXISTING SEQUENCE
DROP SEQUENCE _7794a224f85453058cf637d52e7c4487568a8271_no_seq CASCADE;
-- CREATE AN ORDERED VIEW
CREATE VIEW ordered_view AS SELECT * FROM _7794a224f85453058cf637d52e7c4487568a8271 ORDER BY created_at ASC FOR UPDATE;
-- CREATE A RULE FOR UPDATE
CREATE RULE rule_order AS ON UPDATE TO ordered_view DO INSTEAD
UPDATE _7794a224f85453058cf637d52e7c4487568a8271
SET no = NEW.no
WHERE event_id = NEW.event_id;
-- CREATE A NEW SEQUENCE
CREATE SEQUENCE ordered_view_seq;
-- EXECUTE AN UPDATE - WHICH IS APPEARENTLY DONE IN IN PARRALEL AS THE NO COLUMN IS NOT INCREMENTAL...
UPDATE ordered_view SET no = nextval('ordered_view_seq');
-- CLEANUP
DROP SEQUENCE ordered_view_seq;
DROP RULE rule_order ON ordered_view;
DROP VIEW ordered_view;
-- RECREATE CONSTRAINT AND SEQUENCE
BEGIN;
ALTER TABLE api_dev.public._7794a224f85453058cf637d52e7c4487568a8271 ADD PRIMARY KEY (no);
CREATE SEQUENCE _7794a224f85453058cf637d52e7c4487568a8271_no_seq;
SELECT setval('_7794a224f85453058cf637d52e7c4487568a8271_no_seq', max(no)) FROM _7794a224f85453058cf637d52e7c4487568a8271;
END;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment