Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save przbadu/1c4f2b017444f2e2b9f29d503359ca2c to your computer and use it in GitHub Desktop.
Save przbadu/1c4f2b017444f2e2b9f29d503359ca2c to your computer and use it in GitHub Desktop.
ActiveRecord::StatementInvalid: PG::NotNullViolation: ERROR: null value in column "id" violates not-null constraint
-- Login to psql and run the following
-- What is the result?
SELECT MAX(id) FROM your_table;
-- Then run...
-- If your_table_id_seq is missing, then first create it
CREATE SEQUENCE tablename_colname_seq;
-- This should be higher than the last result.
SELECT nextval('your_table_id_seq');
-- If it's not higher... run this set the sequence last to your highest id.
-- (wise to run a quick pg_dump first...)
BEGIN;
-- protect against concurrent inserts while you update the counter
LOCK TABLE your_table IN EXCLUSIVE MODE;
-- Update the sequence
SELECT setval('your_table_id_seq', COALESCE((SELECT MAX(id)+1 FROM your_table), 1), false);
COMMIT;
-- If that didn't fixed rails error then, run below scripts
ALTER TABLE your_table ALTER COLUMN id SET DEFAULT nextval('your_table_id_seq'::regclass);
ALTER SEQUENCE your_table_id_seq OWNED BY your_table.id;
@przbadu
Copy link
Author

przbadu commented Nov 17, 2020

Example:

CREATE SEQUENCE integration_logs_id_seq;
BEGIN;
LOCK TABLE integration_logs IN EXCLUSIVE MODE;
SELECT setval('integration_logs_id_seq', COALESCE((SELECT MAX(id)+1 FROM integration_logs), 1), false);
COMMIT;
ALTER TABLE integration_logs ALTER COLUMN id SET DEFAULT nextval('integration_logs_id_seq'::regclass);
ALTER SEQUENCE integration_logs_id_seq OWNED BY integration_logs.id;

@przbadu
Copy link
Author

przbadu commented Dec 30, 2020

CREATE SEQUENCE chart_of_accounts_id_seq;
BEGIN;
LOCK TABLE chart_of_accounts IN EXCLUSIVE MODE;
SELECT setval('chart_of_accounts_id_seq', COALESCE((SELECT MAX(id)+1 FROM chart_of_accounts), 1), false);
COMMIT;
ALTER TABLE chart_of_accounts ALTER COLUMN id SET DEFAULT nextval('chart_of_accounts_id_seq'::regclass);
ALTER SEQUENCE chart_of_accounts_id_seq OWNED BY chart_of_accounts.id;

@przbadu
Copy link
Author

przbadu commented Mar 15, 2021

CREATE SEQUENCE cards_id_seq;
BEGIN;
LOCK TABLE cards IN EXCLUSIVE MODE;
SELECT setval('cards_id_seq', COALESCE((SELECT MAX(id)+1 FROM cards), 1), false);
COMMIT;
ALTER TABLE cards ALTER COLUMN id SET DEFAULT nextval('cards_id_seq'::regclass);
ALTER SEQUENCE cards_id_seq OWNED BY cards.id;

@przbadu
Copy link
Author

przbadu commented May 3, 2021

CREATE SEQUENCE npayments_id_seq;
BEGIN;
LOCK TABLE cards IN EXCLUSIVE MODE;
SELECT setval('npayments_id_seq', COALESCE((SELECT MAX(id)+1 FROM cards), 1), false);
COMMIT;
ALTER TABLE cards ALTER COLUMN id SET DEFAULT nextval('npayments_id_seq'::regclass);
ALTER SEQUENCE npayments_id_seq OWNED BY cards.id;
CREATE SEQUENCE invoices_id_seq;
BEGIN;
LOCK TABLE cards IN EXCLUSIVE MODE;
SELECT setval('invoices_id_seq', COALESCE((SELECT MAX(id)+1 FROM cards), 1), false);
COMMIT;
ALTER TABLE cards ALTER COLUMN id SET DEFAULT nextval('invoices_id_seq'::regclass);
ALTER SEQUENCE invoices_id_seq OWNED BY cards.id;
CREATE SEQUENCE npayment_links_id_seq;
BEGIN;
LOCK TABLE cards IN EXCLUSIVE MODE;
SELECT setval('npayment_links_id_seq', COALESCE((SELECT MAX(id)+1 FROM cards), 1), false);
COMMIT;
ALTER TABLE cards ALTER COLUMN id SET DEFAULT nextval('npayment_links_id_seq'::regclass);
ALTER SEQUENCE npayment_links_id_seq OWNED BY cards.id;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment