~/logs/realtime.logs.prod
- 1770825926622838 1024 event body
- 1770825926623156 + echo 'Running migrations' event body
- 1770825926623584 + sudo -E -u nobody /app/bin/migrate event body
- 1770825927937719 info == Running 20210706140551 Realtime.Repo.Migrations.CreateTenants.change/0 forward event body
- 1770825928015454 info == Migrated 20220410212326 in 0.0s event body
- 1770825928055657 info == Migrated 20220818141501 in 0.0s event body
- 1770825928059428 info == Running 20221018173709 Realtime.Repo.Migrations.AddCdcDefault.up/0 forward event body
- 1770825928063676 info == Running 20221102172703 Realtime.Repo.Migrations.RenamePgType.up/0 forward event body
- 1770825928063696 info execute "update extensions set type = 'postgres_cdc_rls'" event body
- 1770825928073122 info == Migrated 20230110180046 in 0.0s event body
- 1770825928084846 info == Migrated 20230810220924 in 0.0s event body
- 1770825928105321 info == Running 20240704172020 :"Elixir.Realtime.Repo.Migrations.Add-notify-private-alpha".change/0 forward event body
- 1770825928105336 info alter table tenants event body
- 1770825928121454 info alter table tenants event body
- 1770825928128113 info == Running 20250811121559 Realtime.Repo.Migrations.AddMaxPresenceEventsPerSecond.change/0 forward event body
- 1770825928128498 info alter table tenants event body
- 1770825928129580 info == Migrated 20250811121559 in 0.0s event body
- 1770825928139220 info alter table tenants event body
- 1770825928157416 + '[' true = true ']' event body
- 1770825928157447 + echo 'Seeding selfhosted Realtime' event body
- 1770825929009344 info Loading 142 CA(s) from :otp store event body
- 1770825929164994 info event=server_setup_successfully driver=tcp port=5369 socket="#Port<0.5>" event body
- 1770825929532571 notice SYN[nonode@nohost] Creating tables for scope <Elixir.Realtime.Tenants.Connect> event body
- 1770825929532607 notice SYN[nonode@nohost|registry<Elixir.Realtime.Tenants.Connect>] Discovering the cluster event body
- 1770825929534392 notice SYN[nonode@nohost|registry<users_3>] Discovering the cluster event body
- 1770825929769066 info [libcluster:postgres] Connected to Postgres database event body
- 1770825929994390 notice SYN[nonode@nohost] Creating tables for scope <realtime_postgres_cdc_1> event body
- 1770825929995281 notice SYN[nonode@nohost] Adding node to scope <realtime_postgres_cdc_3> event body
- 1770825929996167 notice SYN[nonode@nohost|registry<realtime_postgres_cdc_4>] Discovering the cluster event body
- 1770825929996608 info Janitor started event body
- 1770825929996965 info Starting MetricsCleaner event body
- 1770825930162261 info == Running 20211116024918 Realtime.Tenants.Migrations.CreateRealtimeSubscriptionTable.change/0 forward event body
- 1770825930201716 info == Migrated 20211116045059 in 0.0s event body
- 1770825930204761 info execute "create function realtime.quote_wal2json(entity regclass)\n returns text\n language sql\n immutable\n strict\n as $$\n select\n (\n select string_agg('' || ch,'')\n from unnest(string_to_array(nsp.nspname::text, null)) with ordinality x(ch, idx)\n where\n not (x.idx = 1 and x.ch = '\"')\n and not (\n x.idx = array_length(string_to_array(nsp.nspname::text, null), 1)\n and x.ch = '\"'\n )\n )\n || '.'\n || (\n select string_agg('' || ch,'')\n from unnest(string_to_array(pc.relname::text, null)) with ordinality x(ch, idx)\n where\n not (x.idx = 1 and x.ch = '\"')\n and not (\n x.idx = array_length(string_to_array(nsp.nspname::text, null), 1)\n and x.ch = '\"'\n )\n )\n from\n pg_class pc\n join pg_namespace nsp\n on pc.relnamespace = nsp.oid\n where\n pc.oid = entity\n $$;" event body
- 1770825930215706 info execute "DO $$\nBEGIN\n IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'wal_column') THEN\n CREATE TYPE realtime.wal_column AS (\n name text,\n type text,\n value jsonb,\n is_pkey boolean,\n is_selectable boolean\n );\n END IF;\nEND$$;\n" event body
- 1770825930226521 info execute "create function realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[])\n returns bool\n language sql\n immutable\n as $$\n /*\n Should the record be visible (true) or filtered out (false) after *filters* are applied\n */\n select\n -- Default to allowed when no filters present\n coalesce(\n sum(\n realtime.check_equality_op(\n op:=f.op,\n type_:=col.type::regtype,\n -- cast jsonb to text\n val_1:=col.value #>> '{}',\n val_2:=f.value\n )::int\n ) = count(1),\n true\n )\n from\n unnest(filters) f\n join unnest(columns) col\n on f.column_name = col.name;\n $$;" event body
- 1770825930232473 info == Running 20211116214523 Realtime.Tenants.Migrations.CreateRealtimeApplyRlsFunction.change/0 forward event body
- 1770825930245142 info == Migrated 20211122062447 in 0.0s event body
- 1770825930278572 info execute "alter table realtime.subscription\n add column claims jsonb not null,\n add column claims_role regrole not null generated always as (realtime.to_regrole(claims ->> 'role')) stored,\n add column created_at timestamp not null default timezone('utc', now())" event body
- 1770825930292814 info execute "alter type realtime.wal_rls rename attribute users to subscription_ids cascade;" event body
- 1770825930336006 info == Migrated 20211228014915 in 0.0s event body
- 1770825930341747 info == Running 20220107221237 Realtime.Tenants.Migrations.UpdateChangeTimestampToIso8601ZuluFormat.change/0 forward event body
- 1770825930341785 info execute "create or replace function realtime.apply_rls(wal jsonb, max_record_bytes int = 1024 * 1024)\n returns setof realtime.wal_rls\n language plpgsql\n volatile\n as $$\n declare\n -- Regclass of the table e.g. public.notes\n entity_ regclass = (quote_ident(wal ->> 'schema') || '.' || quote_ident(wal ->> 'table'))::regclass;\n\n -- I, U, D, T: insert, update ...\n action realtime.action = (\n case wal ->> 'action'\n when 'I' then 'INSERT'\n when 'U' then 'UPDATE'\n when 'D' then 'DELETE'\n else 'ERROR'\n end\n );\n\n -- Is row level security enabled for the table\n is_rls_enabled bool = relrowsecurity from pg_class where oid = entity_;\n\n subscriptions realtime.subscription[] = array_agg(subs)\n from\n realtime.subscription subs\n where\n subs.entity = entity_;\n\n -- Subscription vars\n roles regrole[] = array_agg(distinct us.claims_role)\n from\n unnest(subscriptions) us;\n\n working_role regrole;\n claimed_role regrole;\n claims jsonb;\n\n subscription_id uuid;\n subscription_has_access bool;\n visible_to_subscription_ids uuid[] = '{}';\n\n -- structured info for wal's columns\n columns realtime.wal_column[];\n -- previous identity values for update/delete\n old_columns realtime.wal_column[];\n\n error_record_exceeds_max_size boolean = octet_length(wal::text) > max_record_bytes;\n\n -- Primary jsonb output for record\n output jsonb;\n\n begin\n perform set_config('role', null, true);\n\n columns =\n array_agg(\n (\n x->>'name',\n x->>'type',\n realtime.cast((x->'value') #>> '{}', (x->>'type')::regtype),\n (pks ->> 'name') is not null,\n true\n )::realtime.wal_column\n )\n from\n jsonb_array_elements(wal -> 'columns') x\n left join jsonb_array_elements(wal -> 'pk') pks\n on (x ->> 'name') = (pks ->> 'name');\n\n old_columns =\n array_agg(\n (\n x->>'name',\n x->>'type',\n realtime.cast((x->'value') #>> '{}', (x->>'type')::regtype),\n (pks ->> 'name') is not null,\n true\n )::realtime.wal_column\n )\n from\n jsonb_array_elements(wal -> 'identity') x\n left join jsonb_array_elements(wal -> 'pk') pks\n on (x ->> 'name') = (pks ->> 'name');\n\n for working_role in select * from unnest(roles) loop\n\n -- Update `is_selectable` for columns and old_columns\n columns =\n array_agg(\n (\n c.name,\n c.type,\n c.value,\n c.is_pkey,\n pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT')\n )::realtime.wal_column\n )\n from\n unnest(columns) c;\n\n old_columns =\n array_agg(\n (\n c.name,\n c.type,\n c.value,\n c.is_pkey,\n pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT')\n )::realtime.wal_column\n )\n from\n unnest(old_columns) c;\n\n if action <> 'DELETE' and count(1) = 0 from unnest(columns) c where c.is_pkey then\n return next (\n null,\n is_rls_enabled,\n -- subscriptions is already filtered by entity\n (select array_agg(s.subscription_id) from unnest(subscriptions) as s where claims_role = working_role),\n array['Error 400: Bad Request, no primary key']\n )::realtime.wal_rls;\n\n -- The claims role does not have SELECT permission to the primary key of entity\n elsif action <> 'DELETE' and sum(c.is_selectable::int) <> count(1) from unnest(columns) c where " <> ... event body
- 1770825930346240 info == Running 20220228202821 Realtime.Tenants.Migrations.UpdateSubscriptionCheckFiltersFunctionDynamicTableName.change/0 forward event body
- 1770825930355701 info == Migrated 20220312004840 in 0.0s event body
- 1770825930359394 info == Running 20220603231003 Realtime.Tenants.Migrations.AddQuotedRegtypesSupport.change/0 forward event body
- 1770825930376885 info == Migrated 20220603232444 in 0.0s event body
- 1770825930397888 info == Migrated 20220908172859 in 0.0s event body
- 1770825930413383 info == Migrated 20230119133233 in 0.0s event body
- 1770825930420166 info execute "\n create or replace function realtime.subscription_check_filters()\n returns trigger\n language plpgsql\n as $$\n /*\n Validates that the user defined filters for a subscription:\n - refer to valid columns that the claimed role may access\n - values are coercable to the correct column type\n */\n declare\n col_names text[] = coalesce(\n array_agg(c.column_name order by c.ordinal_position),\n '{}'::text[]\n )\n from\n information_schema.columns c\n where\n format('%I.%I', c.table_schema, c.table_name)::regclass = new.entity\n and pg_catalog.has_column_privilege(\n (new.claims ->> 'role'),\n format('%I.%I', c.table_schema, c.table_name)::regclass,\n c.column_name,\n 'SELECT'\n );\n filter realtime.user_defined_filter;\n col_type regtype;\n\n in_val jsonb;\n begin\n for filter in select * from unnest(new.filters) loop\n -- Filtered column is valid\n if not filter.column_name = any(col_names) then\n raise exception 'invalid column for filter %', filter.column_name;\n end if;\n\n -- Type is sanitized and safe for string interpolation\n col_type = (\n select atttypid::regtype\n from pg_catalog.pg_attribute\n where attrelid = new.entity\n and attname = filter.column_name\n );\n if col_type is null then\n raise exception 'failed to lookup type for column %', filter.column_name;\n end if;\n\n -- Set maximum number of entries for in filter\n if filter.op = 'in'::realtime.equality_op then\n in_val = realtime.cast(filter.value, (col_type::text || '[]')::regtype);\n if coalesce(jsonb_array_length(in_val), 0) > 100 then\n raise exception 'too many values for `in` filter. Maximum 100';\n end if;\n end if;\n\n -- raises an exception if value is not coercable to type\n perform realtime.cast(filter.value, col_type);\n end loop;\n\n -- Apply consistent order to filters so the unique constraint on\n -- (subscription_id, entity, filters) can't be tricked by a different filter order\n new.filters = coalesce(\n array_agg(f order by f.column_name, f.op, f.value),\n '{}'\n ) from unnest(new.filters) f;\n\n return new;\n end;\n $$;\n " event body
- 1770825930444228 info == Migrated 20230228184745 in 0.0s event body
- 1770825930448205 info execute "\n create or replace function realtime.apply_rls(wal jsonb, max_record_bytes int = 1024 * 1024)\n returns setof realtime.wal_rls\n language plpgsql\n volatile\n as $$\n declare\n -- Regclass of the table e.g. public.notes\n entity_ regclass = (quote_ident(wal ->> 'schema') || '.' || quote_ident(wal ->> 'table'))::regclass;\n\n -- I, U, D, T: insert, update ...\n action realtime.action = (\n case wal ->> 'action'\n when 'I' then 'INSERT'\n when 'U' then 'UPDATE'\n when 'D' then 'DELETE'\n else 'ERROR'\n end\n );\n\n -- Is row level security enabled for the table\n is_rls_enabled bool = relrowsecurity from pg_class where oid = entity_;\n\n subscriptions realtime.subscription[] = array_agg(subs)\n from\n realtime.subscription subs\n where\n subs.entity = entity_;\n\n -- Subscription vars\n roles regrole[] = array_agg(distinct us.claims_role)\n from\n unnest(subscriptions) us;\n\n working_role regrole;\n claimed_role regrole;\n claims jsonb;\n\n subscription_id uuid;\n subscription_has_access bool;\n visible_to_subscription_ids uuid[] = '{}';\n\n -- structured info for wal's columns\n columns realtime.wal_column[];\n -- previous identity values for update/delete\n old_columns realtime.wal_column[];\n\n error_record_exceeds_max_size boolean = octet_length(wal::text) > max_record_bytes;\n\n -- Primary jsonb output for record\n output jsonb;\n\n begin\n perform set_config('role', null, true);\n\n columns =\n array_agg(\n (\n x->>'name',\n x->>'type',\n x->>'typeoid',\n realtime.cast(\n (x->'value') #>> '{}',\n coalesce(\n (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4\n (x->>'type')::regtype\n )\n ),\n (pks ->> 'name') is not null,\n true\n )::realtime.wal_column\n )\n from\n jsonb_array_elements(wal -> 'columns') x\n left join jsonb_array_elements(wal -> 'pk') pks\n on (x ->> 'name') = (pks ->> 'name');\n\n old_columns =\n array_agg(\n (\n x->>'name',\n x->>'type',\n x->>'typeoid',\n realtime.cast(\n (x->'value') #>> '{}',\n coalesce(\n (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4\n (x->>'type')::regtype\n )\n ),\n (pks ->> 'name') is not null,\n true\n )::realtime.wal_column\n )\n from\n jsonb_array_elements(wal -> 'identity') x\n left join jsonb_array_elements(wal -> 'pk') pks\n on (x ->> 'name') = (pks ->> 'name');\n\n for working_role in select * from unnest(roles) loop\n\n -- Update `is_selectable` for columns and old_columns\n columns =\n array_agg(\n (\n c.name,\n c.type_name,\n c.type_oid,\n c.value,\n c.is_pkey,\n pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT')\n )::realtime.wal_column\n )\n from\n unnest(columns) c;\n\n old_columns =\n array_agg(\n (\n c.name,\n c.type_name,\n c.type_oid,\n " <> ... event body
- 1770825930461364 info == Running 20231018144023 Realtime.Tenants.Migrations.CreateChannels.change/0 forward event body
- 1770825930478027 info execute "GRANT SELECT ON ALL TABLES IN SCHEMA realtime TO postgres, anon, authenticated, service_role\n" event body
- 1770825930486805 info == Migrated 20231204144024 in 0.0s event body
- 1770825930494987 info == Running 20240108234812 Realtime.Tenants.Migrations.AddChannelsColumnForWriteCheck.change/0 forward event body
- 1770825930517034 info execute "GRANT INSERT ON realtime.broadcasts TO postgres, anon, authenticated, service_role\n" event body
- 1770825930521077 info == Running 20240321100241 Realtime.Tenants.Migrations.AddPresencesPoliciesTable.change/0 forward event body
- 1770825930530145 info execute "GRANT UPDATE ON realtime.presences TO postgres, anon, authenticated, service_role" event body
- 1770825930532045 info == Migrated 20240321100241 in 0.0s event body
- 1770825930549762 info alter table realtime.presences event body
- 1770825930553920 info drop table realtime.broadcasts cascade event body
- 1770825930578995 info execute "create or replace function realtime.apply_rls(wal jsonb, max_record_bytes int = 1024 * 1024)\nreturns setof realtime.wal_rls\nlanguage plpgsql\nvolatile\nas $$\ndeclare\n-- Regclass of the table e.g. public.notes\nentity_ regclass = (quote_ident(wal ->> 'schema') || '.' || quote_ident(wal ->> 'table'))::regclass;\n\n-- I, U, D, T: insert, update ...\naction realtime.action = (\n case wal ->> 'action'\n when 'I' then 'INSERT'\n when 'U' then 'UPDATE'\n when 'D' then 'DELETE'\n else 'ERROR'\n end\n);\n\n-- Is row level security enabled for the table\nis_rls_enabled bool = relrowsecurity from pg_class where oid = entity_;\n\nsubscriptions realtime.subscription[] = array_agg(subs)\n from\n realtime.subscription subs\n where\n subs.entity = entity_;\n\n-- Subscription vars\nroles regrole[] = array_agg(distinct us.claims_role::text)\n from\n unnest(subscriptions) us;\n\nworking_role regrole;\nclaimed_role regrole;\nclaims jsonb;\n\nsubscription_id uuid;\nsubscription_has_access bool;\nvisible_to_subscription_ids uuid[] = '{}';\n\n-- structured info for wal's columns\ncolumns realtime.wal_column[];\n-- previous identity values for update/delete\nold_columns realtime.wal_column[];\n\nerror_record_exceeds_max_size boolean = octet_length(wal::text) > max_record_bytes;\n\n-- Primary jsonb output for record\noutput jsonb;\n\nbegin\nperform set_config('role', null, true);\n\ncolumns =\n array_agg(\n (\n x->>'name',\n x->>'type',\n x->>'typeoid',\n realtime.cast(\n (x->'value') #>> '{}',\n coalesce(\n (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4\n (x->>'type')::regtype\n )\n ),\n (pks ->> 'name') is not null,\n true\n )::realtime.wal_column\n )\n from\n jsonb_array_elements(wal -> 'columns') x\n left join jsonb_array_elements(wal -> 'pk') pks\n on (x ->> 'name') = (pks ->> 'name');\n\nold_columns =\n array_agg(\n (\n x->>'name',\n x->>'type',\n x->>'typeoid',\n realtime.cast(\n (x->'value') #>> '{}',\n coalesce(\n (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4\n (x->>'type')::regtype\n )\n ),\n (pks ->> 'name') is not null,\n true\n )::realtime.wal_column\n )\n from\n jsonb_array_elements(wal -> 'identity') x\n left join jsonb_array_elements(wal -> 'pk') pks\n on (x ->> 'name') = (pks ->> 'name');\n\nfor working_role in select * from unnest(roles) loop\n\n -- Update `is_selectable` for columns and old_columns\n columns =\n array_agg(\n (\n c.name,\n c.type_name,\n c.type_oid,\n c.value,\n c.is_pkey,\n pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT')\n )::realtime.wal_column\n )\n from\n unnest(columns) c;\n\n old_columns =\n array_agg(\n (\n c.name,\n c.type_name,\n c.type_oid,\n c.value,\n c.is_pkey,\n pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT')\n )::realtime.wal_column\n )\n from\n unnest(old_columns) c;\n\n if action <> 'DELETE' and count(1) = 0 from unnest(columns) c where c.is_pkey then\n return next (\n jsonb_build_object(\n 'schema', wal ->> 'schema',\n 'table', wal ->> 'table',\n 'type', action\n ),\n is_rls_enabled,\n -- subscriptions is already filtered by entity\n (select array_agg(s.subscription_id) from unnest(subscriptions) as s where claims_role = working_role),\n array['Error 400: Bad Request, no primary key']\n )::realtime.wal_rls;\n\n " <> ... event body
- 1770825930585310 info execute "-- Commented to have oriole compatability\n-- ALTER TABLE realtime.messages SET UNLOGGED;\n" event body
- 1770825930597602 info alter table realtime.messages event body
- 1770825930604444 info alter table realtime.messages event body
- 1770825930615369 info execute "DO $$\nDECLARE\n rec record;\n sql text;\n role_list text;\nBEGIN\n FOR rec IN\n SELECT *\n FROM pg_policies\n WHERE schemaname = 'realtime'\n AND tablename = 'messages'\n LOOP\n -- Start constructing the create policy statement\n sql := 'CREATE POLICY ' || quote_ident(rec.policyname) ||\n ' ON realtime.messages_new ';\n\n IF (rec.permissive = 'PERMISSIVE') THEN\n sql := sql || 'AS PERMISSIVE ';\n ELSE\n sql := sql || 'AS RESTRICTIVE ';\n END IF;\n\n sql := sql || ' FOR ' || rec.cmd;\n\n -- Include roles if specified\n IF rec.roles IS NOT NULL AND array_length(rec.roles, 1) > 0 THEN\n role_list := (\n SELECT string_agg(quote_ident(role), ', ')\n FROM unnest(rec.roles) AS role\n );\n sql := sql || ' TO ' || role_list;\n END IF;\n\n -- Include using clause if specified\n IF rec.qual IS NOT NULL THEN\n sql := sql || ' USING (' || rec.qual || ')';\n END IF;\n\n -- Include with check clause if specified\n IF rec.with_check IS NOT NULL THEN\n sql := sql || ' WITH CHECK (' || rec.with_check || ')';\n END IF;\n\n -- Output the constructed sql for debugging purposes\n RAISE NOTICE 'Executing: %', sql;\n\n -- Execute the constructed sql statement\n EXECUTE sql;\n END LOOP;\nEND\n$$\n" event body
- 1770825930617224 info execute "ALTER TABLE realtime.messages RENAME TO messages_old" event body
- 1770825930622941 info execute "GRANT SELECT ON realtime.messages TO postgres, anon, authenticated, service_role" event body
- 1770825930624572 info execute "ALTER TABLE realtime.messages ENABLE ROW LEVEL SECURITY" event body
- 1770825930630414 info alter table realtime.messages event body
- 1770825930643783 info execute "drop index if exists \"realtime\".\"ix_realtime_subscription_entity\"" event body
- 1770825930644647 info execute "do $$\nbegin\n create index concurrently if not exists ix_realtime_subscription_entity on realtime.subscription using btree (entity);\nexception\n when others then\n create index if not exists ix_realtime_subscription_entity on realtime.subscription using btree (entity);\nend$$;\n" event body
- 1770825930657756 info == Migrated 20241220123912 in 0.0s event body
- 1770825930667580 info == Running 20250107150512 Realtime.Tenants.Migrations.RealtimeSubscriptionUnlogged.change/0 forward event body
- 1770825930673585 info == Running 20250123174212 Realtime.Tenants.Migrations.RemoveUnusedPublications.change/0 forward event body
- 1770825930681881 info == Migrated 20250506224012 in 0.0s event body
- 1770825930685103 info == Migrated 20250523164012 in 0.0s event body
- 1770825930693051 info == Running 20250905041441 Realtime.Tenants.Migrations.CreateMessagesReplayIndex.change/0 forward event body
- 1770825932627663 info ["$kind": :gen_rpc_dispatcher_start] event body
- 1770825932627886 info ["$kind": :gen_rpc_dispatcher_start] event body
- 1770825932628253 info ["$kind": :gen_rpc_dispatcher_start] event body
- 1770825932657263 notice SYN[realtime@127.0.0.1] Adding node to scope <Elixir.Realtime.Tenants.Connect> event body
- 1770825932658099 notice SYN[realtime@127.0.0.1] Creating tables for scope <users_0> event body
- 1770825932658322 notice SYN[realtime@127.0.0.1|registry<users_0>] Discovering the cluster event body
- 1770825932659559 notice SYN[realtime@127.0.0.1|pg<users_2>] Discovering the cluster event body
- 1770825932659981 notice SYN[realtime@127.0.0.1|pg<users_3>] Discovering the cluster event body
- 1770825932660184 notice SYN[realtime@127.0.0.1|registry<users_4>] Discovering the cluster event body
- 1770825932743114 info Access RealtimeWeb.Endpoint at http://realtime.supabase.co:443 event body
- 1770825932745039 notice SYN[realtime@127.0.0.1|pg<realtime_postgres_cdc_1>] Discovering the cluster event body
- 1770825932746139 notice SYN[realtime@127.0.0.1|pg<realtime_postgres_cdc_2>] Discovering the cluster event body
- 1770825932746443 notice SYN[realtime@127.0.0.1|registry<realtime_postgres_cdc_3>] Discovering the cluster event body
- 1770825932747214 info Janitor started event body
- 1770841352748230 info Janitor started event body
- 1770856232749090 info Janitor started event body
- 1770954692754970 info Janitor started event body
- 1771003472758422 info Janitor started event body
- 1771019132759064 info Janitor started event body
- 1771069532762194 info Janitor started event body
- 1771305572775915 info Janitor started event body
random(tips): Default behavior is to search the log message field (e.g. `error`).