Index: db-scripts/ddl.sql
===================================================================
--- db-scripts/ddl.sql	(revision 59ed25cc7450bb1aac8fb6ef7f7199192f0bd346)
+++ db-scripts/ddl.sql	(revision 3ebe47cce61b3bfc1dee2566f7475e378374591e)
@@ -20,5 +20,5 @@
 
 CREATE TABLE USERS (
-    user_id BIGINT PRIMARY KEY,
+    user_id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
     email TEXT NOT NULL,
     username TEXT NOT NULL,
Index: db-scripts/dml.sql
===================================================================
--- db-scripts/dml.sql	(revision 59ed25cc7450bb1aac8fb6ef7f7199192f0bd346)
+++ db-scripts/dml.sql	(revision 3ebe47cce61b3bfc1dee2566f7475e378374591e)
@@ -32,4 +32,12 @@
 (29, 'petra@example.com', 'petra_kostova', '1234'),
 (30, 'vlado@example.com', 'vlado_ilievski', '1234');
+
+-- If USERS.user_id is an IDENTITY column, ensure its backing sequence is advanced
+-- past the inserted dummy ids so future inserts (e.g., app registration) don't
+-- try to reuse ids and fail with duplicate key errors.
+SELECT setval(
+	pg_get_serial_sequence('trekr.users', 'user_id'),
+	(SELECT COALESCE(MAX(user_id), 0) FROM trekr.users)
+);
 
 INSERT INTO FINANCE_USERS (user_id, spending_budget, saving_budget, investing_budget, donation_budget, credit) VALUES
