<!DOCTYPE html>
<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>(I had grok-build fix the issue and write up the following)</p>
    <p><br>
    </p>
    <p><span style="font-family:monospace"><span
          style="color:#000000;background-color:#ffffff;">Stork server
          2.6.0.261009212753 on Debian 13 refused to start after</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">upgrade.
          The schema migration is valid. It failed because the role in</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">STORK_DATABASE_USER_NAME
          does not own the existing tables. PostgreSQL</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">requires
          the table owner for ALTER TABLE. A second, smaller problem is</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">that the
          log reports the failed migration as "new: 0".</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">Summary</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">-------</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">Installed
          package: isc-stork-server 2.6.0.261009212753</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">Previous
          schema version: 71, applied 2026-03-01</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">Database:
          PostgreSQL 17, database name "stork"</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">Connection
          user in /etc/stork/server.env: stork</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">Owner of
          the existing application tables, sequences, and functions:
          stork-server</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">That role
          is not a superuser. "stork" is not a member of it.</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">"stork"
          already had SELECT, INSERT, UPDATE, DELETE, TRUNCATE,
          REFERENCES,</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">and
          TRIGGER on the tables, which is why the previous server
          version ran.</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">Startup
          error</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">-------------</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">systemd:
          isc-stork-server.service, exit status 1</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">time="2026-10-30
          08:54:22" level="fatal" msg="Unexpected error"</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">file="main.go:31"</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">error="Cannot
          start the Stork Server: problem migrating database, old: 72,
          new: 0: ERROR #42501 must be owner of table kea_daemon"</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">Stack:</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">
           isc.org/stork/server/database.Migrate</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">
             backend/server/database/migrations.go:93</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">
           isc.org/stork/server/database.MigrateToLatest</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">
             backend/server/database/migrations.go:102</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">
           isc.org/stork/server/database.NewApplicationDatabaseConn</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">
             backend/server/database/connection.go:127</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">
           isc.org/stork/server.(*StorkServer).Bootstrap</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">
             backend/server/server.go:124</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">PostgreSQL
          log, same second, user stork database stork:</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">  ERROR:
          must be owner of table kea_daemon</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">
           STATEMENT:</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">    ALTER
          TABLE public.kea_daemon</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">      ADD
          COLUMN server_tag TEXT;</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">    UPDATE
          public.kea_daemon</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">      SET
          server_tag = COALESCE(</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">
                 config->'Dhcp4'->>'server-tag',</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">
                 config->'Dhcp6'->>'server-tag'</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">      )</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">
               WHERE config IS NOT NULL;</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">That
          statement is migration 73,
          backend/server/database/migrations/73_daemon_server_tag.go.</span><span
          style="color:#000000;background-color:#ffffff;"></span><br>
        <br>
      </span><span style="font-family:monospace"><span
          style="color:#000000;background-color:#ffffff;">What the
          schema version table showed</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">------------------------------------</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">gopg_migrations
          reached version 72 at 2026-10-30 08:45:14, during the</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">first
          failed start. Version 72 is 72_leases.go. It creates new
          tables, so</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">the
          connecting user can run it without owning the old tables.
          Those new</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">tables
          (lease, lease_update) were owned by stork. The version row was</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">committed.
          Migration 73 then ran in its own transaction, failed the</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">ALTER, and
          rolled back. server_tag was not added. The schema stayed at
          72.</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">"new: 0"
          does not mean the migrator tried to reset the database to</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">version 0.
          migrations.go wraps a failed migrations.Run result as:</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">  problem
          migrating database, old: %d, new: %d</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">go-pg
          returns 0 as the new version when the run fails. The old
          version in</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">the
          message, 72, was the real schema version.</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">Why this
          showed up on 2.6.0</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">----------------------------</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">Versions
          66 through 71 were applied on 2026-03-01 and do ALTER existing</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">tables
          (service, subnet, shared_network, access_point, daemon). Those</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">succeeded,
          so the role that connected that morning was able to alter</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">tables it
          owned. /etc/stork/server.env was last modified the same day.</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">The active
          setting is:</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">
           STORK_DATABASE_USER_NAME=stork</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">The file
          still contains the commented previous value:</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">
           #STORK_DATABASE_USER_NAME=stork-server</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">No later
          migration ran until 2.6.0. Normal operation only needs the
          grants</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">"stork"
          already had. Migration 73 is the first statement since that
          user</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">change
          that must own kea_daemon. There was no package script in</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">isc-stork-server
          2.6.0 that moved ownership; the postinst only restarts</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">the
          service if it was already active.</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">Before the
          repair, pg_tables in schema public was:</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">
           stork-server   41 tables</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">  stork
                    2 tables   (lease and lease_update, created by
          migration 72)</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">Repair</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">------</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">Run as the
          database superuser, in the stork database only. "stork-server"</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">owned
          nothing in the other databases on this cluster.</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">  REASSIGN
          OWNED BY "stork-server" TO stork;</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">After
          that, every table in public was owned by stork. Restarting</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">isc-stork-server
          applied migrations 73 through 79 and stayed up.</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">gopg_migrations
          max version is 79. The HTTP UI on port 8080 returns 200.</span><span
          style="color:#000000;background-color:#ffffff;"></span><br>
        <br>
      </span>
      <span style="font-family:monospace"><span
          style="color:#000000;background-color:#ffffff;">Suggested
          changes</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">-----------------</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">1. In the
          2.6.0 release notes, say that an upgrade runs ALTER TABLE on</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">
            existing tables, so the role in STORK_DATABASE_USER_NAME
          must own those</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">   tables,
          not merely have DML grants. The remedy is:</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">
              REASSIGN OWNED BY <current owner> TO
          <STORK_DATABASE_USER_NAME>;</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">2. When
          migration fails with SQLSTATE 42501, name the connecting role
          and</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">   the
          table owner in the fatal log, and do not report the target
          version</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">   as 0.</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">3.
          Optionally, have the server or stork-tool check ownership
          before</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">
            migrating and refuse with that explanation.</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <br>
        <span style="color:#000000;background-color:#ffffff;">Environment,
          for the record</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">---------------------------</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">OS: Debian
          13 (trixie), amd64</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">PostgreSQL:
          17, local socket and 127.0.0.1:5432, scram-sha-256 for host
          auth</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">isc-stork-server:
          2.6.0.261009212753</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">Database
          name: stork</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">Connecting
          role: stork (LOGIN, not superuser)</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">Previous
          owner: stork-server (LOGIN, not superuser)</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">Schema
          before the failed migration: 71</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">Schema
          after migration 72 committed and 73 rolled back: 72</span><span
          style="color:#000000;background-color:#ffffff;">
        </span><br>
        <span style="color:#000000;background-color:#ffffff;">Schema
          after REASSIGN OWNED and a successful start: 79</span><br>
        <span style="color:#000000;background-color:#ffffff;">
        </span><br>
      </span>
      <br>
      <br>
      <br>
    </p>
  </body>
</html>