From d377d97737259078bd85462f8e055ccfdb37cc26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sun, 24 May 2026 19:29:05 +0300 Subject: [PATCH] =?UTF-8?q?fix(migration):=202026=5F05=5F22=5F000002=20?= =?UTF-8?q?=E2=80=94=20use=20pgsql=5Fsupplier=20connection=20(owner-rights?= =?UTF-8?q?=20fix)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Миграция падала на проде: SQLSTATE[42501]: Insufficient privilege: must be owner of table webhook_log Причина: default connection 'pgsql' (crm_app_user) не имеет owner-прав на webhook_log (owner — crm_migrator). Заменено на 'pgsql_supplier' (BYPASSRLS-роль crm_supplier_worker) — паттерн Спека B Phase 1 (commit 546ca30a), который выработан ровно под эту проблему prod-ролей. Эта миграция блокировала выкатку legacy-webhook-removal (Phase 6 deploy 24.05.2026, отменено rollback'ом). После fix миграция применится no-op (webhook_log будет дропнут моей миграцией 2026_05_24_140000 сразу после). Co-Authored-By: Claude Opus 4.7 --- ..._05_22_000002_webhook_log_supplier_columns.php | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/app/database/migrations/2026_05_22_000002_webhook_log_supplier_columns.php b/app/database/migrations/2026_05_22_000002_webhook_log_supplier_columns.php index bd50e7c6..0ac8f57c 100644 --- a/app/database/migrations/2026_05_22_000002_webhook_log_supplier_columns.php +++ b/app/database/migrations/2026_05_22_000002_webhook_log_supplier_columns.php @@ -9,8 +9,11 @@ return new class extends Migration { public function up(): void { - // Guard: only run if webhook_log exists (should always exist, but be safe) - if (! Schema::hasTable('webhook_log')) { + $conn = DB::connection('pgsql_supplier'); + + // Guard: only run if webhook_log exists (на проде после legacy-webhook-removal + // таблицы нет — миграция становится no-op). + if (! $conn->getSchemaBuilder()->hasTable('webhook_log')) { return; } @@ -18,16 +21,18 @@ return new class extends Migration base_path('/../db/migrations/2026_05_22_002_webhook_log_supplier_columns.sql') ); - DB::unprepared($sql); + $conn->unprepared($sql); } public function down(): void { - if (! Schema::hasTable('webhook_log')) { + $conn = DB::connection('pgsql_supplier'); + + if (! $conn->getSchemaBuilder()->hasTable('webhook_log')) { return; } - DB::unprepared(<<<'SQL' + $conn->unprepared(<<<'SQL' ALTER TABLE webhook_log DROP COLUMN IF EXISTS source, DROP COLUMN IF EXISTS status,