Observal Admin
Observal/Observal
Administers Observal users, settings, diagnostics, review queues, security events, audit logs, SAML, SCIM, the local Observal server, its upgrades and rollback, and its own PostgreSQL and ClickHouse…
Schema migrations: ALTER patterns, engine changes, zero-downtime swaps, clickhouse-local offline migrations, lightweight UPDATE/DELETE strategies, and Postgres→ClickHouse migration planning (type…
$ npx skills add chmonitor/chmonitor --skill migration-patterns -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install chmonitor/chmonitor migration-patterns --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/chmonitor/chmonitor.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/migration-patterns .claude/skills/migration-patterns && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "migration-patterns" agent skill from https://github.com/chmonitor/chmonitor/tree/main/.agents/skills/migration-patterns into .claude/skills/migration-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migration-patterns", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/chmonitor/chmonitor/tree/main/.agents/skills/migration-patternsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add chmonitor/chmonitor --skill migration-patterns -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install chmonitor/chmonitor migration-patterns --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/chmonitor/chmonitor.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/migration-patterns .agents/skills/migration-patterns && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "migration-patterns" agent skill from https://github.com/chmonitor/chmonitor/tree/main/.agents/skills/migration-patterns into .agents/skills/migration-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migration-patterns", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add chmonitor/chmonitor --skill migration-patterns -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install chmonitor/chmonitor migration-patterns --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/chmonitor/chmonitor.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/migration-patterns .cursor/skills/migration-patterns && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "migration-patterns" agent skill from https://github.com/chmonitor/chmonitor/tree/main/.agents/skills/migration-patterns into .cursor/skills/migration-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migration-patterns", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/chmonitor/chmonitor.git --path .agents/skills/migration-patterns--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add chmonitor/chmonitor --skill migration-patterns -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install chmonitor/chmonitor migration-patterns --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/chmonitor/chmonitor.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/migration-patterns .gemini/skills/migration-patterns && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "migration-patterns" agent skill from https://github.com/chmonitor/chmonitor/tree/main/.agents/skills/migration-patterns into .gemini/skills/migration-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migration-patterns", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install chmonitor/chmonitor migration-patternsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add chmonitor/chmonitor --skill migration-patterns -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/chmonitor/chmonitor.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/migration-patterns .github/skills/migration-patterns && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "migration-patterns" agent skill from https://github.com/chmonitor/chmonitor/tree/main/.agents/skills/migration-patterns into .github/skills/migration-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migration-patterns", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add chmonitor/chmonitor --skill migration-patterns -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install chmonitor/chmonitor migration-patterns --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/chmonitor/chmonitor.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/migration-patterns .opencode/skills/migration-patterns && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "migration-patterns" agent skill from https://github.com/chmonitor/chmonitor/tree/main/.agents/skills/migration-patterns into .opencode/skills/migration-patterns/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migration-patterns", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
migration-patternsSchema migrations: ALTER patterns, engine changes, zero-downtime swaps, clickhouse-local offline migrations, lightweight UPDATE/DELETE strategies, and Postgres→ClickHouse migration planning (type…
Migration Patterns is an agent skill from chmonitor/chmonitor. Schema migrations: ALTER patterns, engine changes, zero-downtime swaps, clickhouse-local offline migrations, lightweight UPDATE/DELETE strategies, and Postgres→ClickHouse migration planning (type mapping, schema pitfalls, PeerDB CDC, validation, schema introspection).
Its SKILL.md is about 4.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Databases, covering Data warehousing and Database migrations. It works with ClickHouse and PostgreSQL. The repository describes itself as: Open-source operational advisor for ClickHouse — real-time monitoring plus AI-driven index/partition/materialized-view recommendations. The licence is GPL-3.0.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit fc39ef0. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are sql).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Migration Patterns loads about 4.4k tokens when it runs. Until then it costs about 72 tokens; SKILL.md has 1,932 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from chmonitor/chmonitor at commit fc39ef0, republished under its GPL-3.0 licence (© chmonitor). 1,932 words, ~4,441 tokens.
.claude/skills/migration-patterns/SKILL.md (or your agent's skills folder).ALTER TABLE t ADD COLUMN col Type [DEFAULT expr] [AFTER existing_col]ALTER TABLE t DROP COLUMN colALTER TABLE t MODIFY COLUMN col NewType (must be compatible)ALTER TABLE t RENAME COLUMN old TO newCREATE TABLE t_new ENGINE = ReplacingMergeTree() ORDER BY id AS SELECT * FROM t_old;
RENAME TABLE t_old TO t_backup, t_new TO t_old;INSERT INTO ... SELECT with batchingEXCHANGE TABLES t_old AND t_newRENAME TABLE t_old TO t_backup, t_new TO t_oldCREATE MATERIALIZED VIEW mv TO t_new AS SELECT ... FROM t_oldINSERT INTO t_new SELECT ... FROM t_oldINSERT INTO new SELECT * FROM old WHERE toYYYYMM(date) = 202301max_insert_block_size and max_threads for throughput controlsystem.processes and system.mergesALTER TABLE t UPDATE col = expr WHERE condition — async by default (mutations_sync = 0)SELECT * FROM system.mutations WHERE table = 't'ALTER TABLE t DELETE WHERE condition — rewrites affected partsmax_rows_per_mutation to limit rows per mutation batchsystem.mutations for completionremote() table function to copy between servers:INSERT INTO local_db.t SELECT * FROM remote('source_host:9000', 'db', 't', 'user', 'pass')clickhouse-local offline approachclickhouse-local --file migration.sqlclickhouse-local -S 'col1 Type1, col2 Type2' --input-format Native < data.binCREATE TABLE _schema_migrations (name String, applied_at DateTime DEFAULT now()) ENGINE = TinyLog;ALTER TABLE t ATTACH PARTITION id FROM other_table — zero-copy if same structureALTER TABLE t REPLACE PARTITION id FROM other_table — atomic swapALTER TABLE t MOVE PARTITION id TO TABLE other_table — move dataEXCHANGE TABLES fails if either table is replicated with different replica pathsAdvisory only. This section helps you plan a Postgres→ClickHouse migration and recommend the tooling chmonitor already ships — it never executes a migration. Follow the same phased workflow ClickHouse Cloud uses for its managed-Postgres onboarding: discovery → schema design → type mapping → CDC ingestion → validation. Do each phase before the next.
Ground every recommendation in the user's actual schema, not generic advice.
Once Postgres connectivity ships (issues #2449/#2451 add a read-only Postgres
query path), run these advisory information_schema / pg_catalog queries via
that path — they are SELECT-only and safe against a production replica. Until
that path exists, hand these to the user to run themselves and paste back.
Tables and row estimates (sizing the migration):
SELECT n.nspname AS schema, c.relname AS table,
c.reltuples::bigint AS est_rows,
pg_total_relation_size(c.oid) AS total_bytes
FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'r' AND n.nspname NOT IN ('pg_catalog','information_schema')
ORDER BY total_bytes DESC;Columns and types (drives the type-mapping table below):
SELECT table_schema, table_name, column_name, ordinal_position,
data_type, udt_name, is_nullable,
numeric_precision, numeric_scale, character_maximum_length
FROM information_schema.columns
WHERE table_schema NOT IN ('pg_catalog','information_schema')
ORDER BY table_schema, table_name, ordinal_position;Primary keys / unique constraints (drives ORDER BY + dedup strategy):
SELECT tc.table_schema, tc.table_name, tc.constraint_type, kcu.column_name,
kcu.ordinal_position
FROM information_schema.table_constraints tc
JOIN information_schema.key_column_usage kcu
ON tc.constraint_name = kcu.constraint_name
AND tc.table_schema = kcu.table_schema
WHERE tc.constraint_type IN ('PRIMARY KEY','UNIQUE')
AND tc.table_schema NOT IN ('pg_catalog','information_schema')
ORDER BY tc.table_name, kcu.ordinal_position;Indexes (candidates for ORDER BY, skip indexes, or projections):
SELECT schemaname, tablename, indexname, indexdef
FROM pg_indexes
WHERE schemaname NOT IN ('pg_catalog','information_schema')
ORDER BY tablename;Foreign keys (denormalize or JOIN-at-query-time candidates):
SELECT tc.table_name, kcu.column_name,
ccu.table_name AS foreign_table, ccu.column_name AS foreign_column
FROM information_schema.table_constraints tc
JOIN information_schema.key_column_usage kcu
ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage ccu
ON ccu.constraint_name = tc.constraint_name
WHERE tc.constraint_type = 'FOREIGN KEY'
AND tc.table_schema NOT IN ('pg_catalog','information_schema');Map every source column to a ClickHouse type. Use the exact source type from the
information_schema.columns query above (udt_name + numeric_precision/scale).
| Postgres type | ClickHouse type | Notes |
|---|---|---|
smallint | Int16 | |
integer / int / int4 | Int32 | |
bigint / int8 | Int64 | |
serial / bigserial / GENERATED … AS IDENTITY | plain Int32 / Int64 | ClickHouse has no auto-increment. Migrate the existing values as ordinary integers; generate new ids app-side (e.g. snowflake) or with generateSnowflakeID() — do not expect a sequence. |
numeric(p,s) / decimal(p,s) | Decimal(p,s) | Exact. Keep p ≤ 76; pick the narrowest of Decimal32/64/128/256 that fits p. |
numeric / decimal (no precision) | String or Float64 | Unbounded/variable precision has no fixed ClickHouse type. Float64 is fast but lossy (not exact for money); String preserves exact text but isn't arithmetic. Choose per column — money/exact → String (or a bounded Decimal if you can pin p,s), analytics-approximate → Float64. |
real / float4 | Float32 | |
double precision / float8 | Float64 | |
money | Decimal(18,2) | Postgres money is locale-formatted; strip formatting on export. |
text / varchar(n) / char(n) / citext | String | ClickHouse String is unbounded; the (n) length limit is not enforced (add a CHECK/constraint only if you need it). LowCardinality(String) for low-distinct-value columns (statuses, enums). |
boolean | Bool | Alias of UInt8 (0/1). |
uuid | UUID | Native 16-byte type. |
bytea | String | ClickHouse String is a byte string; store raw bytes directly. |
json / jsonb | JSON (24.8+) or String | Prefer the native JSON type on 24.8+ (typed sub-column access, no reparsing). On older servers use String and query with JSONExtract*/simpleJSONExtract*. jsonb→JSON loses nothing semantically; key order is not preserved either way. |
date | Date (or Date32 for < 1970 / > 2149) | Date covers 1970-01-01…2149-06-06; use Date32 for wider ranges. |
timestamp (without time zone) | DateTime64(6) | Microsecond precision matches Postgres. Choose the scale to match the source (0=s, 3=ms, 6=µs). |
timestamptz (with time zone) | DateTime64(6, 'UTC') | Timezone caveat: Postgres stores timestamptz as UTC internally and converts on display; ClickHouse stores the raw value and attaches a display timezone. Normalize the export to UTC and pin 'UTC' in the type so values are unambiguous. Do timezone conversion at query time with toTimeZone(col, 'America/New_York'), never by baking a local zone into storage. |
time / timetz | String or UInt32 (seconds since midnight) | No native time-of-day type; pick a representation. |
interval | Int64 (seconds/µs) or String | No native interval type. |
inet / cidr | IPv4 / IPv6 (or String) | Use IPv4/IPv6 for equality/range filters; String if you need the original text. |
array (int[], text[], …) | Array(T) | Map element type per this table, e.g. int[]→Array(Int32), text[]→Array(String). Postgres multi-dimensional arrays → nested Array(Array(T)). |
hstore | Map(String, String) | |
enum | Enum8/Enum16 or LowCardinality(String) | LowCardinality(String) is more flexible (adding values needs no ALTER). |
point / geometry (PostGIS) | Point / Ring / Polygon (or String) | ClickHouse geo types are limited; store WKT String when unsure. |
Nullability: map is_nullable = 'YES' to Nullable(T) only when NULL is
semantically meaningful. Nullable() costs a separate null-mask column and
disqualifies the column from some optimizations. Prefer a sentinel default
(0, '', epoch) for NOT-NULL-in-practice columns; reserve Nullable() for
genuine tri-state data.
ClickHouse is not a drop-in relational target. The biggest planning mistakes:
ORDER BY defines the sort/primary-key index; it does not
enforce uniqueness. Choose it for query patterns, not because Postgres had a
PK there. Order columns low-cardinality → high-cardinality (e.g.
ORDER BY (tenant_id, event_type, toStartOfHour(ts), user_id)) so the sparse
primary index and granule pruning are effective. A high-cardinality leading
column (like a bare uuid PK) makes the index almost useless. See the
schema-design-advisor skill for ORDER BY selection detail.ReplacingMergeTree(version) keyed on that column via ORDER BY, and read
with SELECT … FINAL (or argMax/GROUP BY) to collapse duplicates.
FINAL caveat: it merges at query time and is expensive on large scans;
dedup happens lazily in background merges, so pre-merge reads can still see
duplicates. Don't assume "eventually unique" == "unique now."INDEX idx col TYPE minmax|set|bloom_filter GRANULARITY n). For a whole alternative access pattern (different ORDER BY),
use a projection instead. Most Postgres b-tree indexes should simply be
dropped — the sorting key replaces the primary one.Dictionary / small dimension table (good for small, slowly
changing lookups via dictGet). Prefer denormalization for hot analytical
paths.Nullable() cost. As above — every Nullable column carries a
null-mask and blocks some optimizations. Audit which columns truly need it.ALTER … UPDATE/DELETE are heavyweight async mutations (see
Lightweight Mutations above) — wrong for high-frequency row changes. For a
replicated OLTP source, model mutability with the engine:ReplacingMergeTree(version) — last-write-wins upserts; the CDC version
column (e.g. Postgres LSN or updated_at) picks the surviving row.CollapsingMergeTree(sign) / VersionedCollapsingMergeTree(sign, version)
— cancel out old row versions with sign = -1 / +1 pairs; suits
delete-heavy or exact-count workloads.
Deletes become a tombstone row (sign = -1, or a soft-delete flag) rather
than a physical DELETE. This is exactly the shape PeerDB writes (below).Recommend PeerDB. chmonitor already integrates PeerDB as its CDC mechanism — do not invent a Debezium/Kafka-Connect/other-tool HOWTO. PeerDB streams a Postgres source into a ClickHouse destination over logical replication (WAL), and chmonitor already models and monitors these mirrors:
DBType.POSTGRES (source) →
DBType.CLICKHOUSE (destination). chmonitor normalizes these peer types in
components/peerdb/peerdb-utils.ts (normalizeDbType / dbTypeLabel, the
DB_TYPE_BY_ORDINAL map where 3 = POSTGRES, 8 = CLICKHOUSE).PHASE_FLOWS.CDC in peerdb-utils.ts): Setup (replication slot +
publication + table init) → Initial snapshot (backfill existing rows) →
Snapshot done → CDC streaming (tailing the WAL, ongoing). PeerDB
applies inserts/updates/deletes into a ReplacingMergeTree-style destination,
which is why the engine choices in §3 matter.apps/dashboard/src/lib/peerdb/peerdb-config.ts, single instance via
PEERDB_API_URL). It reports mirror/flow status; it does not create
mirrors or give ad-hoc Postgres SQL access. So the skill's role is to plan
the target schema and point the user at the PeerDB pages to run and watch
the mirror — not to stand up the pipeline.src/routes/(peerdb)/peerdb/ (peers, mirror,
partitions, logs). Direct the user there to create the Postgres→ClickHouse
mirror and monitor snapshot progress + ongoing replication lag.Managed-cloud analog: on ClickHouse Cloud, ClickPipes (its native Postgres CDC connector) plays the same role as PeerDB — mention it as the managed option for Cloud users, but chmonitor's shipped integration is PeerDB.
After the initial snapshot completes and CDC is streaming, verify parity before cutover. All checks are read-only:
SELECT count() FROM ch_table against the
Postgres SELECT count(*) FROM pg_table (or the discovery reltuples
estimate for a fast first pass). Expect small transient drift while CDC is
live — recheck at a quiesced point.sum()/avg()/min()/max()
on numeric columns, count(distinct …) on keys, and per-day/toStartOfDay
row-count histograms to catch timezone shifts on timestamptz columns. A
matching sum(amount) and max(updated_at) per partition is strong evidence
the mapping is correct.src/routes/(peerdb)/peerdb/ (chmonitor surfaces slot size, WAL, and lag —
see the pdbFmtLag / pdbFmtBytes formatters). Cut over only when the mirror
is STATUS_RUNNING with lag near zero and stable.ReplacingMergeTree, run comparison counts with FINAL (or argMax) so you
compare deduplicated rows, not raw parts still awaiting merge.ORDER BY blindly — order by
cardinality for the read pattern.numeric without precision has no exact ClickHouse type — decide String vs
Float64 per column.timestamptz needs UTC normalization + a pinned 'UTC' display zone;
convert with toTimeZone at query time.serial/identity becomes a plain integer; new ids are the
app's job.ReplacingMergeTree+FINAL
and denormalize FKs (or use Dictionary JOINs).© chmonitor, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/migration-patterns of chmonitor/chmonitor.
Open the folder on GitHubat commit fc39ef0
Migration Patterns next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Migration Patterns this skillchmonitor/chmonitor | 298 | — | ~4.4k | Automated safety check: Pass | GPL-3.0 | |
| Observal AdminObserval/Observal | 4.1k | — | ~774 | Automated safety check: Pass | Apache-2.0 | |
| Database MigrationRain-kl/OpenFlare | 288 | — | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| Chdb SQLvemetric/vemetric | 394 | 1 repos | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Querying Tempotempoxyz/tidx | 107 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Local Platform E2Ecomputesdk/benchmarks | 126 | — | ~3k | Automated safety check: Notes | MIT |
Observal/Observal
Administers Observal users, settings, diagnostics, review queues, security events, audit logs, SAML, SCIM, the local Observal server, its upgrades and rollback, and its own PostgreSQL and ClickHouse…
Rain-kl/OpenFlare
Wavelet 项目专用:当新增或修改数据库表结构、索引、初始化数据、系统配置 seed、模板 seed、默认管理员、goose SQL 迁移、internal/infra/persistence/migrator、ClickHouse 分析库 DDL 或数据库升级流程时必须使用。本技能指导在 internal/infra/persistence/migrator/goose 下编写…
vemetric/vemetric
A skill your agent uses when the user wants to run SQL — especially analytical SQL — on local files (parquet/csv/json), URLs, S3 paths, or remote databases (Postgres, MySQL, MongoDB, ClickHouse…
tempoxyz/tidx
Query indexed Tempo chain data via tidx HTTP API and CLI. An agent skill from tempoxyz/tidx.
computesdk/benchmarks
Stand up benchmarks-platform locally (Postgres + MinIO + ClickHouse in docker) and run a real @benchsdk/runner benchmark against it, with no cloud or provider credentials.
ClickHouse/agent-skills
MUST USE when investigating performance issues on a ClickHouse-managed Postgres instance.
chmonitor/chmonitor
Non-animation creative direction for HyperFrames videos. An agent skill from chmonitor/chmonitor.
chmonitor/chmonitor
Audio and media assets for HyperFrames compositions, produced by one shared audio engine (scripts/audio.mjs) — multi-provider TTS (HeyGen / ElevenLabs / Kokoro local), background music + sound…
chmonitor/chmonitor
Port an existing Remotion (React) composition to HyperFrames HTML.
chmonitor/chmonitor
A skill your agent uses when the user has a music track (an audio file, or a video to pull audio from) and wants a beat-synced HyperFrames video, calm to hard-hitting.
chmonitor/chmonitor
All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus…
chmonitor/chmonitor
turn arbitrary text — an article, notes, a topic, a brief — into a faceless explainer video, up to ~3 min (sweet spot 30-90s), where every visual is invented (typography, abstract graphics…
Works with
Categories
Schema migrations: ALTER patterns, engine changes, zero-downtime swaps, clickhouse-local offline migrations, lightweight UPDATE/DELETE strategies, and Postgres→ClickHouse migration planning (type…. Migration Patterns is an agent skill from chmonitor/chmonitor. Schema migrations: ALTER patterns, engine changes, zero-downtime swaps, clickhouse-local offline migrations, lightweight UPDATE/DELETE strategies, and Postgres→ClickHouse migration planning (type mapping, schema pitfalls, PeerDB CDC, validation, schema introspection).
Migration Patterns fits situations like: tasks that involve Data warehousing; tasks that involve Database migrations.
Run `npx skills add chmonitor/chmonitor --skill migration-patterns -a claude-code`. Or copy the skill folder (.agents/skills/migration-patterns in chmonitor/chmonitor) into .claude/skills/migration-patterns in your project. Claude Code loads it when a task matches its description.
Run `npx skills add chmonitor/chmonitor --skill migration-patterns -a codex`. Or copy the skill folder (.agents/skills/migration-patterns in chmonitor/chmonitor) into .agents/skills/migration-patterns in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add chmonitor/chmonitor --skill migration-patterns -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/migration-patterns, .gemini/skills/migration-patterns, .github/skills/migration-patterns and .opencode/skills/migration-patterns in your project.
SKILL.md names no scripts, command-line tools or credentials: Migration Patterns is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Migration Patterns is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.4k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Migration Patterns: Observal Admin (Observal/Observal, 4.1k stars), Database Migration (Rain-kl/OpenFlare, 288 stars), Chdb SQL (vemetric/vemetric, 394 stars) and Querying Tempo (tempoxyz/tidx, 107 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
chmonitor (a GitHub organization) maintains it in chmonitor/chmonitor, which has 298 GitHub stars. The repository holds 53 skills in this directory. The repository was last updated on October 5, 2026.
Source: chmonitor/chmonitor on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.