augur icon indicating copy to clipboard operation
augur copied to clipboard

Database initialization (via alembic) assumes a user called "augur" is present

Open MoralCode opened this issue 1 month ago • 1 comments

A colleague is trying to set up augur in docker as a test and set the username to something other than augur

This caused the migration process to fail at step 2:

INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> 0, Goodbye, .sql migrations
INFO  [alembic.runtime.migration] New database, will run all legacy migrations
INFO  [alembic.runtime.migration] Running legacy migration 80.1-create-schema.sql
INFO  [alembic.runtime.migration] Running legacy migration 80.2-create-tables.sql
Traceback (most recent call last):
  File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1969, in _exec_single_context
    self.dialect.do_execute(
  File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/default.py", line 922, in do_execute
    cursor.execute(statement, parameters)
psycopg2.errors.UndefinedObject: role "augur" does not exist


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/augur/.venv/bin/alembic", line 10, in <module>
    sys.exit(main())
             ^^^^^^
  File "/augur/.venv/lib/python3.11/site-packages/alembic/config.py", line 590, in main
    CommandLine(prog=prog).main(argv=argv)
  File "/augur/.venv/lib/python3.11/site-packages/alembic/config.py", line 584, in main
    self.run_cmd(cfg, options)
  File "/augur/.venv/lib/python3.11/site-packages/alembic/config.py", line 561, in run_cmd
    fn(
  File "/augur/.venv/lib/python3.11/site-packages/alembic/command.py", line 322, in upgrade
    script.run_env()
  File "/augur/.venv/lib/python3.11/site-packages/alembic/script/base.py", line 569, in run_env
    util.load_python_file(self.dir, "env.py")
  File "/augur/.venv/lib/python3.11/site-packages/alembic/util/pyfiles.py", line 94, in load_python_file
    module = load_module_py(module_id, path)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/augur/.venv/lib/python3.11/site-packages/alembic/util/pyfiles.py", line 110, in load_module_py
    spec.loader.exec_module(module)  # type: ignore
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/augur/augur/application/schema/alembic/env.py", line 90, in <module>
    run_migrations_online()
  File "/augur/augur/application/schema/alembic/env.py", line 84, in run_migrations_online
    context.run_migrations()
  File "<string>", line 8, in run_migrations
  File "/augur/.venv/lib/python3.11/site-packages/alembic/runtime/environment.py", line 853, in run_migrations
    self.get_context().run_migrations(**kw)
  File "/augur/.venv/lib/python3.11/site-packages/alembic/runtime/migration.py", line 623, in run_migrations
    step.migration_fn(**kw)
  File "/augur/augur/application/schema/alembic/versions/0_legacy.py", line 68, in upgrade
    op.execute(legacy_migration_file.read())
  File "<string>", line 8, in execute
  File "<string>", line 3, in execute
  File "/augur/.venv/lib/python3.11/site-packages/alembic/operations/ops.py", line 2414, in execute
    return operations.invoke(op)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/augur/.venv/lib/python3.11/site-packages/alembic/operations/base.py", line 399, in invoke
    return fn(self, operation)
           ^^^^^^^^^^^^^^^^^^^
  File "/augur/.venv/lib/python3.11/site-packages/alembic/operations/toimpl.py", line 207, in execute_sql
    operations.migration_context.impl.execute(
  File "/augur/.venv/lib/python3.11/site-packages/alembic/ddl/impl.py", line 202, in execute
    self._exec(sql, execution_options)
  File "/augur/.venv/lib/python3.11/site-packages/alembic/ddl/impl.py", line 195, in _exec
    return conn.execute(construct, multiparams)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1416, in execute
    return meth(
           ^^^^^
  File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/sql/elements.py", line 516, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1639, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1848, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1988, in _exec_single_context
    self._handle_dbapi_exception(
  File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 2343, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1969, in _exec_single_context
    self.dialect.do_execute(
  File "/augur/.venv/lib/python3.11/site-packages/sqlalchemy/engine/default.py", line 922, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedObject) role "augur" does not exist

[SQL: /*
 Navicat Premium Data Transfer

 Source Server         : linda
 Source Server Type    : PostgreSQL
 Source Server Version : 120008
 Source Host           : 192.168.0.95:5432
 Source Catalog        : test
 Source Schema         : augur_data

 Target Server Type    : PostgreSQL
 Target Server Version : 120008
 File Encoding         : 65001

 Date: 09/10/2021 14:14:17
*/


-- ----------------------------
-- Sequence structure for augur_data.repo_insights_ri_id_seq
-- ----------------------------
DROP SEQUENCE IF EXISTS "augur_data"."augur_data.repo_insights_ri_id_seq";
CREATE SEQUENCE "augur_data"."augur_data.repo_insights_ri_id_seq" 
INCREMENT 1
MINVALUE  1
MAXVALUE 9223372036854775807
START 25430
CACHE 1;
ALTER SEQUENCE "augur_data"."augur_data.repo_insights_ri_id_seq" OWNER TO "augur";

[omitted the entire rest of the augur initial schema sql file - you are welcome]

MoralCode avatar Nov 18 '25 22:11 MoralCode

This is essentially an artifact of us relying on alembic for initial database setup. I'm working on changes that will bring everything in sync so we can use alembic for migrations only - not for initialization (making these scripts only applicable to people with INCREDIBLY old augur databases)

MoralCode avatar Nov 18 '25 22:11 MoralCode