#164 by GitHub stars
ariga/atlas
Declarative schema migrations with schema-as-code workflows
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/atlas/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Local scripts → After Network or broad shell
ed994a77898e → f851298e4b0e
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → ed994a77898e
No earlier version was observed for comparison.
skills/atlas-action/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
ed994a77898e → f851298e4b0e
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ed994a77898e
No earlier version was observed for comparison.
skills/atlas-clickhouse/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
ed994a77898e → f851298e4b0e
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ed994a77898e
No earlier version was observed for comparison.
skills/atlas-databricks/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
ed994a77898e → f851298e4b0e
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ed994a77898e
No earlier version was observed for comparison.
skills/atlas-mssql/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
ed994a77898e → f851298e4b0e
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ed994a77898e
No earlier version was observed for comparison.
skills/atlas-mysql/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
ed994a77898e → f851298e4b0e
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ed994a77898e
No earlier version was observed for comparison.
skills/atlas-onboard/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
ed994a77898e → f851298e4b0e
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ed994a77898e
No earlier version was observed for comparison.
skills/atlas-operator/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
ed994a77898e → f851298e4b0e
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ed994a77898e
No earlier version was observed for comparison.
skills/atlas-oracle/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
ed994a77898e → f851298e4b0e
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ed994a77898e
No earlier version was observed for comparison.
skills/atlas-postgres/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
ed994a77898e → f851298e4b0e
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ed994a77898e
No earlier version was observed for comparison.
skills/atlas-redshift/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
ed994a77898e → f851298e4b0e
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ed994a77898e
No earlier version was observed for comparison.
skills/atlas-snowflake/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
ed994a77898e → f851298e4b0e
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ed994a77898e
No earlier version was observed for comparison.
skills/atlas-spanner/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
ed994a77898e → f851298e4b0e
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ed994a77898e
No earlier version was observed for comparison.
Verified commit f851298e4b0e7cb0ad268e8de03100968c2e5041
git clone --filter=blob:none --no-checkout https://github.com/ariga/atlas.git .hotskills/ariga-atlas && git -C .hotskills/ariga-atlas checkout --detach f851298e4b0e7cb0ad268e8de03100968c2e5041
# Copy each selected skill directory from .hotskills/ariga-atlas into .claude/skills/<skill-name>/Heat
3.6- Star growth, last 7 daysAhead of 36% of tracked repositories
- Star growth, last 24 hoursAhead of 2% of tracked repositories
- Rank movement, last 7 daysAhead of 68% of tracked repositories
- Commits, last 30 daysAhead of 73% of tracked repositories
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekAhead of 0% of tracked repositories
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
Individual skills in this repository
- atlas
skills/atlas - atlas-action
skills/atlas-action - atlas-clickhouse
skills/atlas-clickhouse - atlas-databricks
skills/atlas-databricks - atlas-mssql
skills/atlas-mssql - atlas-mysql
skills/atlas-mysql - atlas-onboard
skills/atlas-onboard - atlas-operator
skills/atlas-operator - atlas-oracle
skills/atlas-oracle - atlas-postgres
skills/atlas-postgres - atlas-redshift
skills/atlas-redshift - atlas-snowflake
skills/atlas-snowflake - atlas-spanner
skills/atlas-spanner
How it works
atlas
When your agent uses it
Database schema management, migrations, data scripts, and Atlas Cloud operations with the Atlas CLI. Use when: generating or applying migrations, diffing, linting, validating, or testing schemas, working with atlas.hcl, schema.hcl, or ORM schemas (GORM, Drizzle, SQLAlchemy, Django, Ent, Sequelize, TypeORM, Prisma), running data backfills, purges, or reports with atlas script, or answering questions about Atlas Cloud: which databases are synced, pending, or failed, recent or failed deployments, what is waiting for deployment, registry repos, and pending plan approvals.
What it loads into context
Frontmatter
305 tokensAlways available to the agent
SKILL.md
5,678 tokensWhen the skill is activated
Reference documents
28,070 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Files
- Security
- Quick Reference
- Choosing a Workflow
- Example
- Core Concepts
- Workflows
- Standard Workflow
- Drift Detection
- Atlas Cloud
- Data Scripts
- Schema Sources
- Onboarding an Existing Project
- Troubleshooting
- Key Rules
- Documentation
Files
../../.claude-plugin/marketplace.jsonasset1,130 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesSKILL.mdcore23,762 bytesreferences/cicd.mddoc19,885 bytesreferences/cloud.mddoc13,941 bytesreferences/declarative.mddoc10,602 bytesreferences/drift.mddoc9,064 bytesreferences/lint.mddoc11,720 bytesreferences/schema-sources.mddoc4,069 bytesreferences/scripts.mddoc17,422 bytesreferences/testing.mddoc9,094 bytesreferences/versioned.mddoc14,162 bytes
Read SKILL.md
# Atlas: Schema Migrations, Data Scripts, and Cloud Operations
## Files
This skill is `SKILL.md` plus nine reference files under `references/`, each served at
`https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`,
`cicd.md`, `lint.md`, `testing.md`, `drift.md`, `cloud.md`, and `scripts.md`. Read a reference only when
the task needs it; "Choosing a Workflow" below says which.
## Security
Never hardcode credentials. Use environment variables in `atlas.hcl`:
```hclView the complete source on GitHubatlas-action
When your agent uses it
Atlas in CI/CD pipelines with the Atlas actions: ariga/setup-atlas and ariga/atlas-action on GitHub Actions, the GitLab CI components, the CircleCI orb, the Bitbucket pipe, and the Azure DevOps AtlasAction task. The CI/CD steps (migrate lint, push, diff, hash, autorebase, test, apply, down, set, drift; schema plan, plan approve, push, apply, lint, test; script exec, query, loop, test, push; security scan; monitor schema; create-repo) with its inputs, outputs, tokens, permissions, and pull request comments, plus pinning versions, runners, and fixing a failed run. Use with the atlas skill whenever a pipeline runs Atlas or an Atlas check in CI fails.
What it loads into context
Frontmatter
314 tokensAlways available to the agent
SKILL.md
4,991 tokensWhen the skill is activated
Reference documents
39,357 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Files
- Requires
- Setup Path
- Steps
- Rules
- Permissions
- Quick Answers
- Documentation
Files
SKILL.mdcore19,656 bytesagents/openai.yamlasset184 bytesreferences/actions.mddoc31,665 bytesreferences/apply.mddoc7,784 bytesreferences/declarative.mddoc7,166 bytesreferences/diff.mddoc5,018 bytesreferences/drift.mddoc4,545 bytesreferences/lint.mddoc6,751 bytesreferences/platforms.mddoc12,206 bytesreferences/push.mddoc4,853 bytesreferences/rebase.mddoc5,544 bytesreferences/scripts.mddoc3,363 bytesreferences/security-scan.mddoc3,395 bytesreferences/setup.mddoc17,155 bytesreferences/testing.mddoc1,975 bytesreferences/troubleshooting.mddoc20,648 bytes../atlas/SKILL.mddoc23,762 bytes
Read SKILL.md
# Atlas Actions: CI/CD Pipelines
Atlas runs in pipelines through one binary, `atlas-action`, shipped as GitHub Actions
(`ariga/atlas-action/<step>`), GitLab CI components, a Bitbucket pipe, a CircleCI orb, and an Azure
DevOps task. Each step wraps one Atlas command. The steps a platform has, the input names and defaults,
and the outputs a later job can read differ by platform (`references/actions.md`,
`references/platforms.md`). The `atlas` skill covers the CLI and the workflows; this skill covers the
steps that run them in CI: which step, its inputs and outputs, the tokens and permissions it needs, and
what to do when one fails.
## Files
This skill is `SKILL.md` plus fourteen reference files under `references/`, each served at
`https://atlasgo.io/skills/atlas-action/references/<name>`. Read a reference when the task needs it:View the complete source on GitHubatlas-clickhouse
When your agent uses it
ClickHouse specifics for Atlas: the login-only driver, dev database and URL scope (database vs server), Docker dev images and version checks, cluster mode and ON CLUSTER, table engines, sort keys and table rebuilds, plans that skip destructive changes without a terminal, mutations and CH lint checks, materialized views, dictionaries, UDFs and WASM, named collections, users, roles, grants, row policies and settings profiles, secret settings and the sensitive mode, no transactions and no lock, ClickHouse Cloud, schema and migration tests, and custom lint rules. Use with the atlas skill whenever Atlas manages a ClickHouse database.
What it loads into context
Frontmatter
137 tokensAlways available to the agent
SKILL.md
3,629 tokensWhen the skill is activated
Reference documents
26,155 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Files
- Requires
- Rules
- Quick Answers
- Documentation
Files
SKILL.mdcore15,364 bytesSKILL.mdcore15,364 bytesreferences/custom-rules.mddoc7,815 bytesreferences/dev-database.mddoc13,225 bytesreferences/hcl.mddoc12,067 bytesreferences/migrations.mddoc14,061 bytesreferences/objects.mddoc15,148 bytesreferences/security.mddoc11,000 bytesreferences/testing.mddoc6,991 bytes../atlas/SKILL.mddoc23,762 bytes
Read SKILL.md
# Atlas for ClickHouse
What is specific to ClickHouse when Atlas manages the schema. The `atlas` skill covers the workflows and
commands; this skill covers the rules, edge cases, and answers that differ on ClickHouse. Clusters and
ClickHouse Cloud are covered where they differ.
## Files
This skill is `SKILL.md` plus seven reference files under `references/`, each served at
`https://atlasgo.io/skills/atlas-clickhouse/references/<name>`. Read a reference when the task needs it:
| File | Read it for |
|------|-------------|
| `references/dev-database.md` | URL scope, URL parameters, Docker dev URLs, the `docker` and `dev` blocks, version checks, cluster and Cloud dev databases, connection errors |View the complete source on GitHubatlas-databricks
When your agent uses it
Databricks specifics for Atlas: the extended binary and login, connection URLs and scope (catalog vs schema), the dev catalog (no Docker), Delta table properties, managed and external tables, partitioning and liquid clustering, generated and identity columns, defaults and column mapping, renames, informational keys and checks, collations, column masks and row filters, views and materialized views, SQL and Python functions, procedures, Unity Catalog grants, no transactions and no locks, partial failures, schema and migration tests, and custom lint rules. Use with the atlas skill whenever Atlas manages a Databricks database.
What it loads into context
Frontmatter
132 tokensAlways available to the agent
SKILL.md
3,262 tokensWhen the skill is activated
Reference documents
23,612 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Files
- Requires
- Rules
- Quick Answers
- Documentation
Files
SKILL.mdcore13,589 bytesreferences/custom-rules.mddoc7,469 bytesreferences/dev-database.mddoc8,651 bytesreferences/hcl.mddoc15,123 bytesreferences/migrations.mddoc8,873 bytesreferences/objects.mddoc15,733 bytesreferences/security.mddoc7,732 bytesreferences/testing.mddoc6,462 bytes../atlas/SKILL.mddoc23,762 bytes
Read SKILL.md
# Atlas for Databricks
What is specific to Databricks when Atlas manages the schema. The `atlas` skill covers the workflows and
commands; this skill covers the rules, edge cases, and answers that differ on Databricks. Atlas connects
through a SQL warehouse and manages Unity Catalog objects: schemas, Delta tables, views, materialized
views, functions, procedures, and grants.
## Files
This skill is `SKILL.md` plus seven reference files under `references/`, each served at
`https://atlasgo.io/skills/atlas-databricks/references/<name>`. Read a reference when the task needs it:
| File | Read it for |
|------|-------------|View the complete source on GitHubatlas-mssql
When your agent uses it
SQL Server specifics for Atlas (also Azure SQL and MSSQL): login, dev database and URL scope (mode=schema vs mode=database, the database query parameter), compatibility level and collation, system-generated constraint names, clustered index defaults and datetime2 precision in HCL, GO batches and the delimiter directive, transactions and statements that cannot run in one, identity, computed and temporal columns, alias and table types, changes planned as a drop and an add, what Atlas leaves out (DENY, synonyms, row-level security, sparse columns), database roles, users and grants, schema and migration tests, and custom lint rules. Use with the atlas skill whenever Atlas manages a SQL Server or Azure SQL database.
What it loads into context
Frontmatter
152 tokensAlways available to the agent
SKILL.md
3,594 tokensWhen the skill is activated
Reference documents
22,519 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Files
- Requires
- Rules
- Quick Answers
- Documentation
Files
SKILL.mdcore14,392 bytesreferences/custom-rules.mddoc8,502 bytesreferences/dev-database.mddoc11,532 bytesreferences/hcl.mddoc8,957 bytesreferences/migrations.mddoc8,866 bytesreferences/objects.mddoc10,949 bytesreferences/security.mddoc8,316 bytesreferences/testing.mddoc6,920 bytes../atlas/SKILL.mddoc23,762 bytes
Read SKILL.md
# Atlas for SQL Server
What is specific to SQL Server when Atlas manages the schema. The `atlas` skill covers the workflows
and commands; this skill covers the rules, edge cases, and answers that differ on SQL Server. Behavior
is described for SQL Server 2022; where a compatibility level changes it, the text says so. Azure SQL
Database follows the same rules, and Fabric Data Warehouse has a guide of its own
(https://atlasgo.io/guides/azure-fabric).
## Files
This skill is `SKILL.md` plus seven reference files under `references/`, each served at
`https://atlasgo.io/skills/atlas-mssql/references/<name>`. Read a reference when the task needs it:
| File | Read it for |View the complete source on GitHubatlas-mysql
When your agent uses it
MySQL and MariaDB specifics for Atlas: dev database and URL scope (schema vs server), character sets and collations, users, roles and grants, enum and set columns, generated columns, foreign-key indexes, functional and prefix indexes, triggers and stored programs, table copies and MY lint checks, partial migration failures (no transactional DDL), GET_LOCK, managed services (RDS, Aurora, Cloud SQL, Azure), schema and migration tests, and custom lint rules. Use with the atlas skill whenever Atlas manages a MySQL or MariaDB database.
What it loads into context
Frontmatter
120 tokensAlways available to the agent
SKILL.md
2,918 tokensWhen the skill is activated
Reference documents
22,271 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Files
- Requires
- Rules
- Quick Answers
- Documentation
Files
SKILL.mdcore11,980 bytesagents/openai.yamlasset168 bytesreferences/custom-rules.mddoc8,438 bytesreferences/dev-database.mddoc16,822 bytesreferences/hcl.mddoc10,662 bytesreferences/migrations.mddoc10,493 bytesreferences/objects.mddoc7,733 bytesreferences/security.mddoc5,019 bytesreferences/testing.mddoc4,425 bytes../atlas/SKILL.mddoc23,762 bytes
Read SKILL.md
# Atlas for MySQL
What is specific to MySQL and MariaDB when Atlas manages the schema. The `atlas` skill covers the
workflows and commands; this skill covers the rules, edge cases, and answers that differ on MySQL.
MariaDB is covered where it differs. MySQL-compatible engines, such as TiDB, PlanetScale, and
SingleStore, are not covered.
## Files
This skill is `SKILL.md` plus seven reference files under `references/`, each served at
`https://atlasgo.io/skills/atlas-mysql/references/<name>`. Read a reference when the task needs it:
| File | Read it for |
|------|-------------|View the complete source on GitHubatlas-onboard
When your agent uses it
Guided onboarding of a repository onto Atlas, one verified stage at a time: plan the units and the workflow, define the schema as code, set up the migration workflow, add CI with the Atlas Registry, deploy to staging, and promote to production. Each stage ends on a check the agent runs itself, such as a dry run with no changes or a deployment recorded in Atlas Cloud. Use when the user asks to onboard, adopt, or set up Atlas for a project or a team, or to resume an onboarding.
What it loads into context
Frontmatter
247 tokensAlways available to the agent
SKILL.md
5,191 tokensWhen the skill is activated
Reference documents
34,917 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Files
- Requires
- Stages
- Rules
- Permissions
- Project Layout
- Detect the Stage
- Checklist
- Decisions File
- Terms
- Hand Off
- Docs Map
- Gotchas
Files
../atlas-action/SKILL.mddoc19,656 bytes../atlas-mysql/SKILL.mddoc11,980 bytesSKILL.mdcore20,643 bytesSKILL.mdcore20,643 bytesSKILL.mdcore20,643 bytesSKILL.mdcore20,643 bytesagents/openai.yamlasset175 bytesreferences/stage-0-plan.mddoc10,512 bytesreferences/stage-1-schema.mddoc12,099 bytesreferences/stage-2-workflow.mddoc9,771 bytesreferences/stage-3-ci.mddoc10,143 bytesreferences/stage-4-deploy.mddoc13,267 bytesreferences/stage-5-promote.mddoc3,787 bytes../atlas-operator/SKILL.mddoc15,911 bytes../atlas-postgres/SKILL.mddoc12,228 bytes../atlas/SKILL.mddoc23,762 bytes
Read SKILL.md
# Atlas Onboarding
Takes a repository from no Atlas setup to production in six stages, the same path as the Evaluating
Atlas guide (https://atlasgo.io/guides/evaluation/intro). Each stage ends on a check the agent runs and
shows the user. This skill holds the order, the decisions, and the checks. The `atlas` skill holds the
command reference.
## Files
This skill is `SKILL.md` plus seven files, each served at `https://atlasgo.io/skills/atlas-onboard/<path>`:
`agents/openai.yaml`, `references/stage-0-plan.md`, `references/stage-1-schema.md`,
`references/stage-2-workflow.md`, `references/stage-3-ci.md`, `references/stage-4-deploy.md`, and
`references/stage-5-promote.md`. Read a stage reference when its stage starts.
View the complete source on GitHubatlas-operator
When your agent uses it
Atlas Kubernetes Operator setup and operations: Helm install and values, AtlasSchema (declarative) and AtlasMigration (versioned) resources, Atlas Cloud bot tokens and the registry, database credentials and URL scope, the dev database in the cluster, lint and review policies, pre-approved and ad-hoc plans, down migrations, drift detection (policy.drift and AtlasDriftCheck), security scans (AtlasSecurityScan), custom atlas.hcl config and IAM auth, GitOps with Argo CD, Argo Rollouts, Flux, and Octopus Deploy, and troubleshooting from status conditions and events. Use with the atlas skill whenever Atlas runs in Kubernetes, or the user asks to deploy schema changes with the operator.
What it loads into context
Frontmatter
152 tokensAlways available to the agent
SKILL.md
3,749 tokensWhen the skill is activated
Reference documents
32,850 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Files
- Requires
- Setup Path
- Rules
- Quick Answers
- Documentation
Files
../atlas-mysql/SKILL.mddoc11,980 bytesSKILL.mdcore15,911 bytesagents/openai.yamlasset189 bytesreferences/config.mddoc6,337 bytesreferences/credentials.mddoc6,956 bytesreferences/declarative.mddoc11,660 bytesreferences/dev-database.mddoc7,069 bytesreferences/drift.mddoc7,589 bytesreferences/gitops.mddoc9,068 bytesreferences/install.mddoc7,200 bytesreferences/security-scan.mddoc6,688 bytesreferences/testing.mddoc3,310 bytesreferences/troubleshooting.mddoc10,638 bytesreferences/versioned.mddoc8,748 bytes../atlas-postgres/SKILL.mddoc12,228 bytes../atlas/SKILL.mddoc23,762 bytes
Read SKILL.md
# Atlas Kubernetes Operator
The Atlas Kubernetes Operator applies schema changes from Kubernetes resources
(https://atlasgo.io/integrations/kubernetes). This skill covers installing it, writing its resources,
connecting it to Atlas Cloud, deploying through GitOps, and reading its status when something fails. The
`atlas` skill covers the Atlas CLI, which still generates, lints, tests, and pushes the changes the
operator deploys.
## Files
This skill is `SKILL.md` plus eleven reference files under `references/`, each served at
`https://atlasgo.io/skills/atlas-operator/references/<name>`. Read a reference when the task needs it:
| File | Read it for |View the complete source on GitHubatlas-oracle
When your agent uses it
Oracle Database specifics for Atlas: the Oracle build and login, dev database and URL scope (schema vs database, PDB services, the Free lite image and its tablespace), privileges for the Atlas user (SELECT_CATALOG_ROLE, DBMS_LOCK, quota), uppercase names and SYS_C constraint names, NUMBER and sequence pitfalls, identity columns, PL/SQL packages, compile errors and anonymous blocks, objects Atlas leaves out of plans (packages, partitions, materialized views, renames), partial migration failures (no transactional DDL), ORA-00054 and DDL_LOCK_TIMEOUT, ONLINE indexes and NOVALIDATE constraints, roles and grants, managed services (RDS, Autonomous Database), schema and migration tests, and custom lint rules. Use with the atlas skill whenever Atlas manages an Oracle database.
What it loads into context
Frontmatter
170 tokensAlways available to the agent
SKILL.md
4,316 tokensWhen the skill is activated
Reference documents
26,110 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Files
- Requires
- Rules
- Quick Answers
- Documentation
Files
SKILL.mdcore17,297 bytesSKILL.mdcore17,297 bytesreferences/custom-rules.mddoc8,320 bytesreferences/dev-database.mddoc16,619 bytesreferences/hcl.mddoc10,296 bytesreferences/migrations.mddoc13,350 bytesreferences/objects.mddoc14,076 bytesreferences/security.mddoc8,278 bytesreferences/testing.mddoc7,177 bytes../atlas/SKILL.mddoc23,762 bytes
Read SKILL.md
# Atlas for Oracle
What is specific to Oracle Database when Atlas manages the schema. The `atlas` skill covers the workflows
and commands; this skill covers the rules, edge cases, and answers that differ on Oracle. Behavior is
described for Oracle AI Database 26ai, release 23.26, the release of the Free image; where 19c or 21c
differ, the text says so.
## Files
This skill is `SKILL.md` plus seven reference files under `references/`, each served at
`https://atlasgo.io/skills/atlas-oracle/references/<name>`. Read a reference when the task needs it:
| File | Read it for |
|------|-------------|View the complete source on GitHubatlas-postgres
When your agent uses it
PostgreSQL specifics for Atlas: dev database and URL scope (search_path), extensions, roles and grants, ALTER DEFAULT PRIVILEGES, ownership, row-level security, sequences and serial or identity columns, enums and column type changes, partitions, triggers, concurrent indexes, lock-safe migrations, schema and migration tests, custom lint rules, managed services (RDS, Cloud SQL, Supabase, Neon, Azure), and connection poolers. Use with the atlas skill whenever Atlas manages a PostgreSQL database.
What it loads into context
Frontmatter
110 tokensAlways available to the agent
SKILL.md
2,838 tokensWhen the skill is activated
Reference documents
26,657 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Files
- Requires
- Rules
- Quick Answers
- Documentation
Files
SKILL.mdcore12,228 bytesagents/openai.yamlasset166 bytesreferences/custom-rules.mddoc7,776 bytesreferences/dev-database.mddoc15,442 bytesreferences/hcl.mddoc14,297 bytesreferences/migrations.mddoc13,578 bytesreferences/objects.mddoc11,683 bytesreferences/security.mddoc11,563 bytesreferences/testing.mddoc6,842 bytes../atlas/SKILL.mddoc23,762 bytes
Read SKILL.md
# Atlas for PostgreSQL
What is specific to PostgreSQL when Atlas manages the schema. The `atlas` skill covers the workflows and
commands; this skill covers the rules, edge cases, and answers that differ on PostgreSQL.
PostgreSQL-compatible engines, such as CockroachDB, YugabyteDB, and Aurora DSQL, behave differently in
places: follow their guides (https://atlasgo.io/databases).
## Files
This skill is `SKILL.md` plus seven reference files under `references/`, each served at
`https://atlasgo.io/skills/atlas-postgres/references/<name>`. Read a reference when the task needs it:
| File | Read it for |
|------|-------------|View the complete source on GitHubatlas-redshift
When your agent uses it
Redshift specifics for Atlas: the login-only driver, redshift:// and Data API (redshift+http://) URLs and their scope, the dev database without Docker, distribution, sort keys, and encodings, identity columns, column changes Redshift cannot ALTER and the allow_recreate policy, views and materialized views, functions and procedures, users, groups, roles and grants, datashares, external schemas, statements that cannot run in a transaction, no advisory lock, schema and migration tests, and custom lint rules. Use with the atlas skill whenever Atlas manages a Redshift database.
What it loads into context
Frontmatter
129 tokensAlways available to the agent
SKILL.md
3,541 tokensWhen the skill is activated
Reference documents
23,229 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Files
- Requires
- Rules
- Quick Answers
- Documentation
Files
SKILL.mdcore14,908 bytesreferences/custom-rules.mddoc7,134 bytesreferences/dev-database.mddoc11,306 bytesreferences/hcl.mddoc11,141 bytesreferences/migrations.mddoc8,302 bytesreferences/objects.mddoc12,842 bytesreferences/security.mddoc11,658 bytesreferences/testing.mddoc4,822 bytes../atlas/SKILL.mddoc23,762 bytes
Read SKILL.md
# Atlas for Redshift
What is specific to Amazon Redshift when Atlas manages the schema. The `atlas` skill covers the
workflows and commands; this skill covers the rules, edge cases, and answers that differ on Redshift.
Redshift speaks the PostgreSQL wire protocol, but it is a separate Atlas driver with its own HCL and
its own limits: do not apply PostgreSQL advice (indexes, sequences, extensions, triggers, `docker://`
dev URLs) to it.
## Files
This skill is `SKILL.md` plus seven reference files under `references/`, each served at
`https://atlasgo.io/skills/atlas-redshift/references/<name>`. Read a reference when the task needs it:
| File | Read it for |View the complete source on GitHubatlas-snowflake
When your agent uses it
Snowflake specifics for Atlas: the extended build and login, URL scope (database vs schema), the dev database on the same account, identifier case, account and database roles, users and grants, table kinds (transient, dynamic, hybrid, external, Iceberg), stages, pipes, tasks, alerts, tags and policies, secrets, warehouses and other account-level objects, changes Snowflake makes only by recreating and the allow_recreate policy, no transactional DDL and no apply lock, TX101 and DS lint findings, schema and migration tests, and custom lint rules. Use with the atlas skill whenever Atlas manages a Snowflake database.
What it loads into context
Frontmatter
139 tokensAlways available to the agent
SKILL.md
3,365 tokensWhen the skill is activated
Reference documents
24,176 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Files
- Requires
- Rules
- Quick Answers
- Documentation
Files
SKILL.mdcore14,372 bytesSKILL.mdcore14,372 bytesreferences/custom-rules.mddoc8,125 bytesreferences/dev-database.mddoc10,261 bytesreferences/hcl.mddoc15,404 bytesreferences/migrations.mddoc7,725 bytesreferences/objects.mddoc15,287 bytesreferences/security.mddoc9,705 bytesreferences/testing.mddoc5,609 bytes../atlas/SKILL.mddoc23,762 bytes
Read SKILL.md
# Atlas for Snowflake
What is specific to Snowflake when Atlas manages the schema. The `atlas` skill covers the workflows
and commands; this skill covers the rules, edge cases, and answers that differ on Snowflake. Snowflake
is a managed service: there is no Docker dev database, and roles, users, warehouses, and integrations
live on the account, outside any database.
## Files
This skill is `SKILL.md` plus seven reference files under `references/`, each served at
`https://atlasgo.io/skills/atlas-snowflake/references/<name>`. Read a reference when the task needs it:
| File | Read it for |
|------|-------------|View the complete source on GitHubatlas-spanner
When your agent uses it
Google Cloud Spanner specifics for Atlas: the extended build and login, URLs and Application Default Credentials, GoogleSQL and PostgreSQL dialects, the emulator dev database and what it lacks, `-- atlas:txmode none` in every migration file, partial failures and long-running schema changes (index backfills, validations, Google's batch limits), what Spanner cannot change in place (primary keys, interleaving, column types, renames), objects Atlas leaves out or plans wrongly (identity columns, NOT ENFORCED foreign keys, interleaved indexes, change streams, database options), hotspot-free keys and bit-reversed sequences, named schemas, roles and grants, migration tests in place of schema tests, mutation limits and batched backfills, and custom lint rules. Use with the atlas skill whenever Atlas manages a Spanner database.
What it loads into context
Frontmatter
177 tokensAlways available to the agent
SKILL.md
4,326 tokensWhen the skill is activated
Reference documents
24,697 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Files
- Requires
- Rules
- Quick Answers
- Documentation
Files
SKILL.mdcore17,838 bytesSKILL.mdcore17,838 bytesreferences/custom-rules.mddoc7,676 bytesreferences/dev-database.mddoc8,661 bytesreferences/hcl.mddoc11,006 bytesreferences/migrations.mddoc14,423 bytesreferences/objects.mddoc19,012 bytesreferences/security.mddoc6,442 bytesreferences/testing.mddoc8,934 bytes../atlas/SKILL.mddoc23,762 bytes
Read SKILL.md
# Atlas for Spanner
What is specific to Google Cloud Spanner when Atlas manages the schema. The `atlas` skill covers the
workflows and commands; this skill covers the rules, edge cases, and answers that differ on Spanner. It
covers both dialects, GoogleSQL and PostgreSQL. Behavior was checked against the Spanner emulator
1.5.58 and Google's Spanner documentation.
## Files
This skill is `SKILL.md` plus seven reference files under `references/`, each served at
`https://atlasgo.io/skills/atlas-spanner/references/<name>`. Read a reference when the task needs it:
| File | Read it for |
|------|-------------|View the complete source on GitHubSkills included
- atlas
- atlas-action
- atlas-clickhouse
- atlas-databricks
- atlas-mssql
- atlas-mysql
- atlas-onboard
- atlas-operator
- atlas-oracle
- atlas-postgres
- atlas-redshift
- atlas-snowflake
- atlas-spanner
Repository facts
- License
- Apache-2.0
- Created
- Apr 30, 2021
- Last pushed
- Nov 5, 2026
- Forks
- 380
- Open issues
- 255
- Project activity
- Active
Rank over the last 12 weeks
Now #164 · best #133 · down 11 in 30 days
- #157 on Oct 22
- #158 on Oct 24
- #159 on Oct 25
- #162 from Oct 28 to Oct 29
- #163 from Oct 30 to Nov 2
- #164 since Nov 3
40 earlier periods
- #130 on Aug 1
- #131 on Aug 6
- #129 from Aug 8 to Aug 9
- #132 from Aug 10 to Aug 11
- #134 from Aug 12 to Aug 16
- #135 from Aug 17 to Aug 21
- #133 on Aug 22
- #136 from Aug 23 to Aug 24
- #137 from Aug 25 to Aug 26
- #138 from Aug 27 to Aug 31
- #139 on Sep 1
- #138 on Sep 2
- #139 from Sep 3 to Sep 4
- #140 on Sep 5
- #139 on Sep 6
- #140 on Sep 7
- #141 from Sep 8 to Sep 10
- #140 on Sep 11
- #144 from Sep 12 to Sep 14
- #145 from Sep 15 to Sep 16
- #146 on Sep 17
- #148 on Sep 18
- #147 on Sep 19
- #149 from Sep 20 to Sep 23
- #148 on Sep 24
- #150 on Sep 26
- #151 on Sep 27
- #152 from Sep 28 to Sep 29
- #152 from Oct 1 to Oct 2
- #151 on Oct 3
- #149 on Oct 4
- #152 on Oct 5
- #151 on Oct 6
- #153 from Oct 7 to Oct 8
- #154 from Oct 9 to Oct 13
- #155 on Oct 14
- #154 on Oct 15
- #153 on Oct 16
- #154 on Oct 17
- #156 from Oct 18 to Oct 21
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 3, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 24 notes
skills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas-clickhouse/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas-onboard/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/atlas-onboard/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 13 dangerous shell commandsin 10 files: atlas-action/references/platforms.md:213 atlas-onboard/references/stage-0-plan.md:30 atlas/references/declarative.md:104 and 7 more
- 2,137 network referencesin 115 files: atlas/SKILL.md:11 atlas-spanner/references/objects.md:3 atlas-oracle/references/dev-database.md:3 and 112 more
- No hidden or obfuscated text
- No instruction overrides
- No executable scripts
- 62 references to secretsin 15 files: atlas/SKILL.md:77 atlas/references/cloud.md:63 atlas-action/references/platforms.md:11 and 12 more
- No requests to vote in Hot
Show all 2,212 signals by file
.claude-plugin/marketplace.json
- Network accessline 4
"owner": { "name": "Ariga", "url": "https://atlasgo.io" - Network accessline 5
"name": "Ariga", "url": "https://atlasgo.io" }, - Network accessline 6
"url": "https://atlasgo.io" - Network accessline 30
"author": { "name": "Ariga", "url": "https://atlasgo.io" - Network accessline 31
"name": "Ariga", "url": "https://atlasgo.io" }, - Network accessline 32
"url": "https://atlasgo.io" - Network accessline 33
}, "homepage": "https://atlasgo.io/guides/ai-tools/agent-skills" } - Network accessline 34
"homepage": "https://atlasgo.io/guides/ai-tools/agent-skills"
skills/atlas-action/SKILL.md
- Network accessline 19
This skill is `SKILL.md` plus fourteen reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-action/references/<name>`. Read a reference when the task needs it: - Network accessline 19
This skill is `SKILL.md` plus fourteen reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-action/references/<name>`. Read a reference when the task needs it: - Network accessline 20
`https://atlasgo.io/skills/atlas-action/references/<name>`. Read a reference when the task needs it: - Network accessline 20
`https://atlasgo.io/skills/atlas-action/references/<name>`. Read a reference when the task needs it: - Network accessline 41
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 41
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 42
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 42
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 141
`references/troubleshooting.md`. Reproduce against dev databases only. 13. Commit migration files with LF line endings (`* text=auto eol=lf` in `.gitattributes`): a CRLF checkout breaks `atlas.sum` (https://atlasgo.io/faq/checksum-misma - Network accessline 141
`references/troubleshooting.md`. Reproduce against dev databases only. 13. Commit migration files with LF line endings (`* text=auto eol=lf` in `.gitattributes`): a CRLF checkout breaks `atlas.sum` (https://atlasgo.io/faq/checksum-misma - Network accessline 143
checkout breaks `atlas.sum` (https://atlasgo.io/faq/checksum-mismatch). - Network accessline 143
checkout breaks `atlas.sum` (https://atlasgo.io/faq/checksum-mismatch). - Network accessline 173
| `command requires 'atlas login'` | `cloud-token` is missing or empty in this job: fork pull requests and protected variables get no secrets | | Which secrets go in which job? | One bot token, a repository secret, in every job. Database UR - Network accessline 173
| `command requires 'atlas login'` | `cloud-token` is missing or empty in this job: fork pull requests and protected variables get no secrets | | Which secrets go in which job? | One bot token, a repository secret, in every job. Database UR - Network accessline 174
| Which secrets go in which job? | One bot token, a repository secret, in every job. Database URLs only in deploy and scheduled jobs, from environments only the default branch can use; a read-only user's for drift, scan, and monitoring (`re - Network accessline 174
| Which secrets go in which job? | One bot token, a repository secret, in every job. Database URLs only in deploy and scheduled jobs, from environments only the default branch can use; a read-only user's for drift, scan, and monitoring (`re - Network accessline 175
| A merge job cannot push or approve after protected flows were turned on | Give the bot the Writer role on the repo (https://atlasgo.io/cloud/roles-and-permissions) | - Network accessline 175
| A merge job cannot push or approve after protected flows were turned on | Give the bot the Writer role on the repo (https://atlasgo.io/cloud/roles-and-permissions) | - Network accessline 180
| `missing scheme for dir url` or `"<path>" is not a dir` from `migrate/apply` | `dir` takes a migration directory URL with its scheme (`file://migrations`, `atlas://app`); a schema file deploys with `schema/apply` | | `connected database i - Network accessline 180
| `missing scheme for dir url` or `"<path>" is not a dir` from `migrate/apply` | `dir` takes a migration directory URL with its scheme (`file://migrations`, `atlas://app`); a schema file deploys with `schema/apply` | | `connected database i - Network accessline 181
| `connected database is not clean` on the first deploy | `baseline = "<version>"` in the deploy env's migration block | | A renamed table or column shows as a drop and a create in the plan or lint comment | CI cannot answer the rename prom - Network accessline 181
| `connected database is not clean` on the first deploy | `baseline = "<version>"` in the deploy env's migration block | | A renamed table or column shows as a drop and a create in the plan or lint comment | CI cannot answer the rename prom - Network accessline 182
| A renamed table or column shows as a drop and a create in the plan or lint comment | CI cannot answer the rename prompt: declare the rename with `renamed_from` (HCL) or `-- atlas:renamed_from` (SQL), not with `nolint` (https://atlasgo.io/ - Network accessline 182
| A renamed table or column shows as a drop and a create in the plan or lint comment | CI cannot answer the rename prompt: declare the rename with `renamed_from` (HCL) or `-- atlas:renamed_from` (SQL), not with `nolint` (https://atlasgo.io/ - Network accessline 204
- GitHub Actions: https://atlasgo.io/integrations/github-actions - Network accessline 204
- GitHub Actions: https://atlasgo.io/integrations/github-actions - Network accessline 205
- GitLab CI components: https://atlasgo.io/integrations/gitlab-ci-components - Network accessline 205
- GitLab CI components: https://atlasgo.io/integrations/gitlab-ci-components - Network accessline 206
- CircleCI orb: https://atlasgo.io/integrations/circleci-orbs - Network accessline 206
- CircleCI orb: https://atlasgo.io/integrations/circleci-orbs - Network accessline 207
- Bitbucket pipes: https://atlasgo.io/integrations/bitbucket-pipes - Network accessline 207
- Bitbucket pipes: https://atlasgo.io/integrations/bitbucket-pipes - Network accessline 208
- Azure DevOps: https://atlasgo.io/integrations/azure-devops - Network accessline 208
- Azure DevOps: https://atlasgo.io/integrations/azure-devops - Network accessline 209
- Versioned CI/CD: https://atlasgo.io/versioned/setup-cicd - Network accessline 209
- Versioned CI/CD: https://atlasgo.io/versioned/setup-cicd - Network accessline 210
- Declarative CI/CD: https://atlasgo.io/declarative/setup-cicd - Network accessline 210
- Declarative CI/CD: https://atlasgo.io/declarative/setup-cicd - Network accessline 211
- Pre-approval and ad-hoc approval: https://atlasgo.io/integrations/github-actions/pre-approval, - Network accessline 211
- Pre-approval and ad-hoc approval: https://atlasgo.io/integrations/github-actions/pre-approval, - Network accessline 212
https://atlasgo.io/integrations/github-actions/ad-hoc-approval - Network accessline 212
https://atlasgo.io/integrations/github-actions/ad-hoc-approval - Network accessline 213
- Modern database CI/CD: https://atlasgo.io/guides/modern-database-ci-cd - Network accessline 213
- Modern database CI/CD: https://atlasgo.io/guides/modern-database-ci-cd - Network accessline 214
- Bot tokens: https://atlasgo.io/cloud/bots - Network accessline 214
- Bot tokens: https://atlasgo.io/cloud/bots
skills/atlas-action/references/actions.md
- Network accessline 355
|-------|----------|---------|-------------| | `exclude` | | | List of glob patterns used to select which resources to filter in inspection. | | `from` | | | URL(s) of the current schema state. If not provided, Atlas uses the [`url`](ht - Network accessline 356
| `exclude` | | | List of glob patterns used to select which resources to filter in inspection. | | `from` | | | URL(s) of the current schema state. If not provided, Atlas uses the [`url`](https://atlasgo.io/hcl/config#env.url) from the - Network accessline 357
| `from` | | | URL(s) of the current schema state. If not provided, Atlas uses the [`url`](https://atlasgo.io/hcl/config#env.url) from the config file. If that is also not set, Atlas defaults to the last known state in the Atlas Registry - Network accessline 381
|-------|----------|---------|-------------| | `exclude` | | | List of glob patterns used to select which resources to filter in inspection. | | `from` | | | URL(s) of the current schema state. If not provided, Atlas uses the [`url`](ht - Network accessline 382
| `exclude` | | | List of glob patterns used to select which resources to filter in inspection. | | `from` | | | URL(s) of the current schema state. If not provided, Atlas uses the [`url`](https://atlasgo.io/hcl/config#env.url) from the - Network accessline 383
| `from` | | | URL(s) of the current schema state. If not provided, Atlas uses the [`url`](https://atlasgo.io/hcl/config#env.url) from the config file. If that is also not set, Atlas defaults to the last known state in the Atlas Registry - Network accessline 542
| `ignore` | | | CVE identifier(s) not to report. For example: `CVE-2017-18359`. | | `min-severity` | | | The lowest severity to report. For example, `HIGH` reports only the `HIGH` and `CRITICAL` issues. Values: `NORMAL`, `ELEVATED`, `H - Network accessline 544
| `urls` | | | URL(s) of the target databases, one per line. For example: `postgres://localhost:5432/app?sslmode=disable`. If not set, Atlas uses the [`url`](https://atlasgo.io/hcl/config#env.url) from the config file. |
skills/atlas-action/references/apply.md
- Network accessline 42
(`atlas cloud migration list`, `atlas/references/cloud.md`). A deploy from a `file://` directory is recorded only when the env's `migration` block sets `report = true` and a `repo { name = "..." }` (https://atlasgo.io/cloud/deployment). - Network accessline 43
recorded only when the env's `migration` block sets `report = true` and a `repo { name = "..." }` (https://atlasgo.io/cloud/deployment). A recorded deploy sends each applied file's contents to Atlas Cloud: mark statements that carry sec - Network accessline 44
(https://atlasgo.io/cloud/deployment). A recorded deploy sends each applied file's contents to Atlas - Network accessline 45
Cloud: mark statements that carry secrets with `-- atlas:sensitive` (https://atlasgo.io/atlas-schema/sql#sensitive-values). - Preview and test databases: `skip_report = true` in the env's `migration` block keeps their deploys - Network accessline 46
(https://atlasgo.io/atlas-schema/sql#sensitive-values). - Network accessline 47
- Preview and test databases: `skip_report = true` in the env's `migration` block keeps their deploys out of the deployment history (https://atlasgo.io/cloud/deployment#skipping-cloud-reporting). - A directory kept in S3 deploys through a - Network accessline 48
out of the deployment history (https://atlasgo.io/cloud/deployment#skipping-cloud-reporting). - Network accessline 49
- A directory kept in S3 deploys through a `blob_dir` data source in the env, which needs the login (https://atlasgo.io/faq/s3-dirs). - `dry-run: true` prints the pending SQL without running it; pre-execution checks still run. - Network accessline 50
(https://atlasgo.io/faq/s3-dirs). - Network accessline 89
- The first deploy to a database that already has objects aborts with `connected database is not clean`. Set `baseline` to the version of the baseline file (https://atlasgo.io/versioned/apply#existing-databases). Use `allow-dirty` only - Network accessline 90
`connected database is not clean`. Set `baseline` to the version of the baseline file (https://atlasgo.io/versioned/apply#existing-databases). Use `allow-dirty` only when the user confirms the existing objects stay outside the directory - Network accessline 91
(https://atlasgo.io/versioned/apply#existing-databases). Use `allow-dirty` only when the user confirms - Network accessline 98
one database wait on each other unless each env sets its own `lock_name`. Set `skip_lock = true` only where something else guarantees a single deploy (https://atlasgo.io/versioned/apply#controlling-advisory-locks). - Network accessline 99
where something else guarantees a single deploy (https://atlasgo.io/versioned/apply#controlling-advisory-locks). - Out-of-order files and `exec-order`: `references/rebase.md`. - Network accessline 100
(https://atlasgo.io/versioned/apply#controlling-advisory-locks). - Network accessline 109
(`environment: production`). The lower environment's deploys must be recorded, from `atlas://` or with `report = true`, or `cloud_databases` has no version to read. Guide: https://atlasgo.io/guides/environment-promotion. - Network accessline 111
https://atlasgo.io/guides/environment-promotion. - Network accessline 136
Prefer rolling forward with a new migration. Before a revert drops anything, Atlas runs pre-migration checks that stop it if the objects to drop hold data (https://atlasgo.io/versioned/down). On engines - Network accessline 137
checks that stop it if the objects to drop hold data (https://atlasgo.io/versioned/down). On engines - Network accessline 144
as applied, and the rows of later versions are removed. Use it after a change was applied by hand, to move the recorded version back when later files never ran (https://atlasgo.io/faq/revisions-table-delete-latest), and in the out-of-order - Network accessline 145
move the recorded version back when later files never ran (https://atlasgo.io/faq/revisions-table-delete-latest), and in the out-of-order flow (`references/rebase.md`). On a shared database it rewrites deployment history: only with the user - Network accessline 146
(https://atlasgo.io/faq/revisions-table-delete-latest), and in the out-of-order flow
skills/atlas-action/references/declarative.md
- Network accessline 129
- Give `schema/apply` the dev database too (the env's `dev`, or `dev-url`). Without one, the plan can hold incorrect or unnecessary changes, and every run proposes them again (https://atlasgo.io/concepts/dev-database#diffing). - Network accessline 130
hold incorrect or unnecessary changes, and every run proposes them again (https://atlasgo.io/concepts/dev-database#diffing). - Each poll re-inspects the target: keep `wait-interval` at `30s` or more for long waits. - Network accessline 131
(https://atlasgo.io/concepts/dev-database#diffing). - Network accessline 134
`error`. - Engines without transactional DDL: `tx-mode: none`. - Guides: https://atlasgo.io/declarative/plan, - Network accessline 135
- Engines without transactional DDL: `tx-mode: none`. - Guides: https://atlasgo.io/declarative/plan, https://atlasgo.io/integrations/github-actions/pre-approval, - Network accessline 136
- Guides: https://atlasgo.io/declarative/plan, - Network accessline 137
https://atlasgo.io/integrations/github-actions/pre-approval, - Network accessline 138
https://atlasgo.io/integrations/github-actions/ad-hoc-approval. - Network accessline 143
production env, a `check "schema_apply"` block with a `deny` rule refuses a version staging has not run, with the staging version read by a `cloud_databases` data source (https://atlasgo.io/guides/environment-promotion-declarative). - Network accessline 145
(https://atlasgo.io/guides/environment-promotion-declarative).
skills/atlas-action/references/diff.md
- Network accessline 24
The check is the one in https://atlasgo.io/faq/desired-state-drift. `migrate/lint` already fails a
skills/atlas-action/references/drift.md
skills/atlas-action/references/lint.md
- Network accessline 48
- Comparing with the registry also catches non-linear changes: a branch that edits, deletes, or reorders a file the registry already has. They are warnings by default; the policy can make them errors (https://atlasgo.io/lint/analyzers#n - Network accessline 49
a file the registry already has. They are warnings by default; the policy can make them errors (https://atlasgo.io/lint/analyzers#non-linear-changes). `atlas.sum` alone does not catch them. - The action always passes `--base atlas://<dir- - Network accessline 50
(https://atlasgo.io/lint/analyzers#non-linear-changes). `atlas.sum` alone does not catch them. - Network accessline 104
The step then needs `GITHUB_TOKEN` in its `env`, which resolves team membership (the built-in `github.token` works for public and internal repositories), `fetch-depth: 0` on the checkout, and `env` naming the env with the policy (https://at - Network accessline 106
`env` naming the env with the policy (https://atlasgo.io/guides/schema-ownership).
skills/atlas-action/references/platforms.md
- Access to secretsline 11
[Credential-related source omitted] - Access to secretsline 44
[Credential-related source omitted] - Access to secretsline 45
[Credential-related source omitted] - Access to secretsline 53
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted] - Access to secretsline 148
[Credential-related source omitted] - Dangerous shell operationline 213
- script: curl -sSf https://atlasgo.sh | sh - Network accessline 213
- script: curl -sSf https://atlasgo.sh | sh - Network accessline 259
On CI systems without an Atlas integration, such as Jenkins, TeamCity, Buildkite, Cloud Build, or Argo Workflows, run the CLI: install it (`curl -sSf https://atlasgo.sh | sh`, or the `arigaio/atlas` image), - Dangerous shell operationline 260
Workflows, run the CLI: install it (`curl -sSf https://atlasgo.sh | sh`, or the `arigaio/atlas` image), - Network accessline 260
Workflows, run the CLI: install it (`curl -sSf https://atlasgo.sh | sh`, or the `arigaio/atlas` image), - Access to secretsline 261
[Credential-related source omitted]
skills/atlas-action/references/push.md
- Network accessline 78
- A `backup` list in the env's `repo` block replicates each push to storage such as S3: the push succeeds when Atlas Cloud or one backup accepts it, and `atlas://` reads fall back to the backups in order (https://atlasgo.io/guides/backu - Network accessline 80
order (https://atlasgo.io/guides/backup-continuity-migration-versioned).
skills/atlas-action/references/rebase.md
- Network accessline 74
Teams that deploy branches to shared environments before merge (git-flow hotfixes, a `develop` branch ahead of `main`) apply files out of order there. `migrate apply` refuses that by default (`migration file ... was added out of order`, htt - Network accessline 75
ahead of `main`) apply files out of order there. `migrate apply` refuses that by default (`migration file ... was added out of order`, https://atlasgo.io/versioned/apply#non-linear-error). The execution order decides: - Network accessline 76
(`migration file ... was added out of order`, https://atlasgo.io/versioned/apply#non-linear-error). The - Network accessline 109
ariga/atlas-action has a detection step for that. The job holds that database's URL, which the branch's code can read: use the flow only for a shared development database. Guide: https://atlasgo.io/faq/out-of-order-migrations. - Network accessline 111
https://atlasgo.io/faq/out-of-order-migrations.
skills/atlas-action/references/security-scan.md
- Network accessline 48
- With `env`, the step uses the env's `security` block (`min_severity`, `fail_on`, `cve { ignore }`, and `notify` endpoints), so the thresholds live in `atlas.hcl` (https://atlasgo.io/guides/security-scan#configuration). - Network accessline 49
and `notify` endpoints), so the thresholds live in `atlas.hcl` (https://atlasgo.io/guides/security-scan#configuration). - Each finding carries its fix in `Suggestion`. For an extension built into the engine, such as - Network accessline 50
(https://atlasgo.io/guides/security-scan#configuration). - Network accessline 60
finding with its `check` (the CVE) and `level`. To gate on it, run it in a script step piped to `jq '.nodes[] | select(.reports[]?.level == "critical")'`, and fail the step when that prints anything: `jq` exits 0 either way (https://atl - Network accessline 61
`jq '.nodes[] | select(.reports[]?.level == "critical")'`, and fail the step when that prints anything: `jq` exits 0 either way (https://atlasgo.io/cloud/features/security-graph). - Guide: https://atlasgo.io/guides/security-scan. - Network accessline 62
anything: `jq` exits 0 either way (https://atlasgo.io/cloud/features/security-graph). - Network accessline 63
- Guide: https://atlasgo.io/guides/security-scan.
skills/atlas-action/references/setup.md
- Network accessline 44
CI authenticates with an Atlas Cloud bot token, not a person's login. An organization admin creates a bot in Atlas Cloud under Settings > Bots (https://atlasgo.io/cloud/bots); its token is shown once. A - Network accessline 45
bot in Atlas Cloud under Settings > Bots (https://atlasgo.io/cloud/bots); its token is shown once. A - Network accessline 67
those events hand the repository's secrets to code from forks. - With protected flows on a registry repo, only members and bots with the Writer role can push to it or approve its plans, so the bot needs that role (https://atlasgo.io/cloud - Network accessline 68
- With protected flows on a registry repo, only members and bots with the Writer role can push to it or approve its plans, so the bot needs that role (https://atlasgo.io/cloud/roles-and-permissions). Protected flows are an Atlas Pro fea - Network accessline 69
or approve its plans, so the bot needs that role (https://atlasgo.io/cloud/roles-and-permissions). - Network accessline 74
`aws_dsql_token`, and `azure_db_token` (Microsoft Entra ID) data sources in `atlas.hcl` mint a short-lived token from the runner's cloud identity, and `runtimevar` reads the password from a secret manager when the step runs (https://atl - Network accessline 75
short-lived token from the runner's cloud identity, and `runtimevar` reads the password from a secret manager when the step runs (https://atlasgo.io/guides/deploying/secrets). Azure SQL takes the identity through `fedauth` in its `azure - Network accessline 76
manager when the step runs (https://atlasgo.io/guides/deploying/secrets). Azure SQL takes the - Network accessline 77
identity through `fedauth` in its `azuresql://` URL (https://atlasgo.io/concepts/url#supported-schemes). - The other platforms keep database URLs on the default branch the same way: protected variables on - Network accessline 78
(https://atlasgo.io/concepts/url#supported-schemes). - Network accessline 90
- Pin the organization in `atlas.hcl`: a step that reads the file then fails unless the job is logged in to that organization, so a missing or wrong token stops the job instead of losing objects (https://atlasgo.io/atlas-schema/projects - Network accessline 91
in to that organization, so a missing or wrong token stops the job instead of losing objects (https://atlasgo.io/atlas-schema/projects#atlas-block). The pin applies to steps that read the file, so select an env in every step. - Network accessline 92
(https://atlasgo.io/atlas-schema/projects#atlas-block). The pin applies to steps that read the file, - Network accessline 180
The dev URL above is schema-scoped (`search_path=public`), so the migration files hold unqualified names, and the target URL must name the same schema. A directory that spans several schemas uses database-scoped URLs for both (https://atlas - Network accessline 182
database-scoped URLs for both (https://atlasgo.io/concepts/url#scope). - Network accessline 187
A password with `@`, `#`, `/`, or another reserved character breaks the URL. Keep the password in its own secret and escape it in `atlas.hcl` with `urlescape` (https://atlasgo.io/faq/url-special-chars): - Network accessline 188
own secret and escape it in `atlas.hcl` with `urlescape` (https://atlasgo.io/faq/url-special-chars): - Network accessline 289
- Deploy, drift, scan, monitoring, and script steps connect from the runner to the database. A GitHub-hosted runner reaches only a database open to its IP ranges; otherwise use a self-hosted runner in the database's network (https://atl - Network accessline 290
GitHub-hosted runner reaches only a database open to its IP ranges; otherwise use a self-hosted runner in the database's network (https://atlasgo.io/guides/deploying/connect-to-db-from-github-actions). GitHub-hosted runners have no IPv6 - Network accessline 291
in the database's network (https://atlasgo.io/guides/deploying/connect-to-db-from-github-actions).
skills/atlas-action/references/testing.md
- Network accessline 28
- On PostgreSQL, `template = true` on the dev database's `docker` block runs each test group on a fresh copy of the desired schema, which keeps a large suite fast (https://atlasgo.io/guides/postgres/schema-test-template-databases). - Network accessline 29
fresh copy of the desired schema, which keeps a large suite fast (https://atlasgo.io/guides/postgres/schema-test-template-databases). - Plans have their own tests (`atlas schema plan test`), which no action wraps: run the CLI in a step - Network accessline 30
(https://atlasgo.io/guides/postgres/schema-test-template-databases).
skills/atlas-action/references/troubleshooting.md
- Network accessline 30
| `looking up atlas-cli: exec: "atlas": executable file not found in $PATH` | No `setup-atlas` before the step | Add `ariga/setup-atlas@v0` to the job | | `no action found for the current environment` | The binary ran outside a supported CI - Network accessline 31
| `no action found for the current environment` | The binary ran outside a supported CI (no `GITHUB_ACTIONS`, `GITLAB_CI`, `CIRCLECI`, `BITBUCKET_PIPELINE_UUID`, `TF_BUILD`, or `TEAMCITY_VERSION`) | Run it as a CI step; on other CI systems - Network accessline 32
| `The specified Atlas version does not exist or is no longer supported.` | `setup-atlas` is pinned to a CLI version that was retired (https://atlasgo.io/cli-reference#distributed-binaries) | Move `version` to a current release, and keep mo - Network accessline 33
| `version 'GLIBC_2.34' not found` | An old atlas-action release | Upgrade: current binaries are static | | `Node.js 20 actions are deprecated` | An old release pinned | Upgrade to a current v1 release (Node 24) | | `ariga/atlas-action@v0`, - Network accessline 34
| `Node.js 20 actions are deprecated` | An old release pinned | Upgrade to a current v1 release (Node 24) | | `ariga/atlas-action@v0`, `ariga/atlas-sync-action`, or `ariga/atlas-deploy-action` in the workflow | Actions deprecated in October - Network accessline 35
| `ariga/atlas-action@v0`, `ariga/atlas-sync-action`, or `ariga/atlas-deploy-action` in the workflow | Actions deprecated in October 2023, without updates (https://atlasgo.io/blog/2023/10/12/atlas-actions-v1) | `migrate/lint@v1` (with `dir- - Dangerous shell operationline 36
| `<feature> is no longer supported by this release`, such as `data.external_schema is no longer supported by this release` | The job installed the community build | Install the standard build with `ariga/setup-atlas` or `curl -sSf https:// - Network accessline 36
| `<feature> is no longer supported by this release`, such as `data.external_schema is no longer supported by this release` | The job installed the community build | Install the standard build with `ariga/setup-atlas` or `curl -sSf https:// - Network accessline 37
| A pipeline broke with no change in the repository | `setup-atlas` installs `latest`, and a new CLI release changed behavior | Pin `version: v<last good>` in `setup-atlas`, report the regression, upgrade when fixed | | `migrate diff` fails - Network accessline 38
| `migrate diff` fails or plans wrong statements after an ORM or Go upgrade, with no Atlas change | The ORM's schema loader does not support the new version | Upgrade the ORM's Atlas provider (such as `atlas-provider-gorm`), or Ent itself f - Network accessline 39
| A job that runs scripts in the `arigaio/atlas` image cannot start a shell | The default image is distroless: it holds only Atlas | Use `arigaio/atlas:latest-alpine`, which has `/bin/sh` (https://atlasgo.io/guides/atlas-in-docker) | - Network accessline 49
| `'atlas login' is required for organization <org> as specified in atlas.hcl` | The token belongs to another organization | A bot token from the organization `atlas.hcl` pins | | `required input "cloud-token" is missing` | `monitor/schema` - Network accessline 50
| `required input "cloud-token" is missing` | `monitor/schema` without its own token | Pass `cloud-token` to that step | | A merge job cannot push or approve after protected flows were turned on | The bot has no role on the repo | Give the - Network accessline 51
| A merge job cannot push or approve after protected flows were turned on | The bot has no role on the repo | Give the bot the Writer role on the repo (https://atlasgo.io/cloud/roles-and-permissions) | - Access to secretsline 60
[Credential-related source omitted] - Access to secretsline 64
[Credential-related source omitted] - Network accessline 79
| `--git-base` reports no changes, though `--latest 1` lints the new file | Git-based detection sees committed files only | Commit the file, or lint against the registry | | `` `atlas migrate lint` report was not uploaded to Atlas Cloud `` - Network accessline 81
| `checksum mismatch` | `atlas.sum` does not match the files: a file edited without rehashing, CRLF line endings from a Windows checkout, or a directory format mismatch | Unapplied file: `atlas migrate hash` and commit. Line endings: `* tex - Network accessline 100
|---------|-------|-----| | `connected database is not clean: ... baseline version or allow-dirty is required` | First deploy to a database with existing objects | `baseline = "<version>"` in the env's migration block | | `invalid port ":<t - Network accessline 101
| `connected database is not clean: ... baseline version or allow-dirty is required` | First deploy to a database with existing objects | `baseline = "<version>"` in the env's migration block | | `invalid port ":<text>" after host` or `net/ - Network accessline 102
| `invalid port ":<text>" after host` or `net/url: invalid userinfo` | The password in the URL secret has characters URLs reserve, such as `#`, `?`, `@`, or `/` | Store the password percent-encoded, or in its own secret that `atlas.hcl` esc - Network accessline 103
| `missing scheme for dir url. Did you mean "file://<path>"?` | `dir` has no scheme | `dir: file://migrations` or `atlas://<repo>` | | `"<path>" is not a dir` | `dir` points at a schema file, not a migration directory | A migration director - Network accessline 104
| `"<path>" is not a dir` | `dir` points at a schema file, not a migration directory | A migration directory; desired-state files deploy with `schema/apply` | | `migration file ... was added out of order` | A pending file is older than the - Network accessline 105
| `migration file ... was added out of order` | A pending file is older than the database's version | Rebase the branch's files (`references/rebase.md`); `exec-order` only with approval (https://atlasgo.io/versioned/apply#non-linear-error) - Network accessline 108
| The deploy stopped on the drift check | The target differs from its migration history | Run `migrate/drift` to see the difference (`references/drift.md`) | | `The INSERT permission was denied on the object 'atlas_schema_revisions'` on a d - Network accessline 109
| `The INSERT permission was denied on the object 'atlas_schema_revisions'` on a dry run | Old CLI versions wrote to the revisions table on a dry run with `--env` and a token | Upgrade the CLI, or grant the role write access to the revision - Network accessline 110
| `unexpected transaction status idle` | `BEGIN`/`COMMIT` in a file Atlas already wraps | Remove them, or put `-- atlas:txmode none` at the top of the file; lint reports them as nested transactions (https://atlasgo.io/lint/analyzers#nested- - Network accessline 111
| `migrate/apply` runs `.down.sql` files, or fails on a statement from one | A golang-migrate directory read in the Atlas format | `format = golang-migrate` in the env's `migration` block, or `dir: file://<path>?format=golang-migrate` (http - Network accessline 140
| `exec: "docker": executable file not found in $PATH` | `docker://` dev URL where Docker is missing (container job, Atlas image, container agent) | A service container and its URL (`references/setup.md`) | | `connect: connection refused` | - Network accessline 141
| `connect: connection refused` | The service is not healthy yet, or the host is wrong | Add health checks; `localhost` from the runner, the service name from a container job | | `timeout: postgres: querying system variables: dial tcp <addr - Network accessline 142
| `timeout: postgres: querying system variables: dial tcp <address>:<port>`, or `read tcp [::1]:<port>`, with a `docker://` dev URL | Atlas cannot reach the port Docker published for the dev container: some self-hosted runners, or Atlas in - Network accessline 143
| `connected database is not clean` (dev), such as `found schema "atlas_schema_revisions"` | The dev database is not empty, or the dev URL points at a real database | An empty database or schema used only by Atlas (https://atlasgo.io/faq/mi - Network accessline 144
| `modify schema "public" is not allowed when migration plan is scoped to one schema` | The dev database's schema differs from the target's in charset, collation, or comment, or the dev URL's scope differs from the target's | Give the dev d - Network accessline 145
| `pq: type "<type>" does not exist` or `pq: function <name>() does not exist`, for an extension's type or function (`geometry`, `geography`, `citext`, `uuid_generate_v4`) | The job is logged out, and extensions are managed only with the lo - Network accessline 146
| `extension "<name>" has no installation script nor update path for version "<v>"` | The dev image lacks the target's extension version | A dev image with the target's extension versions, or exclude extension versions (https://atlasgo.io/f - Network accessline 147
| `pq: out of shared memory` | The dev database's lock table is too small for the schema | Raise `max_locks_per_transaction` with the `docker` block's `command` (https://atlasgo.io/faq/out-of-shared-memory) | - Network accessline 148
| A MySQL or MariaDB plan or drift report keeps showing a generated column changed from `_latin1'...'` to `_utf8mb4'...'` | The dev database's charset or collation differs from the target's | Start the dev database with the target's charset - Network accessline 153
|----------|--------| | Install only the CLI, for the job's own scripts | `ariga/setup-atlas` puts `atlas` on the `PATH` for the later steps; without `cloud-token` it does not log in | | Install with `go install` | Not supported: use `setup - Network accessline 154
| Install only the CLI, for the job's own scripts | `ariga/setup-atlas` puts `atlas` on the `PATH` for the later steps; without `cloud-token` it does not log in | | Install with `go install` | Not supported: use `setup-atlas` or the install - Network accessline 155
| Install with `go install` | Not supported: use `setup-atlas` or the install script (https://atlasgo.io/faq/go-install-deprecation) | - Network accessline 156
| Secrets from a secret manager | The `runtimevar` data source reads them when the step runs (https://atlasgo.io/guides/deploying/secrets), or a `data "external"` block runs the manager's CLI; an environment variable read with `getenv()` al - Network accessline 157
| Lint every file, not only the new ones | With the CLI: `atlas migrate lint --env ci --latest <N>`, with `N` the number of files in the directory | | Run `SET ROLE` or another statement before each migration | Migration hooks in the deploy - Network accessline 158
| Run `SET ROLE` or another statement before each migration | Migration hooks in the deploy env, which need the login (https://atlasgo.io/versioned/apply#migration-hooks) |
skills/atlas-clickhouse/SKILL.md
- Network accessline 14
This skill is `SKILL.md` plus seven reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-clickhouse/references/<name>`. Read a reference when the task needs it: - Network accessline 15
`https://atlasgo.io/skills/atlas-clickhouse/references/<name>`. Read a reference when the task needs it: - Network accessline 29
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 30
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 136
- ClickHouse HCL reference: https://atlasgo.io/hcl/clickhouse - Network accessline 137
- Getting started: https://atlasgo.io/guides/clickhouse - Network accessline 138
- Dev database: https://atlasgo.io/concepts/dev-database - Network accessline 139
- Clusters: https://atlasgo.io/guides/clickhouse/cluster-mode - Network accessline 140
- ClickHouse Cloud: https://atlasgo.io/guides/clickhouse/clickhouse-cloud-atlas - Network accessline 141
- Security: https://atlasgo.io/guides/clickhouse/security-declarative, - Network accessline 142
https://atlasgo.io/guides/clickhouse/security-versioned - Network accessline 143
- Lint checks: https://atlasgo.io/lint/analyzers - Network accessline 144
- Guides for each database: https://atlasgo.io/databases
skills/atlas-clickhouse/references/custom-rules.md
- Network accessline 4
the user states a convention, write a custom rule in Atlas's HCL rule language. A rule can check the attributes Atlas exposes for each ClickHouse object, and `atlas schema lint` and `atlas migrate lint` enforce it on every change (https://a - Network accessline 5
attributes Atlas exposes for each ClickHouse object, and `atlas schema lint` and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lint/rules). Lint needs `atlas login`, as the ClickHouse driver does. If `atlas whoami` sho - Network accessline 6
enforce it on every change (https://atlasgo.io/lint/rules). Lint needs `atlas login`, as the ClickHouse - Network accessline 12
Rules live in `.rule.hcl` files. The language reference is https://atlasgo.io/hcl/rule. - Network accessline 36
The attributes ClickHouse objects expose to predicates, and the child objects a predicate or rule can walk into (https://atlasgo.io/hcl/rule): - Network accessline 37
walk into (https://atlasgo.io/hcl/rule): - Network accessline 62
From the rule tests and docs (https://atlasgo.io/lint/rules). Adapt the closest one before writing a - Network accessline 245
Add the rule files to `atlas.hcl`, globally or inside an env (https://atlasgo.io/lint/rules):
skills/atlas-clickhouse/references/dev-database.md
- Network accessline 3
The dev database is a temporary database Atlas uses to load the desired state, replay migrations, and compute plans (https://atlasgo.io/concepts/dev-database). For ClickHouse it must match the target's - Network accessline 4
compute plans (https://atlasgo.io/concepts/dev-database). For ClickHouse it must match the target's - Network accessline 11
The URL's path names a database, and decides what Atlas covers (https://atlasgo.io/concepts/url): - Network accessline 40
The `docker://` driver starts a fresh `clickhouse/clickhouse-server:<tag>` container for each run. The URL path holds the image tag, then an optional database that Atlas creates in the container (https://atlasgo.io/concepts/dev-database): - Network accessline 42
(https://atlasgo.io/concepts/dev-database): - Network accessline 75
`atlas tool docker` creates a named container from a `docker://` URL and prints its connection URL. It also cleans the database if it is not empty, so never run it against a container that holds data to keep (https://atlasgo.io/cli-referenc - Network accessline 77
keep (https://atlasgo.io/cli-reference). The container runs until `atlas tool docker kill --name my-db`: - Network accessline 111
A `docker "clickhouse"` block configures the dev container: `image` (required), `schema`, `baseline`, `init`, `volumes`, `env`, `command`, `args`, `platform`, `build`, and more (https://atlasgo.io/hcl/config#docker.clickhouse). The `docker` - Network accessline 113
(https://atlasgo.io/hcl/config#docker.clickhouse). The `docker` and `dev` blocks need `atlas login`. - Network accessline 139
A `dev "clickhouse"` block, or a plain `clickhouse://` dev URL, connects to an existing database instead of a container (https://atlasgo.io/hcl/config). The database must be empty and dedicated to Atlas. - Network accessline 140
of a container (https://atlasgo.io/hcl/config). The database must be empty and dedicated to Atlas. - Network accessline 169
When the target defines a `cluster` macro, the dev database must be on a cluster too, or commands fail with `dev database must also be in a cluster configuration`. `docker://` starts a single node, so it cannot serve a clustered target (htt - Network accessline 171
cannot serve a clustered target (https://atlasgo.io/guides/clickhouse/cluster-mode): - Network accessline 196
`has_user_defined_zookeeper_path`. Pin the dev image to the Cloud service's version yourself. - The dev database can be a separate Cloud service, which matches the target fully, or a Docker container on OSS engines (https://atlasgo.io/gui - Network accessline 197
- The dev database can be a separate Cloud service, which matches the target fully, or a Docker container on OSS engines (https://atlasgo.io/guides/clickhouse/clickhouse-cloud-atlas). - Inspection skips Cloud's own users and roles: users - Network accessline 198
container on OSS engines (https://atlasgo.io/guides/clickhouse/clickhouse-cloud-atlas). - Network accessline 215
Atlas connects over the native protocol: port `9000`, or `9440` with TLS (`secure=true`), the port ClickHouse Cloud uses (https://atlasgo.io/guides/clickhouse/clickhouse-cloud-atlas). Two query - Network accessline 216
ClickHouse Cloud uses (https://atlasgo.io/guides/clickhouse/clickhouse-cloud-atlas). Two query - Network accessline 217
parameters belong to Atlas and are removed before connecting; every other parameter is passed to the server, and ClickHouse settings passed this way apply to every query of the session (https://atlasgo.io/guides/clickhouse/session-settings) - Network accessline 219
(https://atlasgo.io/guides/clickhouse/session-settings):
skills/atlas-clickhouse/references/hcl.md
- Network accessline 3
The rules of the HCL schema language that matter on ClickHouse, and the places where HCL behaves differently from SQL. The language: https://atlasgo.io/atlas-schema/hcl. Every ClickHouse block and - Network accessline 4
differently from SQL. The language: https://atlasgo.io/atlas-schema/hcl. Every ClickHouse block and - Network accessline 5
attribute: https://atlasgo.io/hcl/clickhouse. Expressions for engines, types, defaults, and TTLs: - Network accessline 6
https://atlasgo.io/guides/clickhouse/advanced-hcl-schema. - Network accessline 13
- Name ClickHouse schema files `*.ch.hcl` and test files `*.test.hcl`, so editors apply the right schema (https://atlasgo.io/atlas-schema/hcl). - Network accessline 14
schema (https://atlasgo.io/atlas-schema/hcl). - Network accessline 246
- A WASM function sets `lang = WASM`, `module`, `returns`, `source`, and `arg` blocks instead of `as`, and takes `abi`, `deterministic`, `hash`, and `settings`. A `wasm_module` block takes `code` and an optional `hash`, both as `sql()` - Network accessline 247
and takes `abi`, `deterministic`, `hash`, and `settings`. A `wasm_module` block takes `code` and an optional `hash`, both as `sql()` expressions (https://atlasgo.io/guides/clickhouse/wasm). - A `named_collection` holds `item` blocks with - Network accessline 248
optional `hash`, both as `sql()` expressions (https://atlasgo.io/guides/clickhouse/wasm). - Network accessline 258
Rows are declared next to the table in a `data` block, and applied only when the env enables data sync (https://atlasgo.io/guides/clickhouse/seed-data): - Network accessline 259
(https://atlasgo.io/guides/clickhouse/seed-data): - Network accessline 290
Input variables work as in any Atlas HCL schema (https://atlasgo.io/atlas-schema/input-variables), and
skills/atlas-clickhouse/references/migrations.md
- Network accessline 11
The ClickHouse checks report changes whose cost grows with the size of the table, not with the size of the change (https://atlasgo.io/lint/analyzers). They are reported under - Network accessline 12
the change (https://atlasgo.io/lint/analyzers). They are reported under - Network accessline 44
A statement can opt out of named checks with a directive, with the user's approval (https://atlasgo.io/versioned/lint#nolint-directive): - Network accessline 45
(https://atlasgo.io/versioned/lint#nolint-directive): - Network accessline 129
The env's `diff` block shapes every plan (https://atlasgo.io/versioned/diff): - Network accessline 172
ones unchanged, and run `atlas migrate hash`. - To undo a partially applied file instead, run `atlas migrate down` before editing it, which reverts the applied statements one at a time (https://atlasgo.io/versioned/down). Once the file is - Network accessline 173
- To undo a partially applied file instead, run `atlas migrate down` before editing it, which reverts the applied statements one at a time (https://atlasgo.io/versioned/down). Once the file is edited and rehashed, `down` refuses it with - Network accessline 174
the applied statements one at a time (https://atlasgo.io/versioned/down). Once the file is edited - Network accessline 197
Add `mode=cluster` to the URL and the dev URL (https://atlasgo.io/guides/clickhouse/cluster-mode): - Network accessline 218
A setting a statement needs, such as `allow_suspicious_low_cardinality_types`, can come from four places (https://atlasgo.io/guides/clickhouse/session-settings): - Network accessline 219
(https://atlasgo.io/guides/clickhouse/session-settings): - Network accessline 239
A database that has tables but no revisions table is refused until it gets a baseline: the first migration, recorded as applied without running (https://atlasgo.io/versioned/apply). Generate it with a - Network accessline 240
migration, recorded as applied without running (https://atlasgo.io/versioned/apply). Generate it with a
skills/atlas-clickhouse/references/objects.md
- Network accessline 3
How Atlas models ClickHouse objects, what each one needs, and the cases where its plan differs from what a hand-written migration would do. The full attribute reference is https://atlasgo.io/hcl/clickhouse, - Network accessline 4
a hand-written migration would do. The full attribute reference is https://atlasgo.io/hcl/clickhouse, - Network accessline 5
and the overview is https://atlasgo.io/guides/clickhouse/supported-objects. HCL syntax is in - Network accessline 175
WASM modules and WASM UDFs need ClickHouse 26.3 or later, with WebAssembly enabled in the server configuration, on the target and on the dev database, and `wasm_modules = true` in `mode "clickhouse"` (https://atlasgo.io/guides/clickhouse/wa - Network accessline 177
(https://atlasgo.io/guides/clickhouse/wasm). - Network accessline 192
Named collections need `named_collections = true`, server scope, and a user allowed to manage them (`named_collection_control`), on the target and the dev database (https://atlasgo.io/guides/clickhouse/named-collections). - Network accessline 194
(https://atlasgo.io/guides/clickhouse/named-collections).
skills/atlas-clickhouse/references/security.md
- Network accessline 3
Users, roles, grants, row policies, settings profiles, passwords, and the secret settings that engines, dictionaries, and named collections carry. The guides: https://atlasgo.io/guides/clickhouse/security-declarative and - Network accessline 4
dictionaries, and named collections carry. The guides: https://atlasgo.io/guides/clickhouse/security-declarative and https://atlasgo.io/guides/clickhouse/security-versioned. Everything here needs `atlas login`, as the - Network accessline 5
https://atlasgo.io/guides/clickhouse/security-declarative and - Network accessline 6
https://atlasgo.io/guides/clickhouse/security-versioned. Everything here needs `atlas login`, as the - Network accessline 59
Declare every other account, and review the first plan for drops. To keep drops out of every plan, set `drop_user = true` and `drop_role = true` in the env's `diff { skip { ... } }` policy (https://atlasgo.io/versioned/diff). - Network accessline 61
(https://atlasgo.io/versioned/diff). - Network accessline 88
- `member_of` grants roles. A `membership` block, with `role = role.app_writer` and `admin = true`, grants one `WITH ADMIN OPTION` (https://atlasgo.io/hcl/clickhouse#user). - Network accessline 89
grants one `WITH ADMIN OPTION` (https://atlasgo.io/hcl/clickhouse#user). - Network accessline 119
password change with `changing password for user "<name>" should be handled manually`; without the mode, the change is invisible. Set passwords in a hand-written file that reads them from a template directory (https://atlasgo.io/atlas-s - Network accessline 120
mode, the change is invisible. Set passwords in a hand-written file that reads them from a template directory (https://atlasgo.io/atlas-schema/projects) and starts with `-- atlas:sensitive`, so they are never logged. - Network accessline 121
that reads them from a template directory (https://atlasgo.io/atlas-schema/projects) and starts with - Network accessline 128
dictionary, a function, a named collection, or a single column. `to` takes a role or user reference or a name. `privileges` takes ClickHouse privileges, such as `SELECT`, `INSERT`, `ALTER`, `CREATE`, `DROP`, `dictGet`, or `ALL` (https://atl - Network accessline 130
`dictGet`, or `ALL` (https://atlasgo.io/hcl/clickhouse#permission): - Network accessline 213
Kafka, RabbitMQ, NATS, S3Queue, and FileLog tables are recreated for any change, a comment included. - Named collections are created and changed with their keys, and empty values. Value changes are not planned (https://atlasgo.io/guides/c - Network accessline 215
planned (https://atlasgo.io/guides/clickhouse/named-collections).
skills/atlas-clickhouse/references/testing.md
- Network accessline 143
Each case starts from an empty database. Migrate to the version before the change, seed rows, migrate to the version under test, and check the data (https://atlasgo.io/testing/migrate): - Network accessline 144
the version under test, and check the data (https://atlasgo.io/testing/migrate):
skills/atlas-databricks/SKILL.md
- Network accessline 15
This skill is `SKILL.md` plus seven reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-databricks/references/<name>`. Read a reference when the task needs it: - Network accessline 16
`https://atlasgo.io/skills/atlas-databricks/references/<name>`. Read a reference when the task needs it: - Network accessline 30
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 31
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 131
- Databricks HCL reference: https://atlasgo.io/hcl/databricks - Network accessline 132
- Dev database: https://atlasgo.io/concepts/dev-database - Network accessline 133
- Connection URLs and scope: https://atlasgo.io/concepts/url - Network accessline 134
- Databricks guide: https://atlasgo.io/guides/databricks/automatic-migrations - Network accessline 135
- Lint checks: https://atlasgo.io/lint/analyzers - Network accessline 136
- Guides for each database: https://atlasgo.io/databases
skills/atlas-databricks/references/custom-rules.md
- Network accessline 4
When no analyzer covers a check, or the user states a convention, write a custom rule in Atlas's HCL rule language. `atlas schema lint` and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lint/rules). Lint needs `atlas l - Network accessline 5
rule language. `atlas schema lint` and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lint/rules). Lint needs `atlas login`. If `atlas whoami` shows no login, ask the user to run `atlas login`; a user without an account - Network accessline 6
(https://atlasgo.io/lint/rules). Lint needs `atlas login`. If `atlas whoami` shows no login, ask the user - Network accessline 11
Rules live in `.rule.hcl` files. The language reference is https://atlasgo.io/hcl/rule. - Network accessline 31
Databricks uses the base rule language, with no Databricks-specific attributes. The attributes each object exposes, and the child objects a rule can walk into (https://atlasgo.io/hcl/rule#predicate): - Network accessline 32
object exposes, and the child objects a rule can walk into (https://atlasgo.io/hcl/rule#predicate): - Network accessline 64
Adapt the closest one before writing a rule from scratch (https://atlasgo.io/lint/rules#examples). - Network accessline 222
Add the rule files to `atlas.hcl`, globally or inside an env (https://atlasgo.io/lint/rules):
skills/atlas-databricks/references/dev-database.md
- Network accessline 3
The dev database is a temporary database Atlas uses to load the desired state, replay migrations, and compute plans (https://atlasgo.io/concepts/dev-database). Databricks does not run in Docker, so the dev - Network accessline 4
compute plans (https://atlasgo.io/concepts/dev-database). Databricks does not run in Docker, so the dev - Network accessline 9
The Databricks driver ships only in the extended Atlas binary (https://atlasgo.io/guides/databricks/automatic-migrations): - Network accessline 10
(https://atlasgo.io/guides/databricks/automatic-migrations): - Network accessline 13
curl -sSf https://atlasgo.sh | ATLAS_FLAVOR="databricks" sh - Access to secretsline 47
[Credential-related source omitted] - Network accessline 82
The `schema` parameter decides what Atlas covers (https://atlasgo.io/concepts/url#scope):
skills/atlas-databricks/references/hcl.md
- Network accessline 3
The rules of the HCL schema language that matter on Databricks, and the places where HCL behaves differently from SQL. The language: https://atlasgo.io/atlas-schema/hcl. Column types: - Network accessline 4
differently from SQL. The language: https://atlasgo.io/atlas-schema/hcl. Column types: - Network accessline 5
https://atlasgo.io/atlas-schema/hcl-types. Every Databricks block and attribute: - Network accessline 6
https://atlasgo.io/hcl/databricks. The behavior behind each block is in `references/objects.md`. - Network accessline 10
- Name Databricks schema files `*.dbx.hcl` and test files `*.test.hcl`, so editors apply the right schema (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 11
schema (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 20
The examples in this file build one schema, `retail_analytics`, taken from the tested examples of the Databricks changelog (https://atlasgo.io/changelog/databricks-object-attribute-coverage). - Network accessline 21
Databricks changelog (https://atlasgo.io/changelog/databricks-object-attribute-coverage). - Network accessline 404
A schema file declares the values it expects, and `atlas.hcl` passes them through `data "hcl_schema"` (https://atlasgo.io/atlas-schema/projects): - Network accessline 405
(https://atlasgo.io/atlas-schema/projects):
skills/atlas-databricks/references/migrations.md
- Network accessline 10
Databricks has no driver-specific analyzers. Lint runs these (https://atlasgo.io/lint/analyzers): - Network accessline 38
Statement rules fill gaps for Databricks-specific risks, such as a rewrite of a materialized view, which refreshes it in full (https://atlasgo.io/lint/analyzers#statement-rules): - Network accessline 39
which refreshes it in full (https://atlasgo.io/lint/analyzers#statement-rules): - Network accessline 52
Each check is tuned in the `lint` block (https://atlasgo.io/lint/analyzers#destructive-changes): - Network accessline 69
Databricks runs no statement in a transaction, and its SQL driver cannot open one. Atlas plans every Databricks change as non-transactional, and each statement commits on its own (https://atlasgo.io/versioned/apply#transaction-configuration - Network accessline 71
(https://atlasgo.io/versioned/apply#transaction-configuration): - Network accessline 95
- A file or a plan that fails halfway stays half applied. The statements before the failure remain, and Atlas records how many statements of the file ran, so `atlas migrate status` shows the file as partially applied (https://atlasgo.io - Network accessline 96
and Atlas records how many statements of the file ran, so `atlas migrate status` shows the file as partially applied (https://atlasgo.io/versioned/troubleshoot). - The next `atlas migrate apply` continues from the statement that failed. F - Network accessline 97
partially applied (https://atlasgo.io/versioned/troubleshoot). - Network accessline 101
- If the connection drops between a statement and its entry in the revisions table, Atlas resumes one statement early. Revert that statement by hand before the next run (https://atlasgo.io/versioned/troubleshoot#connection-loss-failures - Network accessline 102
statement early. Revert that statement by hand before the next run (https://atlasgo.io/versioned/troubleshoot#connection-loss-failures). - `atlas migrate down` reverts statement by statement on Databricks, without a transaction, and - Network accessline 103
(https://atlasgo.io/versioned/troubleshoot#connection-loss-failures). - Network accessline 104
- `atlas migrate down` reverts statement by statement on Databricks, without a transaction, and updates the revisions table after each, so a run that fails midway is re-run to continue (https://atlasgo.io/versioned/down). Reverting a dr - Network accessline 105
updates the revisions table after each, so a run that fails midway is re-run to continue (https://atlasgo.io/versioned/down). Reverting a dropped table or column recreates it empty. A file that drops a generated or identity column has n - Network accessline 106
(https://atlasgo.io/versioned/down). Reverting a dropped table or column recreates it empty. A file - Network accessline 137
A target that has objects but no revisions table is refused until it gets a baseline: the first migration, recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases). - Network accessline 138
migration, recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases).
skills/atlas-databricks/references/objects.md
- Network accessline 3
How Atlas models Databricks objects, the cases where its plan differs from what a hand-written migration would do, and the changes it refuses to plan. The full attribute reference is https://atlasgo.io/hcl/databricks, and the HCL for each o - Network accessline 5
https://atlasgo.io/hcl/databricks, and the HCL for each object is in `references/hcl.md`.
skills/atlas-databricks/references/security.md
- Network accessline 3
Grants on schemas, tables, views, materialized views, functions, and procedures, the Unity Catalog principals they name, and the column masks and row filters that limit what a principal reads. The HCL blocks: https://atlasgo.io/hcl/databric - Network accessline 5
blocks: https://atlasgo.io/hcl/databricks#permission. - Network accessline 110
`ref()` takes a schema, a table, a view, or a materialized view. In a `composite_schema`, one part can declare the objects and another the grants on them; both load on the dev catalog, so the grants plan as ordinary ones (https://atlasgo.io - Network accessline 112
as ordinary ones (https://atlasgo.io/atlas-schema/projects#data-source-composite_schema).
skills/atlas-databricks/references/testing.md
- Network accessline 66
Each case starts from an empty dev catalog. Migrate to a version, seed rows, migrate further, and check the data (https://atlasgo.io/guides/testing/data-migrations). The same shape covers the logic in the - Network accessline 67
the data (https://atlasgo.io/guides/testing/data-migrations). The same shape covers the logic in the
skills/atlas-mssql/SKILL.md
- Network accessline 10
is described for SQL Server 2022; where a compatibility level changes it, the text says so. Azure SQL Database follows the same rules, and Fabric Data Warehouse has a guide of its own (https://atlasgo.io/guides/azure-fabric). - Network accessline 12
(https://atlasgo.io/guides/azure-fabric). - Network accessline 16
This skill is `SKILL.md` plus seven reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-mssql/references/<name>`. Read a reference when the task needs it: - Network accessline 17
`https://atlasgo.io/skills/atlas-mssql/references/<name>`. Read a reference when the task needs it: - Network accessline 31
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 32
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 149
- SQL Server HCL reference: https://atlasgo.io/hcl/mssql - Network accessline 150
- SQL Server guide: https://atlasgo.io/guides/mssql - Network accessline 151
- Security: https://atlasgo.io/guides/mssql/security-declarative, - Network accessline 152
https://atlasgo.io/guides/mssql/security-versioned - Network accessline 153
- Seed data: https://atlasgo.io/guides/mssql/seed-data - Network accessline 154
- Dev database: https://atlasgo.io/concepts/dev-database - Network accessline 155
- Lint checks: https://atlasgo.io/lint/analyzers - Network accessline 156
- Guides for each database: https://atlasgo.io/databases
skills/atlas-mssql/references/custom-rules.md
- Network accessline 4
own. When no analyzer covers a check, or the user states a convention, write a custom rule in Atlas's HCL rule language. A rule can check any attribute of any object Atlas inspects, and `atlas schema lint` and `atlas migrate lint` enforce i - Network accessline 5
HCL rule language. A rule can check any attribute of any object Atlas inspects, and `atlas schema lint` and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lint/rules). Lint needs `atlas login`, which SQL Server needs an - Network accessline 6
and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lint/rules). Lint needs - Network accessline 11
Rules live in `.rule.hcl` files. The language reference is https://atlasgo.io/hcl/rule. - Network accessline 248
Add the rule files to `atlas.hcl`, globally or inside an env (https://atlasgo.io/lint/rules):
skills/atlas-mssql/references/dev-database.md
- Network accessline 3
The dev database is a temporary database Atlas uses to load the desired state, replay migrations, and compute plans (https://atlasgo.io/concepts/dev-database). For SQL Server it must match the target's - Network accessline 4
compute plans (https://atlasgo.io/concepts/dev-database). For SQL Server it must match the target's - Network accessline 17
`fedauth` method (Azure SQL and Fabric below). - Percent-encode special characters in passwords, or build the URL with `urlescape`: `urlescape(getenv("DB_PASSWORD"))` (https://atlasgo.io/faq/url-special-chars). - Network accessline 18
- Percent-encode special characters in passwords, or build the URL with `urlescape`: `urlescape(getenv("DB_PASSWORD"))` (https://atlasgo.io/faq/url-special-chars). - The user Atlas connects as must be able to read every object Atlas manag - Network accessline 19
`urlescape(getenv("DB_PASSWORD"))` (https://atlasgo.io/faq/url-special-chars). - Network accessline 25
`mode` decides what Atlas covers (https://atlasgo.io/concepts/url): - Network accessline 53
The `docker://` driver starts a fresh container for each run (https://atlasgo.io/concepts/dev-database). - Network accessline 71
- `docker://` needs a Docker client and a reachable daemon. Inside the `arigaio/atlas` image, or on a CI runner without Docker, point `dev` at a separate SQL Server container instead (https://atlasgo.io/faq/docker-in-docker): - Network accessline 73
(https://atlasgo.io/faq/docker-in-docker): - Network accessline 85
`atlas tool docker` creates a named container from a `docker://` URL and prints its connection URL. It cleans the database if it is not empty, so never run it against a container that holds data to keep (https://atlasgo.io/cli-reference#atl - Network accessline 87
(https://atlasgo.io/cli-reference#atlas-tool-docker). The container runs until `atlas tool docker kill`: - Network accessline 129
Without Docker, a `dev` block connects to an existing empty database, applies the `baseline`, and restores the database to its original state on exit (https://atlasgo.io/concepts/dev-database#providing-your-own-dev-database): - Network accessline 131
(https://atlasgo.io/concepts/dev-database#providing-your-own-dev-database): - Network accessline 173
- Azure SQL Database and Managed Instance with Microsoft Entra ID use the `azuresql://` scheme. As with `sqlserver://`, `mode` sets the scope (https://atlasgo.io/concepts/url): - Network accessline 174
`sqlserver://`, `mode` sets the scope (https://atlasgo.io/concepts/url): - Network accessline 183
- Fabric Data Warehouse cannot run in Docker: the dev URL is a separate, empty warehouse on `azuresql://`. Atlas adds `-- atlas:txmode none` to every migration file and `NOT ENFORCED` to keys, and a primary key sets `nonclustered = true - Network accessline 185
and a primary key sets `nonclustered = true` (https://atlasgo.io/guides/azure-fabric).
skills/atlas-mssql/references/hcl.md
- Network accessline 3
The rules of the HCL schema language that matter on SQL Server, and the places where HCL behaves differently from T-SQL. The language: https://atlasgo.io/atlas-schema/hcl. Column types: - Network accessline 4
differently from T-SQL. The language: https://atlasgo.io/atlas-schema/hcl. Column types: - Network accessline 5
https://atlasgo.io/atlas-schema/hcl-types. Every SQL Server block and attribute: - Network accessline 6
https://atlasgo.io/hcl/mssql. - Network accessline 14
- Name SQL Server schema files `*.ms.hcl` and test files `*.test.hcl`, so editors apply the right schema (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 15
schema (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 54
from the database's default. - `renamed_from` plans `sp_rename` instead of dropping the old column and adding a new one (https://atlasgo.io/guides/destructive-change-policy): - Network accessline 56
(https://atlasgo.io/guides/destructive-change-policy): - Network accessline 67
Write parameters inline: `decimal(10,2)`, `nvarchar(255)`, `datetime2(7)` (https://atlasgo.io/atlas-schema/hcl-types): - Network accessline 68
(https://atlasgo.io/atlas-schema/hcl-types): - Network accessline 239
Rows are declared next to the table in a `data` block, and applied only when the env enables data sync (https://atlasgo.io/guides/mssql/seed-data): - Network accessline 240
(https://atlasgo.io/guides/mssql/seed-data): - Network accessline 268
A schema file declares the values it expects, and `atlas.hcl` passes them through `data "hcl_schema"` (https://atlasgo.io/atlas-schema/input-variables): - Network accessline 269
(https://atlasgo.io/atlas-schema/input-variables):
skills/atlas-mssql/references/migrations.md
- Network accessline 9
SQL Server has no analyzers of its own (no `MS*` codes). The generic ones apply (https://atlasgo.io/lint/analyzers): - Network accessline 10
(https://atlasgo.io/lint/analyzers): - Network accessline 30
Each check is tuned in the `lint` block (https://atlasgo.io/lint/analyzers#checks): - Network accessline 49
- `atlas migrate apply` runs each file in its own transaction by default (`--tx-mode file`); `all` runs every pending file in one, and `none` runs statements without one. `atlas schema apply` supports `file` and `none` (https://atlasgo. - Network accessline 50
every pending file in one, and `none` runs statements without one. `atlas schema apply` supports `file` and `none` (https://atlasgo.io/versioned/apply#transaction-configuration). - DDL is transactional on SQL Server: a file that fails is - Network accessline 51
`file` and `none` (https://atlasgo.io/versioned/apply#transaction-configuration). - Network accessline 98
- Migration files are T-SQL sent to the server, not `sqlcmd` scripts. `:setvar`, `:r`, and `$(var)` fail with `mssql: Incorrect syntax near ':'.` Use input variables in `atlas.hcl`, or a template directory (https://atlasgo.io/guides/mig - Network accessline 99
fail with `mssql: Incorrect syntax near ':'.` Use input variables in `atlas.hcl`, or a template directory (https://atlasgo.io/guides/migration-dirs/template-directory). - `executing statement "..." from version "X": mssql: ...` names the - Network accessline 100
directory (https://atlasgo.io/guides/migration-dirs/template-directory). - Network accessline 111
build with `RESUMABLE = ON` needs `-- atlas:txmode none`. - `NULL` to `NOT NULL` scans the table. The `not_null` diff policy writes the migration as a txtar file with a pre-migration check that no row is `NULL`, which clears `MF104` (http - Network accessline 113
with a pre-migration check that no row is `NULL`, which clears `MF104` (https://atlasgo.io/hcl/config): - Network accessline 143
server do not wait for it. - `hook` blocks run SQL inside the migration transaction, such as `SET LOCK_TIMEOUT 5000` in `after_begin` (https://atlasgo.io/versioned/apply#migration-hooks). They do not run for - Network accessline 144
- `hook` blocks run SQL inside the migration transaction, such as `SET LOCK_TIMEOUT 5000` in `after_begin` (https://atlasgo.io/versioned/apply#migration-hooks). They do not run for `txmode none` files. - Network accessline 145
`after_begin` (https://atlasgo.io/versioned/apply#migration-hooks). They do not run for - Network accessline 150
A database that has objects but no revisions table is refused until it gets a baseline: the first migration recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases). - Network accessline 151
migration recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases). - Network accessline 160
Lookup tables can be declared with the schema and kept in sync on every apply (https://atlasgo.io/guides/mssql/seed-data). `INSERT` adds missing rows, `UPSERT` also updates them, and - Network accessline 161
(https://atlasgo.io/guides/mssql/seed-data). `INSERT` adds missing rows, `UPSERT` also updates them, and
skills/atlas-mssql/references/objects.md
- Network accessline 3
How Atlas models SQL Server objects, and the cases where its plan differs from what a hand-written migration would do. The full attribute reference is https://atlasgo.io/hcl/mssql. - Network accessline 4
migration would do. The full attribute reference is https://atlasgo.io/hcl/mssql. - Network accessline 49
- An HCL `data` block cannot set an identity column: a row that gives one fails with `cannot set value for generated column "id"`, and `preserve_ids` has no effect on SQL Server. Give a lookup table a plain key, as the seed-data guide d - Network accessline 50
`cannot set value for generated column "id"`, and `preserve_ids` has no effect on SQL Server. Give a lookup table a plain key, as the seed-data guide does (https://atlasgo.io/guides/mssql/seed-data), or seed an identity table with `SET - Network accessline 51
lookup table a plain key, as the seed-data guide does (https://atlasgo.io/guides/mssql/seed-data), or - Network accessline 124
A system-versioned table declares its period columns, the period, and the history table (https://atlasgo.io/atlas-schema/hcl#system-versioned-tables). The period columns are `datetime2`, - Network accessline 125
(https://atlasgo.io/atlas-schema/hcl#system-versioned-tables). The period columns are `datetime2`, - Network accessline 179
- `fulltext_catalog` and a table's `fulltext` block manage full-text search. They need a dev image with full-text search installed, and SQL Server cannot create them inside a transaction (https://atlasgo.io/atlas-schema/hcl#full-text-in - Network accessline 181
(https://atlasgo.io/atlas-schema/hcl#full-text-index).
skills/atlas-mssql/references/security.md
- Network accessline 3
Database roles, database users, GRANT and REVOKE, and what Atlas leaves to hand-written migrations on SQL Server. The guides: https://atlasgo.io/guides/mssql/security-declarative and - Network accessline 4
SQL Server. The guides: https://atlasgo.io/guides/mssql/security-declarative and - Network accessline 5
https://atlasgo.io/guides/mssql/security-versioned. - Network accessline 9
Roles, users, and permissions are left out of inspection and planning by default. Enable them in the env's `schema` block (https://atlasgo.io/atlas-schema/hcl#enabling-roles-and-permissions): - Network accessline 10
env's `schema` block (https://atlasgo.io/atlas-schema/hcl#enabling-roles-and-permissions): - Network accessline 30
undeclared one is planned for `DROP USER` or `DROP ROLE`. Review the first plan. The `skip` diff policy takes `drop_role = true` and `drop_user = true` to keep those drops out of plans (https://atlasgo.io/versioned/diff#diff-policy). - Network accessline 31
policy takes `drop_role = true` and `drop_user = true` to keep those drops out of plans (https://atlasgo.io/versioned/diff#diff-policy). - SQL Server roles and users have no `external` attribute (it fails with - Network accessline 32
(https://atlasgo.io/versioned/diff#diff-policy). - Network accessline 104
- A `user` takes `default_schema`, `login_name`, `default_language`, `allow_encrypted_value_modifications`, `comment`, and `member_of`; a `role` takes `member_of`, which builds role hierarchies (https://atlasgo.io/atlas-schema/hcl#enabl - Network accessline 105
`allow_encrypted_value_modifications`, `comment`, and `member_of`; a `role` takes `member_of`, which builds role hierarchies (https://atlasgo.io/atlas-schema/hcl#enabling-roles-and-permissions). Roles and users share one namespace: a ro - Network accessline 106
builds role hierarchies (https://atlasgo.io/atlas-schema/hcl#enabling-roles-and-permissions). Roles - Network accessline 112
The `permission` block grants on a schema, table, view, function, procedure, `type_alias`, `type_table`, or a column of a table or view, to a role or user reference or a name as a string (https://atlasgo.io/hcl/mssql): - Network accessline 114
(https://atlasgo.io/hcl/mssql):
skills/atlas-mssql/references/testing.md
- Network accessline 21
The env lists the test files (https://atlasgo.io/testing/schema): - Network accessline 78
- Functions and procedures: normal inputs, edge cases, and error paths with `catch`. Call a procedure with `EXEC dbo.proc_name @arg = 1` (https://atlasgo.io/guides/testing/procedures). - Network accessline 79
with `EXEC dbo.proc_name @arg = 1` (https://atlasgo.io/guides/testing/procedures). - Network accessline 80
- Triggers: seed rows, change them, and check the side effects. A trigger runs once per statement, so test a multi-row `UPDATE`: a trigger written for one row (`SELECT @id = id FROM inserted`) passes a single-row test and loses rows on - Network accessline 81
test a multi-row `UPDATE`: a trigger written for one row (`SELECT @id = id FROM inserted`) passes a single-row test and loses rows on a bulk one (https://atlasgo.io/guides/testing/triggers). - Views and computed columns: seed rows and com - Network accessline 82
single-row test and loses rows on a bulk one (https://atlasgo.io/guides/testing/triggers). - Network accessline 83
- Views and computed columns: seed rows and compare the output (https://atlasgo.io/guides/testing/views). - Network accessline 146
`template attribute is supported only for postgres dev-databases`. Each test case restores the dev database when it ends. Set `parallel = true` only on stateless cases, without `INSERT` or `CREATE` (https://atlasgo.io/testing/schema): paral - Network accessline 148
(https://atlasgo.io/testing/schema): parallel cases share the dev database and see each other's rows. - Network accessline 152
Each case starts from an empty database. Migrate to the version before the change, seed rows, migrate to the version under test, and check the data (https://atlasgo.io/guides/testing/data-migrations): - Network accessline 153
to the version under test, and check the data (https://atlasgo.io/guides/testing/data-migrations):
skills/atlas-mysql/SKILL.md
- Network accessline 15
This skill is `SKILL.md` plus seven reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-mysql/references/<name>`. Read a reference when the task needs it: - Network accessline 15
This skill is `SKILL.md` plus seven reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-mysql/references/<name>`. Read a reference when the task needs it: - Network accessline 15
This skill is `SKILL.md` plus seven reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-mysql/references/<name>`. Read a reference when the task needs it: - Network accessline 16
`https://atlasgo.io/skills/atlas-mysql/references/<name>`. Read a reference when the task needs it: - Network accessline 16
`https://atlasgo.io/skills/atlas-mysql/references/<name>`. Read a reference when the task needs it: - Network accessline 16
`https://atlasgo.io/skills/atlas-mysql/references/<name>`. Read a reference when the task needs it: - Network accessline 30
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 30
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 30
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 31
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 31
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 31
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Access to secretsline 110
[Credential-related source omitted] - Access to secretsline 110
[Credential-related source omitted] - Access to secretsline 110
[Credential-related source omitted] - Network accessline 117
- MySQL HCL reference: https://atlasgo.io/hcl/mysql, and for MariaDB: https://atlasgo.io/hcl/mariadb - Network accessline 117
- MySQL HCL reference: https://atlasgo.io/hcl/mysql, and for MariaDB: https://atlasgo.io/hcl/mariadb - Network accessline 117
- MySQL HCL reference: https://atlasgo.io/hcl/mysql, and for MariaDB: https://atlasgo.io/hcl/mariadb - Network accessline 118
- Dev database: https://atlasgo.io/concepts/dev-database - Network accessline 118
- Dev database: https://atlasgo.io/concepts/dev-database - Network accessline 118
- Dev database: https://atlasgo.io/concepts/dev-database - Network accessline 119
- Security: https://atlasgo.io/guides/mysql/security-declarative, - Network accessline 119
- Security: https://atlasgo.io/guides/mysql/security-declarative, - Network accessline 119
- Security: https://atlasgo.io/guides/mysql/security-declarative, - Network accessline 120
https://atlasgo.io/guides/mysql/security-versioned - Network accessline 120
https://atlasgo.io/guides/mysql/security-versioned - Network accessline 120
https://atlasgo.io/guides/mysql/security-versioned - Network accessline 121
- Lint checks: https://atlasgo.io/lint/analyzers - Network accessline 121
- Lint checks: https://atlasgo.io/lint/analyzers - Network accessline 121
- Lint checks: https://atlasgo.io/lint/analyzers - Network accessline 122
- Guides for each database: https://atlasgo.io/databases - Network accessline 122
- Guides for each database: https://atlasgo.io/databases - Network accessline 122
- Guides for each database: https://atlasgo.io/databases
skills/atlas-mysql/references/custom-rules.md
- Network accessline 4
the user states a convention, write a custom rule in Atlas's HCL rule language. A rule can check any attribute of any object Atlas inspects, and `atlas schema lint` and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lin - Network accessline 5
attribute of any object Atlas inspects, and `atlas schema lint` and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lint/rules). Lint needs `atlas login`. If `atlas whoami` shows no login, ask the user to run `atlas logi - Network accessline 6
every change (https://atlasgo.io/lint/rules). Lint needs `atlas login`. If `atlas whoami` shows no - Network accessline 11
Rules live in `.rule.hcl` files. The language reference is https://atlasgo.io/hcl/rule. - Network accessline 33
The attributes MySQL objects expose to predicates, and the child objects a predicate or rule can walk into (https://atlasgo.io/hcl/rule#predicate): - Network accessline 34
into (https://atlasgo.io/hcl/rule#predicate): - Network accessline 56
From the docs (https://atlasgo.io/lint/rules#examples). Adapt the closest one before writing a rule - Network accessline 251
Add the rule files to `atlas.hcl`, globally or inside an env (https://atlasgo.io/lint/rules):
skills/atlas-mysql/references/dev-database.md
- Network accessline 3
The dev database is a temporary database Atlas uses to load the desired state, replay migrations, and compute plans (https://atlasgo.io/concepts/dev-database). For MySQL it must match the target's version, - Network accessline 4
compute plans (https://atlasgo.io/concepts/dev-database). For MySQL it must match the target's version, - Network accessline 9
In MySQL, a schema is a database. The URL's path names it, and decides what Atlas covers (https://atlasgo.io/concepts/url#scope): - Network accessline 10
(https://atlasgo.io/concepts/url#scope): - Network accessline 17
- The dev URL takes the target's scope: `docker://mysql/8/dev` for a schema-scoped target, and `docker://mysql/8` for a server-scoped one (https://atlasgo.io/concepts/dev-database). Mixing them - Network accessline 18
`docker://mysql/8` for a server-scoped one (https://atlasgo.io/concepts/dev-database). Mixing them - Network accessline 27
- At schema scope, Atlas cannot change the database's own character set, collation, or comment: see Character Sets and Collations below. - `--include` patterns follow the scope (https://atlasgo.io/faq/manage-single-table). At schema scope - Network accessline 28
Character Sets and Collations below. - `--include` patterns follow the scope (https://atlasgo.io/faq/manage-single-table). At schema scope a pattern names the table, and at server scope it starts with the database: - Network accessline 29
- `--include` patterns follow the scope (https://atlasgo.io/faq/manage-single-table). At schema scope a - Network accessline 44
The `docker://` driver starts a fresh container for each run (https://atlasgo.io/concepts/dev-database): - Network accessline 85
- `docker://` needs a Docker client and a reachable daemon. Without one, such as in CI, run a MySQL service container and give its URL as the dev database, for example `mysql://root:pass@localhost:3306/dev` (https://atlasgo.io/faq/docke - Network accessline 87
`mysql://root:pass@localhost:3306/dev` (https://atlasgo.io/faq/docker-in-docker). - Network accessline 91
`atlas tool docker` creates a named container from a `docker://` URL and prints its connection URL. It also applies the baseline, and cleans the database if it is not empty, so never run it against a container that holds data to keep (https - Network accessline 92
also applies the baseline, and cleans the database if it is not empty, so never run it against a container that holds data to keep (https://atlasgo.io/cli-reference#atlas-tool-docker). The container runs until `atlas tool docker kill --name - Network accessline 93
container that holds data to keep (https://atlasgo.io/cli-reference#atlas-tool-docker). The container - Network accessline 95
(https://atlasgo.io/getting-started#step-4-set-up-your-database): - Network accessline 104
A `docker "mysql"` or `docker "mariadb"` block configures the dev container: `image` (required), `schema`, `baseline`, `init`, `command`, `platform`, `build`, and more (https://atlasgo.io/hcl/config#docker.mysql). The `docker` and `dev` blo - Network accessline 105
`schema`, `baseline`, `init`, `command`, `platform`, `build`, and more (https://atlasgo.io/hcl/config#docker.mysql). The `docker` and `dev` blocks need `atlas login`. If `atlas whoami` shows no login, ask the user to run `atlas login`; a us - Network accessline 106
(https://atlasgo.io/hcl/config#docker.mysql). The `docker` and `dev` blocks need `atlas login`. If - Network accessline 110
`init` runs SQL once the server is up, such as global settings (https://atlasgo.io/concepts/dev-database#docker-init-script): - Network accessline 111
(https://atlasgo.io/concepts/dev-database#docker-init-script): - Network accessline 134
A `dev "mysql"` block connects to an existing database instead of a container (https://atlasgo.io/concepts/dev-database#providing-your-own-dev-database). The database must be empty - Network accessline 135
(https://atlasgo.io/concepts/dev-database#providing-your-own-dev-database). The database must be empty - Network accessline 146
- Declare them on the schema, so the desired state does not depend on the dev server (https://atlasgo.io/atlas-schema/hcl#schema): - Network accessline 147
(https://atlasgo.io/atlas-schema/hcl#schema): - Network accessline 159
`modify schema "<name>" is not allowed when migration plan is scoped to one schema`. Give the dev database the target's settings, or use server scope for both URLs, which lets Atlas change the database's character set and collation (htt - Network accessline 160
database the target's settings, or use server scope for both URLs, which lets Atlas change the database's character set and collation (https://atlasgo.io/faq/modify-schema-error). - A different server character set also causes drift that - Network accessline 161
database's character set and collation (https://atlasgo.io/faq/modify-schema-error). - Network accessline 163
expression defaults, functional indexes, checks, and views differ only by an introducer, such as `_latin1'-'` against `_utf8mb4'-'`. Start the dev server with the target's settings, through `command` (https://atlasgo.io/faq/mysql-charse - Network accessline 165
`command` (https://atlasgo.io/faq/mysql-charset-collation-drift): - Network accessline 229
- RDS and Aurora MySQL with IAM authentication: the URL takes a token from the `aws_rds_token` data source, with `allowCleartextPasswords` (https://atlasgo.io/atlas-schema/projects#data-source-aws_rds_token): - Network accessline 231
(https://atlasgo.io/atlas-schema/projects#data-source-aws_rds_token): - Network accessline 237
IAM users on the dev database are covered below. - Cloud SQL for MySQL: the `gcp_cloudsql_token` data source signs in with IAM (https://atlasgo.io/atlas-schema/projects#data-source-gcp_cloudsql_token): - Network accessline 239
(https://atlasgo.io/atlas-schema/projects#data-source-gcp_cloudsql_token): - Network accessline 245
- Azure Database for MySQL with Entra ID: the user name contains `@`, so build the URL with `urluserinfo` (https://atlasgo.io/atlas-schema/projects#data-source-azure_db_token): - Network accessline 246
`urluserinfo` (https://atlasgo.io/atlas-schema/projects#data-source-azure_db_token): - Network accessline 265
RDS creates IAM users with a plugin that exists only on RDS. A migration directory or a SQL schema with such a statement, `CREATE USER 'app_iam' IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS';`, fails on a stock MySQL image (https://atlas - Network accessline 267
stock MySQL image (https://atlasgo.io/faq/mock-mysql-rds-aws-auth-plugin): - Network accessline 309
- To replay the migrations on a local database, start it from the same image: `atlas tool docker --name my-db --env <env>` reads the env's dev URL and prints the URL of a named container to apply to (https://atlasgo.io/cli-reference#atl - Network accessline 310
[Credential-related source omitted] - Access to secretsline 310
[Credential-related source omitted] - Network accessline 311
container to apply to (https://atlasgo.io/cli-reference#atlas-tool-docker). - Network accessline 317
- MySQL does not require TLS by default. `?tls=true` requires it; `?ssl-ca` sets a custom CA, and `?ssl-cert` with `?ssl-key` a client certificate (https://atlasgo.io/concepts/url#mysql). - Network accessline 318
`?ssl-cert` with `?ssl-key` a client certificate (https://atlasgo.io/concepts/url#mysql). - Network accessline 319
- Percent-encode special characters in passwords, or build the URL with `urlescape` (https://atlasgo.io/faq/url-special-chars). An unescaped password fails with an error such as `Error: mysql: query system variables: dial tcp: lookup ro - Network accessline 320
(https://atlasgo.io/faq/url-special-chars). An unescaped password fails with an error such as - Network accessline 338
`Error 1064 (42000): You have an error in your SQL syntax` near `''`. Set `$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'` first (https://atlasgo.io/faq/schema-encoding). - Network accessline 340
(https://atlasgo.io/faq/schema-encoding). - Network accessline 350
| `server does not allow insecure connections, client must use SSL/TLS` | The server requires TLS | Add `?tls=true` to the URL | | `invalid port ":..." after host`, or `net/url: invalid userinfo` | A special character in the password breaks - Network accessline 351
| `invalid port ":..." after host`, or `net/url: invalid userinfo` | A special character in the password breaks the URL | Percent-encode the password, or build the URL with `urlescape` | | `Error 1049 (42000): Unknown database '<database_na - Network accessline 352
| `Error 1049 (42000): Unknown database '<database_name>'` | The database in the URL does not exist, or its name is not escaped | Check that it exists, and quote or percent-encode the name (https://atlasgo.io/faq/mysql-error-1049-database-n
skills/atlas-mysql/references/hcl.md
- Network accessline 3
The rules of the HCL schema language that matter on MySQL and MariaDB, and the places where HCL behaves differently from SQL. The language: https://atlasgo.io/atlas-schema/hcl. Column types: - Network accessline 4
differently from SQL. The language: https://atlasgo.io/atlas-schema/hcl. Column types: - Network accessline 5
https://atlasgo.io/atlas-schema/hcl-types. Every MySQL block and attribute: https://atlasgo.io/hcl/mysql, - Network accessline 6
and for MariaDB: https://atlasgo.io/hcl/mariadb. - Network accessline 13
- Name MySQL schema files `*.my.hcl`, MariaDB files `*.ma.hcl`, and test files `*.test.hcl`, so editors apply the right schema (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 14
apply the right schema (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 29
- A renamed column or table is planned as a drop and an add, which loses its data, unless the rename is confirmed. In a non-interactive run, such as an agent or CI, declare it with `renamed_from` (https://atlasgo.io/guides/destructive-c - Network accessline 31
(https://atlasgo.io/guides/destructive-change-policy): - Network accessline 41
`-- atlas:renamed_from legacy_email`. - `auto_increment = true` on a column makes it `AUTO_INCREMENT`. On the table, `auto_increment` sets the start value (https://atlasgo.io/atlas-schema/hcl#auto-increment): - Network accessline 43
start value (https://atlasgo.io/atlas-schema/hcl#auto-increment): - Network accessline 64
- `invisible = true` makes a column invisible to `SELECT *` (MySQL 8.0.23 and later). - Generated columns take an expression in `as`, or an `as` block with the storage type. On MySQL, they are `VIRTUAL` by default (https://atlasgo.io/atla - Network accessline 66
are `VIRTUAL` by default (https://atlasgo.io/atlas-schema/hcl#generated-columns): - Network accessline 83
A generated column that is part of a primary key or foreign key must be `STORED` (https://atlasgo.io/guides/mysql/generated-columns). Adding a `STORED` one copies the table - Network accessline 84
(https://atlasgo.io/guides/mysql/generated-columns). Adding a `STORED` one copies the table - Network accessline 90
Write parameters inline: `varchar(255)`, `decimal(5,2)`, `datetime(6)` (https://atlasgo.io/atlas-schema/hcl-types). - Network accessline 91
(https://atlasgo.io/atlas-schema/hcl-types). - Network accessline 125
- A `check` takes its SQL in `expr`. MySQL enforces checks from 8.0.16; earlier versions parse and ignore them (https://atlasgo.io/guides/mysql/check-constraint): - Network accessline 126
ignore them (https://atlasgo.io/guides/mysql/check-constraint): - Network accessline 136
`SPATIAL`, and a full-text index takes `parser`. MySQL indexes have no `where`, `include`, or `ops`. - Functional indexes (MySQL 8.0.13 and later) use `on` blocks with `expr` (https://atlasgo.io/guides/mysql/functional-indexes; more examp - Network accessline 137
- Functional indexes (MySQL 8.0.13 and later) use `on` blocks with `expr` (https://atlasgo.io/guides/mysql/functional-indexes; more examples, such as JSON values: https://atlasgo.io/faq/mysql-functional-indexes): - Network accessline 138
(https://atlasgo.io/guides/mysql/functional-indexes; more examples, such as JSON values: - Network accessline 139
https://atlasgo.io/faq/mysql-functional-indexes): - Network accessline 149
- An index on a `BLOB` or `TEXT` column needs a prefix length, or MySQL fails with `ERROR 1170 (42000): BLOB/TEXT column 'message' used in key specification without a key length` (https://atlasgo.io/guides/mysql/prefix-indexes): - Network accessline 151
(https://atlasgo.io/guides/mysql/prefix-indexes): - Network accessline 162
- `desc = true` in an `on` block builds a descending index part (MySQL 8.0 and later, InnoDB) (https://atlasgo.io/guides/mysql/descending-indexes). - Network accessline 163
(https://atlasgo.io/guides/mysql/descending-indexes). - Network accessline 167
- `engine` sets the storage engine, and takes `InnoDB`, `MyISAM`, other engine names, or a string (https://atlasgo.io/atlas-schema/hcl#table). MyISAM ignores foreign keys (`references/objects.md`). - Network accessline 168
(https://atlasgo.io/atlas-schema/hcl#table). MyISAM ignores foreign keys (`references/objects.md`). - Network accessline 179
`LIST`, `LIST_COLUMNS`, `HASH`, `LINEAR_HASH`, `KEY`, or `LINEAR_KEY`), the key in `by` blocks or `columns`, and each named partition inside it. Bounds are strings, including `"MAXVALUE"` (https://atlasgo.io/atlas-schema/hcl#partitions) - Network accessline 181
(https://atlasgo.io/atlas-schema/hcl#partitions): - Network accessline 214
- A view takes `as`, `depends_on`, `check_option` (`LOCAL` or `CASCADED`), and `security` (https://atlasgo.io/atlas-schema/hcl#view): - Network accessline 215
(https://atlasgo.io/atlas-schema/hcl#view): - Network accessline 233
- A function's arguments are named `arg` blocks, and it sets `deterministic`, `data_access`, and `security`; there is no `lang`. Without `deterministic = true`, the function is `NOT DETERMINISTIC` (https://atlasgo.io/atlas-schema/hcl#fu - Network accessline 235
(https://atlasgo.io/atlas-schema/hcl#function): - Network accessline 254
- A procedure's `arg` takes `mode` (`IN`, `OUT`, or `INOUT`), and `charset` or `collate`. - A trigger has its body in `as`, one timing block (`before` or `after`) with one event, and `follows` or `precedes` to order triggers on the same e - Network accessline 256
or `precedes` to order triggers on the same event (https://atlasgo.io/atlas-schema/hcl#trigger): - Network accessline 279
Rows are declared next to the table in a `data` block, and applied only when the env enables data sync (needs `atlas login`, https://atlasgo.io/guides/mysql/seed-data): - Network accessline 280
(needs `atlas login`, https://atlasgo.io/guides/mysql/seed-data): - Network accessline 296
- `AUTO_INCREMENT` primary-key values are left out of the generated `INSERT` statements unless the env's `data` block sets `preserve_ids = true` (https://atlasgo.io/atlas-schema/hcl#preserving-explicit-ids). Preserving a literal `0` als - Network accessline 297
env's `data` block sets `preserve_ids = true` (https://atlasgo.io/atlas-schema/hcl#preserving-explicit-ids). Preserving a literal `0` also needs `NO_AUTO_VALUE_ON_ZERO` in the session's `sql_mode`. - Network accessline 298
(https://atlasgo.io/atlas-schema/hcl#preserving-explicit-ids). Preserving a literal `0` also needs - Network accessline 303
Input variables work as in any Atlas HCL schema (https://atlasgo.io/atlas-schema/input-variables). A
skills/atlas-mysql/references/migrations.md
- Network accessline 10
Most MySQL checks report a change that makes MySQL copy or rebuild the table, or block writes while it runs (https://atlasgo.io/lint/analyzers): - Network accessline 11
runs (https://atlasgo.io/lint/analyzers): - Network accessline 47
- `MY146`: archive the history first, with `FOR SYSTEM_TIME ALL`. - `MF104`: backfill the `NULL` rows first, and guard the migration with a check (https://atlasgo.io/lint/analyzers#MF104): - Network accessline 49
(https://atlasgo.io/lint/analyzers#MF104): - Network accessline 67
A statement can opt out of named checks with a directive (https://atlasgo.io/versioned/lint#nolint-directive): - Network accessline 68
(https://atlasgo.io/versioned/lint#nolint-directive): - Network accessline 100
back a migration file, or a declarative plan, that fails halfway. The statements before the failure stay applied, and the schema and the revisions table can end up out of step (https://atlasgo.io/versioned/troubleshoot#a-word-on-transaction - Network accessline 102
(https://atlasgo.io/versioned/troubleshoot#a-word-on-transactions). - Network accessline 104
- `--tx-mode` does not change this: `all` cannot make several files atomic, because every DDL statement commits the open transaction. Data statements that run before a DDL statement in the same file are committed with it (https://atlasg - Network accessline 105
commits the open transaction. Data statements that run before a DDL statement in the same file are committed with it (https://atlasgo.io/versioned/apply#transaction-configuration). - Atlas records each statement it applies, so a failed fi - Network accessline 106
committed with it (https://atlasgo.io/versioned/apply#transaction-configuration). - Network accessline 107
- Atlas records each statement it applies, so a failed file shows as partially applied in `atlas migrate status` (https://atlasgo.io/versioned/troubleshoot): - Network accessline 109
(https://atlasgo.io/versioned/troubleshoot): - Network accessline 122
- To undo a partially applied file instead, run `atlas migrate down`. On MySQL it reverts the applied statements one at a time and updates the revisions table after each, so a run that fails midway is re-run to continue (https://atlasgo - Network accessline 123
statements one at a time and updates the revisions table after each, so a run that fails midway is re-run to continue (https://atlasgo.io/versioned/down). - If the connection drops between a statement and its entry in the revisions table, - Network accessline 124
re-run to continue (https://atlasgo.io/versioned/down). - Network accessline 125
- If the connection drops between a statement and its entry in the revisions table, Atlas resumes one statement early. Revert that statement by hand before the next run (https://atlasgo.io/versioned/troubleshoot#connection-loss-failures - Network accessline 126
statement early. Revert that statement by hand before the next run (https://atlasgo.io/versioned/troubleshoot#connection-loss-failures). - When the schema and the revisions table disagree, `atlas migrate set <version>` updates the revisio - Network accessline 127
(https://atlasgo.io/versioned/troubleshoot#connection-loss-failures). - Network accessline 128
- When the schema and the revisions table disagree, `atlas migrate set <version>` updates the revisions table only; it runs and reverts no SQL (https://atlasgo.io/faq/revisions-table-delete-latest). - `schema apply` has the same limit: a - Network accessline 129
table only; it runs and reverts no SQL (https://atlasgo.io/faq/revisions-table-delete-latest). - Network accessline 134
- A stored program contains semicolons, so a file that creates one redefines the statement delimiter, with the MySQL client's `DELIMITER` command or the `-- atlas:delimiter` directive (https://atlasgo.io/versioned/new#custom-statements- - Network accessline 136
(https://atlasgo.io/versioned/new#custom-statements-delimiter): - Network accessline 152
- `migrate apply` and `schema apply` take `GET_LOCK` on MySQL and MariaDB, so two deployments cannot apply at the same time. `--lock-timeout` waits 10 seconds by default; `--skip-lock` skips the lock (https://atlasgo.io/versioned/apply# - Network accessline 153
apply at the same time. `--lock-timeout` waits 10 seconds by default; `--skip-lock` skips the lock (https://atlasgo.io/versioned/apply#controlling-advisory-locks). - The lock is per server, and its name defaults to `atlas_migrate_execute` - Network accessline 154
(https://atlasgo.io/versioned/apply#controlling-advisory-locks). - Network accessline 171
A database that has tables but no revisions table is refused until it gets a baseline: the first migration, recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases): - Network accessline 172
migration, recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases): - Network accessline 181
Then pass its version once: `atlas migrate apply --baseline "20220811074144"`, or set `baseline` in the env's `migration` block. The GitHub action `migrate/apply` has no baseline input; use the env attribute (https://atlasgo.io/faq/migrate- - Network accessline 182
env's `migration` block. The GitHub action `migrate/apply` has no baseline input; use the env attribute (https://atlasgo.io/faq/migrate-baseline-github-action). When `--dev-url` points at a database that already has the revisions table, `mi - Network accessline 183
(https://atlasgo.io/faq/migrate-baseline-github-action). When `--dev-url` points at a database that - Network accessline 184
already has the revisions table, `migrate diff` fails with an error that starts with `connected database is not clean` and ends with `baseline version or allow-dirty is required`: point `--dev-url` at a dev database instead (https://atlasgo - Network accessline 186
`--dev-url` at a dev database instead (https://atlasgo.io/faq/migrate-diff-clean).
skills/atlas-mysql/references/objects.md
- Network accessline 3
How Atlas models MySQL and MariaDB objects, and the cases where its plan differs from what a hand-written migration would do. The full attribute reference is https://atlasgo.io/hcl/mysql, with - Network accessline 4
hand-written migration would do. The full attribute reference is https://atlasgo.io/hcl/mysql, with - Network accessline 5
examples in https://atlasgo.io/atlas-schema/hcl. HCL syntax is in `references/hcl.md`, and the lint - Network accessline 10
Tables and columns, indexes, foreign keys, check and unique constraints, and comments work without a login. Partitions, views, full-text indexes, triggers, stored procedures, and functions need `atlas login`, and so do users, roles, and gra - Network accessline 11
login. Partitions, views, full-text indexes, triggers, stored procedures, and functions need `atlas login`, and so do users, roles, and grants (https://atlasgo.io/features). On MariaDB, temporal (system-versioned) tables need it too. - Network accessline 12
`atlas login`, and so do users, roles, and grants (https://atlasgo.io/features). On MariaDB, temporal - Network accessline 43
`orders_ibfk_1`. The dev database can pick a different name than the target, and the plan then renames the constraint. Skip those renames with the `diff` policy (https://atlasgo.io/faq/skip-constraint-rename): - Network accessline 45
(https://atlasgo.io/faq/skip-constraint-rename): - Network accessline 101
indexes, checks, and views. A functional index on `upper(concat('c', c))` inspects as ``upper(concat(_utf8mb4'c',`c`))``, so a plan made without a dev database drops and re-adds the index on every run (https://atlasgo.io/concepts/dev-databa - Network accessline 102
``upper(concat(_utf8mb4'c',`c`))``, so a plan made without a dev database drops and re-adds the index on every run (https://atlasgo.io/concepts/dev-database). Plan with a dev URL, on a server with the target's character set (`references/dev - Network accessline 103
on every run (https://atlasgo.io/concepts/dev-database). Plan with a dev URL, on a server with the - Network accessline 122
MariaDB has its own driver, with `maria://` URLs, `docker://maria/...` dev URLs, `docker "mariadb"` blocks, and `.ma.hcl` files (https://atlasgo.io/hcl/mariadb). Run a MariaDB dev database for a MariaDB - Network accessline 123
blocks, and `.ma.hcl` files (https://atlasgo.io/hcl/mariadb). Run a MariaDB dev database for a MariaDB
skills/atlas-mysql/references/security.md
- Network accessline 3
Users, roles, GRANT and REVOKE, and passwords. The guides: https://atlasgo.io/guides/mysql/security-declarative and - Network accessline 4
https://atlasgo.io/guides/mysql/security-declarative and - Network accessline 5
https://atlasgo.io/guides/mysql/security-versioned. - Network accessline 10
login. If `atlas whoami` shows no login, ask the user to run `atlas login`; a user without an account can start a free trial with it. Enable them in the env's `schema` block (https://atlasgo.io/guides/mysql/security-declarative): - Network accessline 12
(https://atlasgo.io/guides/mysql/security-declarative): - Network accessline 29
without a database in the path, such as `docker://mysql/8` for the dev database. - With `roles = true`, the desired state is authoritative over every user and role Atlas inspects on the server (https://atlasgo.io/atlas-schema/hcl#external - Network accessline 30
- With `roles = true`, the desired state is authoritative over every user and role Atlas inspects on the server (https://atlasgo.io/atlas-schema/hcl#external-roles-and-users). MySQL has no `external` attribute, which PostgreSQL uses to - Network accessline 31
the server (https://atlasgo.io/atlas-schema/hcl#external-roles-and-users). MySQL has no `external` - Network accessline 34
the first plan for other accounts. To keep drops out of every plan, set `drop_user = true` and `drop_role = true` in the env's `diff { skip { ... } }` policy (https://atlasgo.io/versioned/diff#diff-policy). - Network accessline 35
`drop_role = true` in the env's `diff { skip { ... } }` policy (https://atlasgo.io/versioned/diff#diff-policy). - Passwords come from input variables, never from literals in the file. The declarative workflow needs - Network accessline 36
(https://atlasgo.io/versioned/diff#diff-policy). - Network accessline 41
`IDENTIFIED WITH caching_sha2_password`. Set the passwords from a template directory, with the `-- atlas:sensitive` directive so they are never logged (https://atlasgo.io/guides/mysql/security-versioned): - Network accessline 43
(https://atlasgo.io/guides/mysql/security-versioned): - Network accessline 84
- Account limits: `max_user_connections` (simultaneous), `max_connections`, `max_questions`, and `max_updates` (per hour), plus `password_lifetime`, `password_expired`, and `comment` (https://atlasgo.io/hcl/mysql). - Network accessline 85
`max_updates` (per hour), plus `password_lifetime`, `password_expired`, and `comment` (https://atlasgo.io/hcl/mysql). - An RDS IAM user sets `auth_plugin` and no password. It is the HCL form of - Network accessline 86
(https://atlasgo.io/hcl/mysql). - Network accessline 87
- An RDS IAM user sets `auth_plugin` and no password. It is the HCL form of `CREATE USER 'app_iam' IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS';` (https://atlasgo.io/atlas-schema/hcl#external-roles-and-users): - Network accessline 89
(https://atlasgo.io/atlas-schema/hcl#external-roles-and-users): - Network accessline 104
single column. `to` takes a role name as a string, a role reference, or a user reference such as `user["api_user@%"]`. Routines take `EXECUTE`. `for_each` expands one block into a grant per object (https://atlasgo.io/guides/mysql/security-d - Network accessline 106
(https://atlasgo.io/guides/mysql/security-declarative):
skills/atlas-mysql/references/testing.md
- Network accessline 32
Migration tests are listed the same way, under `test { migrate { src = [...] } }`. Without a project file, pass the dev URL and the directory (https://atlasgo.io/cli-reference#atlas-migrate-test): - Network accessline 33
file, pass the dev URL and the directory (https://atlasgo.io/cli-reference#atlas-migrate-test): - Network accessline 55
- Functions and procedures: normal inputs, edge cases, and error paths with `catch` (https://atlasgo.io/guides/testing/functions, https://atlasgo.io/guides/testing/procedures). - Network accessline 56
(https://atlasgo.io/guides/testing/functions, https://atlasgo.io/guides/testing/procedures). - Network accessline 57
- Triggers: seed rows, change them, and check the side effects (https://atlasgo.io/guides/testing/triggers). - Check constraints: `catch` a row that breaks the check. MySQL 8.0.15 and earlier ignore checks, so the - Network accessline 58
(https://atlasgo.io/guides/testing/triggers). - Network accessline 60
test also shows whether the dev database enforces them. - Generated columns: insert rows and compare the computed values. - Views: seed rows and compare the view's output (https://atlasgo.io/guides/testing/views). - Network accessline 62
- Views: seed rows and compare the view's output (https://atlasgo.io/guides/testing/views). - Network accessline 66
Each case starts from an empty database. Migrate to the version before the change, seed rows, migrate to the version under test, and check the data (https://atlasgo.io/guides/testing/data-migrations). - Network accessline 67
to the version under test, and check the data (https://atlasgo.io/guides/testing/data-migrations). - Network accessline 80
In GitHub Actions, the `migrate/test` action runs the tests against a MySQL service container (https://atlasgo.io/integrations/github-actions): - Network accessline 81
(https://atlasgo.io/integrations/github-actions):
skills/atlas-onboard/SKILL.md
- Network accessline 10
Takes a repository from no Atlas setup to production in six stages, the same path as the Evaluating Atlas guide (https://atlasgo.io/guides/evaluation/intro). Each stage ends on a check the agent runs and - Network accessline 11
Atlas guide (https://atlasgo.io/guides/evaluation/intro). Each stage ends on a check the agent runs and - Network accessline 17
This skill is `SKILL.md` plus seven files, each served at `https://atlasgo.io/skills/atlas-onboard/<path>`: - Network accessline 24
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 25
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 33
the user install it: `claude plugin update atlas@ariga` in Claude Code, or the `npx skills add ariga/atlas -a <agent> -y` command again in other agents. Until then, read it from https://atlasgo.io/skills/atlas-postgres/SKILL.md or https://a - Network accessline 35
https://atlasgo.io/skills/atlas-postgres/SKILL.md or https://atlasgo.io/skills/atlas-mysql/SKILL.md. - Network accessline 37
When stage 4 deploys with the Atlas Kubernetes Operator (4.6, 4.7), also read the `atlas-operator` skill (`../atlas-operator/SKILL.md`). Install and read it the same way, from https://atlasgo.io/skills/atlas-operator/SKILL.md when it is mis - Network accessline 38
skill (`../atlas-operator/SKILL.md`). Install and read it the same way, from https://atlasgo.io/skills/atlas-operator/SKILL.md when it is missing. It covers the operator's install, tokens, resource policies, and troubleshooting. - Network accessline 39
https://atlasgo.io/skills/atlas-operator/SKILL.md when it is missing. It covers the operator's install, - Network accessline 42
For stage 3 and the CI deploy job of stage 4, also read the `atlas-action` skill (`../atlas-action/SKILL.md`). Install and read it the same way, from https://atlasgo.io/skills/atlas-action/SKILL.md when it is missing. It covers the Atlas CI - Network accessline 43
(`../atlas-action/SKILL.md`). Install and read it the same way, from https://atlasgo.io/skills/atlas-action/SKILL.md when it is missing. It covers the Atlas CI steps on each platform, their tokens and permissions, and the fix for each faile - Network accessline 44
https://atlasgo.io/skills/atlas-action/SKILL.md when it is missing. It covers the Atlas CI steps on each - Network accessline 181
`atlas schema apply` plan each change against the target database, and the plan is reviewed. - Dev database: a temporary, isolated database Atlas uses as a sandbox to plan and check changes, usually an ephemeral Docker container (https:// - Network accessline 182
- Dev database: a temporary, isolated database Atlas uses as a sandbox to plan and check changes, usually an ephemeral Docker container (https://atlasgo.io/concepts/dev-database#introduction). It never holds data and is not the applicat - Network accessline 183
an ephemeral Docker container (https://atlasgo.io/concepts/dev-database#introduction). It - Network accessline 235
`skills-lock.json`. If the install already put them there, commit them unchanged. 3. Next steps: offer the practices from the guides that fit what the scan found, one at a time. The full list is https://atlasgo.io/guides/evaluation/advan - Network accessline 237
full list is https://atlasgo.io/guides/evaluation/advanced-topics. - Network accessline 239
| Practice | Guide | |----------|-------| | Production applies only reviewed and approved migrations | https://atlasgo.io/guides/reviewed-approved-migrations | - Network accessline 240
|----------|-------| | Production applies only reviewed and approved migrations | https://atlasgo.io/guides/reviewed-approved-migrations | | Block accidental drops in CI, with a deprecation workflow | https://atlasgo.io/guides/destruc - Network accessline 241
| Production applies only reviewed and approved migrations | https://atlasgo.io/guides/reviewed-approved-migrations | - Network accessline 242
| Block accidental drops in CI, with a deprecation workflow | https://atlasgo.io/guides/destructive-change-policy | - Network accessline 243
| Detect drift at deploy time and between deployments | https://atlasgo.io/guides/drift-detection | - Network accessline 244
| Test functions, views, triggers, and data migrations | https://atlasgo.io/testing/schema | - Network accessline 245
| Lock-safe `NOT NULL` changes on PostgreSQL | https://atlasgo.io/guides/lock-safe-not-null | - Network accessline 246
| Teams change only the objects they own | https://atlasgo.io/guides/schema-ownership | - Network accessline 247
| Roles, permissions, and row-level security as code | https://atlasgo.io/guides/security-as-code | - Network accessline 248
| Staged rollouts for database-per-tenant | https://atlasgo.io/guides/database-per-tenant/rollout | - Network accessline 255
| Stage | Read | |-------|------| | 0 | [Connect](https://atlasgo.io/guides/evaluation/connect), [Choose a workflow](https://atlasgo.io/guides/evaluation/project-structure#choose-a-workflow), [Declarative vs versioned](https://atlasgo.io/co - Network accessline 256
|-------|------| | 0 | [Connect](https://atlasgo.io/guides/evaluation/connect), [Choose a workflow](https://atlasgo.io/guides/evaluation/project-structure#choose-a-workflow), [Declarative vs versioned](https://atlasgo.io/concepts/declarativ - Network accessline 257
| 0 | [Connect](https://atlasgo.io/guides/evaluation/connect), [Choose a workflow](https://atlasgo.io/guides/evaluation/project-structure#choose-a-workflow), [Declarative vs versioned](https://atlasgo.io/concepts/declarative-vs-versioned) | - Network accessline 258
| 1 | [Verify Atlas and export your schema](https://atlasgo.io/guides/evaluation/verify-atlas), [Schema as code](https://atlasgo.io/guides/evaluation/schema-as-code), [Dev database](https://atlasgo.io/concepts/dev-database), [ORM guides](ht - Network accessline 259
| 2 | [Set up your migration workflow](https://atlasgo.io/guides/evaluation/setup-migrations), [Schema change workflow](https://atlasgo.io/guides/evaluation/developer-workflow), [Migration linting](https://atlasgo.io/versioned/lint) | - Network accessline 260
| 3 | [Database CI/CD](https://atlasgo.io/guides/evaluation/ci-cd), [Versioned CI/CD](https://atlasgo.io/versioned/setup-cicd), [Declarative CI/CD](https://atlasgo.io/declarative/setup-cicd) | - Network accessline 261
| 4 | [Deployments in Atlas Cloud](https://atlasgo.io/cloud/deployment), [Deployment guides](https://atlasgo.io/guides/deploying/intro), [Existing databases](https://atlasgo.io/versioned/apply#existing-databases) | - Network accessline 262
| 5 | [Environment promotion](https://atlasgo.io/guides/environment-promotion), [Declarative environment promotion](https://atlasgo.io/guides/environment-promotion-declarative) | - Network accessline 272
first segment names the schema: `public.audit_*`, `public.*[type=function]`, or `internal` to skip a whole schema. - The dev database must match the target's engine version and scope (https://atlasgo.io/concepts/dev-database). - Network accessline 273
whole schema. - The dev database must match the target's engine version and scope (https://atlasgo.io/concepts/dev-database). The wrong scope fails with `modify schema "<name>" is not allowed when migration plan is scoped to one schema`, - Network accessline 274
- The dev database must match the target's engine version and scope (https://atlasgo.io/concepts/dev-database).
skills/atlas-onboard/references/stage-0-plan.md
- Dangerous shell operationline 30
If the command is not found, ask before installing the CLI: `curl -sSf https://atlasgo.sh | sh` on macOS - Network accessline 30
If the command is not found, ask before installing the CLI: `curl -sSf https://atlasgo.sh | sh` on macOS - Network accessline 31
and Linux, or `brew install ariga/tap/atlas`. Other methods are at https://atlasgo.io/getting-started. - Network accessline 66
The URL's scope decides what Atlas sees (https://atlasgo.io/concepts/url#scope): - Network accessline 86
The table count is often enough. When the database also has views, functions, triggers, or other objects, count them by type: export the database to one file per object in a temporary directory, the same export stage 1 uses (https://atlasgo - Network accessline 88
same export stage 1 uses (https://atlasgo.io/inspect/database-to-code), and count the files. - Dangerous shell operationline 94
rm -rf "$inv" - Network accessline 122
| Services share one schema | One per service, split by table | `exclude` on the envs: `["audit_*"]` with a schema-scoped URL, `["billing.audit_*"]` with a database-scoped one | | Many databases share one schema (tenants) | One for all of t - Network accessline 124
| Teams share a unit but must not change each other's tables | One, plus a lint rule | `lint { ownership "github" { ... } }` (https://atlasgo.io/guides/schema-ownership) | - Network accessline 126
Schema-scoped units can use objects in a schema no unit owns, such as extensions in `public`. Keep those objects out of every unit, and create them in each unit's dev database with a `docker` block `baseline` (stage 1, and https://atlasgo.i - Network accessline 127
objects out of every unit, and create them in each unit's dev database with a `docker` block `baseline` (stage 1, and https://atlasgo.io/concepts/dev-database#baseline-schema). New databases need them before the first unit deploys. Never pu - Network accessline 128
(stage 1, and https://atlasgo.io/concepts/dev-database#baseline-schema). New databases need them before - Network accessline 146
In both workflows, developers define the desired state of the schema as code. The difference is how changes reach a database (https://atlasgo.io/guides/evaluation/project-structure#choose-a-workflow): - Network accessline 147
changes reach a database (https://atlasgo.io/guides/evaluation/project-structure#choose-a-workflow): - Network accessline 156
Propose declarative when the project already applies a desired state without migration files, or when the user asks for it. Ask in one question that says what changes for developers, and link https://atlasgo.io/concepts/declarative-vs-versi - Network accessline 158
https://atlasgo.io/concepts/declarative-vs-versioned. Record `workflow` as `versioned` or `declarative`.
skills/atlas-onboard/references/stage-1-schema.md
- Network accessline 3
Goal: the unit's desired state lives in code and matches the database. This stage is the same for both workflows. It writes `atlas.hcl` and the desired state, and changes nothing in a database. The steps follow https://atlasgo.io/guides/eva - Network accessline 4
workflows. It writes `atlas.hcl` and the desired state, and changes nothing in a database. The steps follow https://atlasgo.io/guides/evaluation/verify-atlas and https://atlasgo.io/guides/evaluation/schema-as-code. - Network accessline 5
follow https://atlasgo.io/guides/evaluation/verify-atlas and - Network accessline 6
https://atlasgo.io/guides/evaluation/schema-as-code. - Network accessline 56
The dev database is a temporary, isolated database that Atlas uses as a sandbox: it loads the desired state and the migrations there, because every expression, default, and statement must be accepted by a real database of the same type and - Network accessline 57
state and the migrations there, because every expression, default, and statement must be accepted by a real database of the same type and version (https://atlasgo.io/concepts/dev-database#introduction). The `docker://` driver starts it as a - Network accessline 58
real database of the same type and version (https://atlasgo.io/concepts/dev-database#introduction). The - Network accessline 64
Docker dev URLs from https://atlasgo.io/concepts/dev-database#introduction. The dev database must use the - Network accessline 91
schema there until they exist. Create them in the `baseline` of a `docker` block, which runs when the container starts, and point the envs' `dev` at it (https://atlasgo.io/concepts/dev-database#baseline-schema): - Network accessline 93
(https://atlasgo.io/concepts/dev-database#baseline-schema): - Network accessline 112
pgvector, use an image that ships them (`postgis/postgis`, `pgvector/pgvector`). Without Docker, a `dev` block points at an empty database of your own and takes the same `baseline` (https://atlasgo.io/concepts/dev-database#providing-your-ow - Network accessline 114
(https://atlasgo.io/concepts/dev-database#providing-your-own-dev-database). - Network accessline 123
[Credential-related source omitted] - Network accessline 124
token and builds the URL in `atlas.hcl`, so no password is stored (https://atlasgo.io/atlas-schema/projects#data-sources). Each method needs the database user mapped to the identity first; the linked sections list the steps. - Network accessline 125
(https://atlasgo.io/atlas-schema/projects#data-sources). Each method needs the database user mapped to - Network accessline 128
AWS RDS with IAM authentication (https://atlasgo.io/atlas-schema/projects#data-source-aws_rds_token): - Network accessline 129
(https://atlasgo.io/atlas-schema/projects#data-source-aws_rds_token): - Network accessline 149
Azure Database for PostgreSQL or MySQL with Microsoft Entra ID, using the credentials from `az login`, a managed identity, or a workload identity (https://atlasgo.io/atlas-schema/projects#data-source-azure_db_token): - Network accessline 151
(https://atlasgo.io/atlas-schema/projects#data-source-azure_db_token): - Network accessline 165
Azure SQL (SQL Server) with Microsoft Entra ID: the `fedauth` parameter of the URL picks the sign-in method (https://atlasgo.io/concepts/url, SQL Server tab): - Network accessline 166
method (https://atlasgo.io/concepts/url, SQL Server tab): - Network accessline 172
GCP Cloud SQL with IAM authentication. MySQL needs `allowCleartextPasswords` and `tls` as shown; PostgreSQL uses `sslmode=require` (https://atlasgo.io/atlas-schema/projects#data-source-gcp_cloudsql_token): - Network accessline 173
PostgreSQL uses `sslmode=require` (https://atlasgo.io/atlas-schema/projects#data-source-gcp_cloudsql_token): - Network accessline 183
A password kept in a secret store, such as AWS Secrets Manager or GCP Secret Manager (https://atlasgo.io/atlas-schema/projects#data-source-runtimevar): - Network accessline 184
(https://atlasgo.io/atlas-schema/projects#data-source-runtimevar): - Network accessline 198
For units without an ORM, the desired state is the database exported to code. Ask which language the team will edit (decision point): SQL, which most teams already know, or HCL, which has editor support and no ordering constraints (https:// - Network accessline 199
team will edit (decision point): SQL, which most teams already know, or HCL, which has editor support and no ordering constraints (https://atlasgo.io/guides/evaluation/schema-as-code#what-should-you-choose). Default to SQL. - Network accessline 200
no ordering constraints (https://atlasgo.io/guides/evaluation/schema-as-code#what-should-you-choose). - Network accessline 211
Full reference: https://atlasgo.io/inspect/database-to-code. - Network accessline 215
For units with an ORM, the desired state is the models. Add the `data "external_schema"` loader from the ORM's guide (https://atlasgo.io/orms, `atlas/references/schema-sources.md`), and set `local.src` to - Network accessline 216
the ORM's guide (https://atlasgo.io/orms, `atlas/references/schema-sources.md`), and set `local.src` to - Network accessline 220
Objects the ORM cannot express (views, triggers, functions, row-level security) go in a SQL or HCL file next to the models, combined with them through `composite_schema` (https://atlasgo.io/guides/evaluation/schema-as-code#must-you-choose-o - Network accessline 222
(https://atlasgo.io/guides/evaluation/schema-as-code#must-you-choose-only-one). - Network accessline 250
Tell the user that the desired state now lives in the repository, and that both workflows start from it. Link https://atlasgo.io/guides/evaluation/schema-as-code. - Network accessline 251
Link https://atlasgo.io/guides/evaluation/schema-as-code.
skills/atlas-onboard/references/stage-2-workflow.md
- Network accessline 3
Goal: the unit's workflow is set up, the user has seen a change go through it, and the project PR is open. Continue on the stage 1 branch. The steps follow https://atlasgo.io/guides/evaluation/setup-migrations and - Network accessline 4
open. Continue on the stage 1 branch. The steps follow https://atlasgo.io/guides/evaluation/setup-migrations and https://atlasgo.io/guides/evaluation/developer-workflow. - Network accessline 5
https://atlasgo.io/guides/evaluation/setup-migrations and - Network accessline 6
https://atlasgo.io/guides/evaluation/developer-workflow. - Network accessline 11
default. If the team wants to manage them as code, enable them with a `mode` block in the env's `schema` block before the baseline, and repeat the stage 1 export so the desired state includes them (https://atlasgo.io/atlas-schema/hcl#enabli - Network accessline 12
block before the baseline, and repeat the stage 1 export so the desired state includes them (https://atlasgo.io/atlas-schema/hcl#enabling-roles-and-permissions, https://atlasgo.io/guides/security-as-code). - Network accessline 13
(https://atlasgo.io/atlas-schema/hcl#enabling-roles-and-permissions, - Network accessline 14
https://atlasgo.io/guides/security-as-code). - Network accessline 20
The exported schema also refers to roles that exist on the target but not in a new dev database, such as the provider roles of a managed database. Create them in the dev database's `baseline`, so Atlas can load the schema there (https://atl - Network accessline 21
as the provider roles of a managed database. Create them in the dev database's `baseline`, so Atlas can load the schema there (https://atlasgo.io/concepts/dev-database#baseline-schema, and for managed PostgreSQL, https://atlasgo.io/guides/p - Network accessline 22
load the schema there (https://atlasgo.io/concepts/dev-database#baseline-schema, and for managed - Network accessline 23
PostgreSQL, https://atlasgo.io/guides/postgres/security-declarative#dev-database-for-cloud-environments): - Network accessline 54
instance, its roles would collide with the live ones. - Declarative units that manage passwords also set `sensitive = ALLOW` (https://atlasgo.io/guides/postgres/security-declarative). - Network accessline 55
- Declarative units that manage passwords also set `sensitive = ALLOW` (https://atlasgo.io/guides/postgres/security-declarative). - Use the same `mode` block and dev database in every env of the unit, so local development, CI, and - Network accessline 56
(https://atlasgo.io/guides/postgres/security-declarative). - Network accessline 75
Generate the baseline, the first migration: it captures the schema as it exists today, and every later migration is a diff on top of it (https://atlasgo.io/versioned/import#generate-a-baseline-migration). - Network accessline 76
migration is a diff on top of it (https://atlasgo.io/versioned/import#generate-a-baseline-migration). - Network accessline 101
How a database starts depends on whether it already has the schema (https://atlasgo.io/versioned/import#apply-the-baseline-migration): - Network accessline 102
(https://atlasgo.io/versioned/import#apply-the-baseline-migration): - Access to secretsline 118
[Credential-related source omitted] - Dangerous shell operationline 140
rm -rf "$tmp" - Network accessline 143
Lint exits 1 with `DS103` (dropping a column) and `BC104` (clients using it will fail), plus a suggested fix. Explain each finding in one sentence with its code (https://atlasgo.io/lint/analyzers): CI stops a - Network accessline 144
fix. Explain each finding in one sentence with its code (https://atlasgo.io/lint/analyzers): CI stops a - Network accessline 149
The baseline is the default. Import a golang-migrate, goose, Flyway, Liquibase, or dbmate history instead only when the user asks to keep it, and only when it covers exactly this unit's schemas (https://atlasgo.io/versioned/import): - Network accessline 151
(https://atlasgo.io/versioned/import): - Network accessline 180
Every schema change from now on is: edit the desired state, then `atlas schema apply --env local` against the local database. Atlas prints the planned statements, runs the lint analyzers on them, and asks for approval (https://atlasgo.io/gu - Network accessline 181
against the local database. Atlas prints the planned statements, runs the lint analyzers on them, and asks for approval (https://atlasgo.io/guides/evaluation/developer-workflow). `--dry-run` shows the plan without applying it. On shared dat - Network accessline 182
asks for approval (https://atlasgo.io/guides/evaluation/developer-workflow). `--dry-run` shows the plan - Network accessline 205
Tell the user how a schema change works from now on, in their workflow's terms. Link https://atlasgo.io/guides/evaluation/developer-workflow. - Network accessline 206
https://atlasgo.io/guides/evaluation/developer-workflow.
skills/atlas-onboard/references/stage-3-ci.md
- Network accessline 12
| CI system | Versioned | Declarative | |-----------|-----------|-------------| | GitHub Actions | https://atlasgo.io/guides/ci-platforms/github-versioned | https://atlasgo.io/guides/ci-platforms/github-declarative | - Network accessline 13
|-----------|-----------|-------------| | GitHub Actions | https://atlasgo.io/guides/ci-platforms/github-versioned | https://atlasgo.io/guides/ci-platforms/github-declarative | | GitLab CI | https://atlasgo.io/guides/ci-platforms/gitlab-ver - Network accessline 14
| GitHub Actions | https://atlasgo.io/guides/ci-platforms/github-versioned | https://atlasgo.io/guides/ci-platforms/github-declarative | - Network accessline 15
| GitLab CI | https://atlasgo.io/guides/ci-platforms/gitlab-versioned | https://atlasgo.io/guides/ci-platforms/gitlab-declarative | - Network accessline 16
| Bitbucket Pipelines | https://atlasgo.io/guides/ci-platforms/bitbucket-versioned | https://atlasgo.io/guides/ci-platforms/bitbucket-declarative | - Network accessline 17
| CircleCI | https://atlasgo.io/guides/ci-platforms/circleci-versioned | https://atlasgo.io/guides/ci-platforms/circleci-declarative | - Network accessline 18
| Azure DevOps, code on GitHub | https://atlasgo.io/guides/ci-platforms/azure-devops-github#versioned-migrations-workflow | https://atlasgo.io/guides/ci-platforms/azure-devops-github#declarative-workflow | - Network accessline 19
| Azure DevOps, code in Azure Repos | https://atlasgo.io/guides/ci-platforms/azure-devops-repos#versioned-migrations-workflow | https://atlasgo.io/guides/ci-platforms/azure-devops-repos#declarative-workflow | - Network accessline 21
All the CI guides are listed at https://atlasgo.io/guides. - Network accessline 25
- CI system: from the scan, with its guide from the table above. Anything else, such as Jenkins or TeamCity, installs the CLI (`curl -sSf https://atlasgo.sh | sh`), runs - Dangerous shell operationline 26
TeamCity, installs the CLI (`curl -sSf https://atlasgo.sh | sh`), runs - Network accessline 26
TeamCity, installs the CLI (`curl -sSf https://atlasgo.sh | sh`), runs - Access to secretsline 27
[Credential-related source omitted] - Network accessline 49
If the repository already has an Atlas token secret under another name, reuse it and write that name into the workflows. When the registry repo has protected flows enabled, the bot needs the Writer role on it (https://atlasgo.io/cloud/roles - Network accessline 51
on it (https://atlasgo.io/cloud/roles-and-permissions). - Access to secretsline 60
[Credential-related source omitted] - Network accessline 128
generation job) installs the ORM's runtime and its Atlas provider before Atlas runs, as the ORM's guide shows. For Django: `actions/setup-python`, then `pip install django atlas-provider-django` (https://atlasgo.io/guides/orms/django/ - Network accessline 129
guide shows. For Django: `actions/setup-python`, then `pip install django atlas-provider-django` (https://atlasgo.io/guides/orms/django/linting). 4. Keep test steps only for tests that exist: `schema/test` when the unit has schema tests, - Network accessline 130
(https://atlasgo.io/guides/orms/django/linting). - Network accessline 145
container attached to the Atlas jobs only, with the target's version and scope, or at an empty database the runner can reach (`dev = getenv("DEV_URL")` from a CI secret, https://atlasgo.io/concepts/dev-database#providing-your-own-dev-databa - Network accessline 146
the runner can reach (`dev = getenv("DEV_URL")` from a CI secret, https://atlasgo.io/concepts/dev-database#providing-your-own-dev-database). Never add services, images, or variables at the top level of a pipeline that other jobs share. - Network accessline 147
https://atlasgo.io/concepts/dev-database#providing-your-own-dev-database). Never add services, images, or - Network accessline 172
Tell the user what CI now does on every PR and every merge. Link https://atlasgo.io/versioned/setup-cicd - Network accessline 173
(or https://atlasgo.io/declarative/setup-cicd).
skills/atlas-onboard/references/stage-4-deploy.md
- Network accessline 143
phase, Fly.io's `release_command`, an ECS task before the service update), run `atlas migrate apply --env staging` there instead of the old tool, not in the container entrypoint (https://atlasgo.io/guides/deploying/fly-io). The image needs - Network accessline 144
`atlas migrate apply --env staging` there instead of the old tool, not in the container entrypoint (https://atlasgo.io/guides/deploying/fly-io). The image needs the `atlas` binary and the unit's `atlas.hcl`. The user sets `ATLAS_TOKEN` and - Network accessline 145
(https://atlasgo.io/guides/deploying/fly-io). The image needs the `atlas` binary and the unit's - Network accessline 151
Read the `atlas-operator` skill first (Requires): it covers the operator's install, the bot token Secret, the resource policies, and the errors a first rollout hits. The Operator must be installed in the cluster (https://atlasgo.io/integrat - Network accessline 152
bot token Secret, the resource policies, and the errors a first rollout hits. The Operator must be installed in the cluster (https://atlasgo.io/integrations/kubernetes/install). That is usually the platform team's change; ask before adding - Network accessline 153
installed in the cluster (https://atlasgo.io/integrations/kubernetes/install). - Network accessline 183
- Health: Argo CD 2.10 and later ship health checks for `AtlasMigration` and `AtlasSchema`. Add the custom check from https://atlasgo.io/guides/deploying/k8s-argo only on older versions. A failed - Network accessline 184
custom check from https://atlasgo.io/guides/deploying/k8s-argo only on older versions. A failed - Network accessline 193
- Declarative units use `AtlasSchema` with `schema.url: atlas://<repo>?tag=<tag>` and a review policy (`policy.lint.review: ERROR`, `WARNING`, or `ALWAYS`). A plan that needs review waits for a human to approve it in Atlas Cloud (https: - Network accessline 194
(`policy.lint.review: ERROR`, `WARNING`, or `ALWAYS`). A plan that needs review waits for a human to approve it in Atlas Cloud (https://atlasgo.io/integrations/kubernetes/declarative). - Optional drift monitoring: an `AtlasDriftCheck` nex - Network accessline 195
approve it in Atlas Cloud (https://atlasgo.io/integrations/kubernetes/declarative). - Network accessline 196
- Optional drift monitoring: an `AtlasDriftCheck` next to the `AtlasMigration`, with `onDrift: Report` first. Registry versions pushed with a tag need a dev database on the `AtlasMigration` (`devURLFrom`) for the check to work (https:// - Network accessline 198
for the check to work (https://atlasgo.io/integrations/kubernetes/versioned). - Network accessline 202
The same Atlas resources as 4.6, ordered through Kustomizations instead of sync waves: the Kustomization that holds the Atlas resource lists it under `healthChecks`, and the application's Kustomization lists that one under `dependsOn` (http - Network accessline 204
Kustomization lists that one under `dependsOn` (https://atlasgo.io/guides/deploying/k8s-flux). - Network accessline 209
Terraform plans. Use a provider `cloud` block plus `data "atlas_migration"` and `resource "atlas_migration"` reading `atlas://<repo>` (https://atlasgo.io/guides/terraform/opentaco), in the staging root module or workspace only. The - Network accessline 210
`resource "atlas_migration"` reading `atlas://<repo>` (https://atlasgo.io/guides/terraform/opentaco), in the staging root module or workspace only. The Terraform runner then needs network access to the database and the bot token. Pin the `a - Network accessline 211
(https://atlasgo.io/guides/terraform/opentaco), in the staging root module or workspace only. The - Network accessline 238
Tell the user what runs on each merge now, and where to see it (https://atlasgo.io/cloud/deployment).
skills/atlas-onboard/references/stage-5-promote.md
- Network accessline 3
Goal: production applies only the version already deployed to staging. This is environment promotion, and it builds on the earlier stages (https://atlasgo.io/guides/environment-promotion): - Network accessline 4
and it builds on the earlier stages (https://atlasgo.io/guides/environment-promotion): - Network accessline 40
To gate instead, keep `dir` unpinned and add the guide's `check "migrate_apply"` with a `deny` rule on `self.planned_migration.target_version > local.staging_version` (https://atlasgo.io/guides/environment-promotion#example-pre-execution-ch - Network accessline 42
(https://atlasgo.io/guides/environment-promotion#example-pre-execution-check-for-promotion). - Network accessline 44
Declarative units pin the desired state to staging's version (https://atlasgo.io/guides/environment-promotion-declarative): - Network accessline 45
(https://atlasgo.io/guides/environment-promotion-declarative): - Network accessline 93
Tell the user how a schema change reaches production now: pull request, CI, merge, staging, promotion. Link https://atlasgo.io/guides/environment-promotion (or the declarative guide). - Network accessline 94
Link https://atlasgo.io/guides/environment-promotion (or the declarative guide).
skills/atlas-operator/SKILL.md
- Network accessline 8
The Atlas Kubernetes Operator applies schema changes from Kubernetes resources (https://atlasgo.io/integrations/kubernetes). This skill covers installing it, writing its resources, - Network accessline 8
The Atlas Kubernetes Operator applies schema changes from Kubernetes resources (https://atlasgo.io/integrations/kubernetes). This skill covers installing it, writing its resources, - Network accessline 9
(https://atlasgo.io/integrations/kubernetes). This skill covers installing it, writing its resources, - Network accessline 9
(https://atlasgo.io/integrations/kubernetes). This skill covers installing it, writing its resources, - Network accessline 16
This skill is `SKILL.md` plus eleven reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-operator/references/<name>`. Read a reference when the task needs it: - Network accessline 16
This skill is `SKILL.md` plus eleven reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-operator/references/<name>`. Read a reference when the task needs it: - Network accessline 17
`https://atlasgo.io/skills/atlas-operator/references/<name>`. Read a reference when the task needs it: - Network accessline 17
`https://atlasgo.io/skills/atlas-operator/references/<name>`. Read a reference when the task needs it: - Network accessline 35
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 35
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 36
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 36
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 154
- Operator overview: https://atlasgo.io/integrations/kubernetes - Network accessline 154
- Operator overview: https://atlasgo.io/integrations/kubernetes - Network accessline 155
- Quickstarts: https://atlasgo.io/integrations/kubernetes/quickstart, - Network accessline 155
- Quickstarts: https://atlasgo.io/integrations/kubernetes/quickstart, - Network accessline 156
https://atlasgo.io/integrations/kubernetes/versioned-quickstart - Network accessline 156
https://atlasgo.io/integrations/kubernetes/versioned-quickstart - Network accessline 157
- Installation: https://atlasgo.io/integrations/kubernetes/install - Network accessline 157
- Installation: https://atlasgo.io/integrations/kubernetes/install - Network accessline 158
- Resource references: https://atlasgo.io/integrations/kubernetes/declarative, - Network accessline 158
- Resource references: https://atlasgo.io/integrations/kubernetes/declarative, - Network accessline 159
https://atlasgo.io/integrations/kubernetes/versioned - Network accessline 159
https://atlasgo.io/integrations/kubernetes/versioned - Network accessline 160
- Approvals: https://atlasgo.io/integrations/kubernetes/pre-approval, - Network accessline 160
- Approvals: https://atlasgo.io/integrations/kubernetes/pre-approval, - Network accessline 161
https://atlasgo.io/integrations/kubernetes/ad-hoc-approval - Network accessline 161
https://atlasgo.io/integrations/kubernetes/ad-hoc-approval - Network accessline 162
- Custom configuration: https://atlasgo.io/integrations/kubernetes/project-configuration - Network accessline 162
- Custom configuration: https://atlasgo.io/integrations/kubernetes/project-configuration - Network accessline 163
- GitOps: https://atlasgo.io/guides/deploying/k8s-argo, https://atlasgo.io/guides/deploying/k8s-flux - Network accessline 163
- GitOps: https://atlasgo.io/guides/deploying/k8s-argo, https://atlasgo.io/guides/deploying/k8s-flux - Network accessline 164
- Security scans: https://atlasgo.io/guides/security-scan/kubernetes - Network accessline 164
- Security scans: https://atlasgo.io/guides/security-scan/kubernetes
skills/atlas-operator/references/config.md
- Network accessline 4
configuration to it: data sources such as `composite_schema`, `external_schema`, `aws_rds_token`, and `gcp_cloudsql_token`, variables, and env settings (https://atlasgo.io/integrations/kubernetes/project-configuration). - Network accessline 6
(https://atlasgo.io/integrations/kubernetes/project-configuration).
skills/atlas-operator/references/credentials.md
- Network accessline 3
Every resource needs the URL of its target database, and Atlas Pro features need an Atlas Cloud bot token (https://atlasgo.io/integrations/kubernetes/declarative#credentials). Both live in Kubernetes Secrets. - Network accessline 4
(https://atlasgo.io/integrations/kubernetes/declarative#credentials). Both live in Kubernetes Secrets. - Network accessline 48
name, such as `postgres.default` or `mysql.app`: a short name resolves in the operator's namespace, and `localhost` is the operator itself. - Special characters in the password must be URL-encoded (https://atlasgo.io/faq/url-special-chars - Network accessline 49
`localhost` is the operator itself. - Special characters in the password must be URL-encoded (https://atlasgo.io/faq/url-special-chars). - A Secret key that does not exist reads as an empty URL. The error then names an empty driver, such as - Network accessline 50
- Special characters in the password must be URL-encoded (https://atlasgo.io/faq/url-special-chars). - Network accessline 84
The URL decides what Atlas manages (https://atlasgo.io/concepts/url#scope): - Network accessline 104
The operator runs in the cluster and authenticates with a bot token, not with a user's `atlas login` session (https://atlasgo.io/cloud/bots). A user without an Atlas account starts a free trial with - Network accessline 105
session (https://atlasgo.io/cloud/bots). A user without an Atlas account starts a free trial with - Network accessline 155
- The operator pod opens the connections, not the dev database pod. A cloud identity, such as an IAM role or a workload identity, belongs to the operator's service account, which the chart's values configure (https://github.com/ariga/at - Network accessline 156
role or a workload identity, belongs to the operator's service account, which the chart's values configure (https://github.com/ariga/atlas-operator/blob/master/charts/atlas-operator/values.yaml). - For Azure SQL, Atlas reads the identity - Network accessline 157
configure (https://github.com/ariga/atlas-operator/blob/master/charts/atlas-operator/values.yaml). - Network accessline 158
- For Azure SQL, Atlas reads the identity through the `fedauth` parameter, for example `azuresql://<instance>.database.windows.net?fedauth=ActiveDirectoryDefault&database=master` (https://atlasgo.io/concepts/url). - Network accessline 160
(https://atlasgo.io/concepts/url).
skills/atlas-operator/references/declarative.md
- Network accessline 3
An `AtlasSchema` holds the desired state of a database. The operator compares it with the database, plans the `CREATE`, `ALTER`, and `DROP` statements between them, and applies them (https://atlasgo.io/integrations/kubernetes/declarative). - Network accessline 4
the `CREATE`, `ALTER`, and `DROP` statements between them, and applies them (https://atlasgo.io/integrations/kubernetes/declarative). It acts when the resource changes, not when the database does. - Network accessline 5
(https://atlasgo.io/integrations/kubernetes/declarative). It acts when the resource changes, not when the - Network accessline 229
`cloud.repo` for an inline or ConfigMap schema. A plan matches a transition from one state to another, not a database, so one approved plan serves every database in the same state (https://atlasgo.io/faq/multi-db-plan-approve). - Network accessline 231
(https://atlasgo.io/faq/multi-db-plan-approve). - Network accessline 250
`ariga/atlas-action/schema/plan@v1` on the pull request, and `schema/plan/approve@v1` and `schema/push@v1` on merge. The push tags the schema with the merge commit's SHA, the tag to put in `schema.url` (https://atlasgo.io/integrations/kuber - Network accessline 252
`schema.url` (https://atlasgo.io/integrations/kubernetes/pre-approval). - Dangerous shell operationline 270
`atlas schema plan rm --url <url>`. - Network accessline 272
For an inline schema, create a repository in Atlas Cloud (a declarative workflow repository) and name it in `cloud.repo` (https://atlasgo.io/integrations/kubernetes/ad-hoc-approval): - Network accessline 273
in `cloud.repo` (https://atlasgo.io/integrations/kubernetes/ad-hoc-approval):
skills/atlas-operator/references/dev-database.md
- Network accessline 3
Atlas computes every plan on a dev database, an empty database it can change freely (https://atlasgo.io/concepts/dev-database). The operator creates one for each resource, unless the - Network accessline 4
(https://atlasgo.io/concepts/dev-database). The operator creates one for each resource, unless the - Network accessline 100
- The dev database must be empty and used by nothing else: Atlas changes and cleans it on every run. A database with tables fails with `connected database is not clean` (https://atlasgo.io/faq/migrate-diff-clean). - Network accessline 101
database with tables fails with `connected database is not clean` (https://atlasgo.io/faq/migrate-diff-clean). - Its scope matches the target's: a schema-scoped target needs a schema-scoped dev URL, and a - Network accessline 102
(https://atlasgo.io/faq/migrate-diff-clean). - Network accessline 105
`cannot diff a database connection with a schema "<name>"`, or plans the wrong changes. - It runs the target's engine version, with the extensions and settings the target has. For extension version errors, see https://atlasgo.io/faq/exten - Network accessline 107
version errors, see https://atlasgo.io/faq/extension-version-mismatch. - Network accessline 142
Since v0.7.52, `devDB.metadata` adds labels and annotations to the dev database pod, without a custom pod spec or a `devURL` (https://atlasgo.io/changelog/operator-dev-db-pod-metadata): - Network accessline 144
(https://atlasgo.io/changelog/operator-dev-db-pod-metadata):
skills/atlas-operator/references/drift.md
- Network accessline 4
change. The operator does not re-check a database between deployments on its own. Two features detect drift for an `AtlasMigration`, both with Atlas Pro (https://atlasgo.io/integrations/kubernetes/versioned#drift-detection): - Network accessline 6
(https://atlasgo.io/integrations/kubernetes/versioned#drift-detection):
skills/atlas-operator/references/gitops.md
- Network accessline 3
The operator applies what the manifest names. A deployment is a change to the manifest, which a GitOps tool syncs to the cluster: Argo CD (https://atlasgo.io/guides/deploying/k8s-argo), Flux - Network accessline 4
tool syncs to the cluster: Argo CD (https://atlasgo.io/guides/deploying/k8s-argo), Flux - Network accessline 5
(https://atlasgo.io/guides/deploying/k8s-flux), or a plain `kubectl apply`. This reference also covers - Network accessline 18
For an `AtlasMigration` on GitHub Actions, `ariga/atlas-action/migrate/push@v1` tags the push with the commit SHA by default, and also moves `latest`. It needs a dev database: a service container in the job, as in https://atlasgo.io/integra - Network accessline 19
commit SHA by default, and also moves `latest`. It needs a dev database: a service container in the job, as in https://atlasgo.io/integrations/github-actions#arigaatlas-actionmigratepush. Then two steps write the tag into the manifest and c - Network accessline 20
as in https://atlasgo.io/integrations/github-actions#arigaatlas-actionmigratepush. Then two steps write - Network accessline 176
and drop or rename only after no running version uses the object (expand and contract). `atlas migrate lint` reports backward-incompatible changes in CI (https://atlasgo.io/lint/analyzers#backward-incompatible-changes); move such a chan - Network accessline 177
`atlas migrate lint` reports backward-incompatible changes in CI (https://atlasgo.io/lint/analyzers#backward-incompatible-changes); move such a change to a later release. - Network accessline 178
(https://atlasgo.io/lint/analyzers#backward-incompatible-changes); move such a change to a later - Network accessline 187
Octopus deploys to Argo CD by committing to the Git repository that an Argo CD application syncs (https://octopus.com/docs/argo-cd/steps): - Network accessline 188
(https://octopus.com/docs/argo-cd/steps): - Network accessline 202
Crossplane installs the chart with provider-helm, and wraps the Atlas resources in provider-kubernetes `Object`s, whose service account needs RBAC on the Atlas kinds (https://atlasgo.io/guides/deploying/crossplane): - Network accessline 204
(https://atlasgo.io/guides/deploying/crossplane): - Network accessline 232
Running `atlas migrate apply` in a Helm hook Job or an init container is deprecated (https://atlasgo.io/guides/deploying/helm). Neither can tell an upgrade from a rollback, and an older - Network accessline 233
(https://atlasgo.io/guides/deploying/helm). Neither can tell an upgrade from a rollback, and an older
skills/atlas-operator/references/install.md
- Network accessline 3
The operator installs with Helm from an OCI registry (https://atlasgo.io/integrations/kubernetes/install). It adds the Atlas resource kinds to the cluster, - Network accessline 4
(https://atlasgo.io/integrations/kubernetes/install). It adds the Atlas resource kinds to the cluster, - Access to secretsline 46
[Credential-related source omitted] - Network accessline 86
`.atlas` on disk. The cached grant keeps Atlas Pro features working for some time when Atlas Cloud is unreachable, so deployments in the cluster do not depend on Atlas Cloud being up (https://atlasgo.io/cloud/bots#offline-access). Without a - Network accessline 87
unreachable, so deployments in the cluster do not depend on Atlas Cloud being up (https://atlasgo.io/cloud/bots#offline-access). Without a volume, the cache is lost when the operator pod is replaced, and a pod that starts while Atlas Cloud - Network accessline 88
(https://atlasgo.io/cloud/bots#offline-access). Without a volume, the cache is lost when the operator pod - Network accessline 90
production (https://atlasgo.io/integrations/kubernetes/install#persisting-the-atlas-grant-cache): - Network accessline 125
To connect with client certificates (https://atlasgo.io/guides/deploying/k8s-operator-certs), store
skills/atlas-operator/references/security-scan.md
- Network accessline 3
Since v0.8.0, an `AtlasSecurityScan` runs `atlas security scan` against a database on a schedule, and after an `AtlasSchema` or `AtlasMigration` listed in its `triggers` applies a new version (https://atlasgo.io/guides/security-scan/kuberne - Network accessline 4
after an `AtlasSchema` or `AtlasMigration` listed in its `triggers` applies a new version (https://atlasgo.io/guides/security-scan/kubernetes). It grades the findings, known vulnerabilities in the database's extensions, against a policy, an - Network accessline 5
(https://atlasgo.io/guides/security-scan/kubernetes). It grades the findings, known vulnerabilities in
skills/atlas-operator/references/testing.md
- Network accessline 14
1. Validate the desired state: `atlas schema validate --env local`. 2. Test the logic it holds: `atlas schema test --env local` runs `test "schema"` cases for functions, views, triggers, and checks (https://atlasgo.io/testing/schema). - Network accessline 15
2. Test the logic it holds: `atlas schema test --env local` runs `test "schema"` cases for functions, views, triggers, and checks (https://atlasgo.io/testing/schema). 3. Review the plan from the deployed version, as the operator will com - Network accessline 16
views, triggers, and checks (https://atlasgo.io/testing/schema). - Network accessline 32
2. Lint the new files: `atlas migrate lint --env local --latest 1`, in CI on every pull request. 3. Test data migrations with seeded rows: `atlas migrate test --env local` (https://atlasgo.io/testing/migrate). - Network accessline 33
3. Test data migrations with seeded rows: `atlas migrate test --env local` (https://atlasgo.io/testing/migrate). 4. Preview what a database will run: `atlas migrate apply --dry-run` against a staging database, or a - Network accessline 34
(https://atlasgo.io/testing/migrate). - Network accessline 74
Try a new operator version, chart values, or policies in a throwaway cluster first, as the quickstarts do (https://atlasgo.io/integrations/kubernetes/quickstart): a local cluster, a database in a Deployment, and - Network accessline 75
(https://atlasgo.io/integrations/kubernetes/quickstart): a local cluster, a database in a Deployment, and
skills/atlas-operator/references/troubleshooting.md
- Dangerous shell operationline 116
| `multiple schema plans found: <urls>` | Several plans match the same change | Remove the extras with `atlas schema plan rm --url <url>` |
skills/atlas-operator/references/versioned.md
- Network accessline 3
An `AtlasMigration` applies the pending files of a migration directory, in order (https://atlasgo.io/integrations/kubernetes/versioned). A history table records what ran, so each - Network accessline 4
(https://atlasgo.io/integrations/kubernetes/versioned). A history table records what ran, so each - Network accessline 164
A database that already has a schema needs a baseline, a migration file that describes the existing schema and is marked applied instead of run (https://atlasgo.io/versioned/apply#existing-databases): - Network accessline 165
schema and is marked applied instead of run (https://atlasgo.io/versioned/apply#existing-databases): - Network accessline 189
- `execOrder` sets how files apply when the history and the directory disagree on order: `linear` (the default), `linear-skip`, or `non-linear` (https://atlasgo.io/faq/out-of-order-migrations). - Network accessline 190
default), `linear-skip`, or `non-linear` (https://atlasgo.io/faq/out-of-order-migrations). - Network accessline 223
- Registry directory: the directory's approval policy in Atlas Cloud decides who signs off. Turn on Protected Flows in the directory's settings and require approval for `atlas migrate down` (https://atlasgo.io/versioned/down). The opera - Network accessline 224
Protected Flows in the directory's settings and require approval for `atlas migrate down` (https://atlasgo.io/versioned/down). The operator plans the revert and waits, with `ApprovalPending: plan approval pending, review here: <link>`; - Network accessline 225
(https://atlasgo.io/versioned/down). The operator plans the revert and waits, with
skills/atlas-oracle/SKILL.md
- Network accessline 15
This skill is `SKILL.md` plus seven reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-oracle/references/<name>`. Read a reference when the task needs it: - Network accessline 16
`https://atlasgo.io/skills/atlas-oracle/references/<name>`. Read a reference when the task needs it: - Network accessline 30
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 31
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 36
1. The Oracle driver ships in the Oracle build of Atlas and needs a login. If a command fails with `The oracle driver is available only as custom build`, install that build: `curl -sSf https://atlasgo.sh | ATLAS_FLAVOR="oracle" sh`, o - Network accessline 37
`The oracle driver is available only as custom build`, install that build: `curl -sSf https://atlasgo.sh | ATLAS_FLAVOR="oracle" sh`, or use the `arigaio/atlas:latest-extended` image. Check the login with `atlas whoami`. If it shows n - Network accessline 38
`curl -sSf https://atlasgo.sh | ATLAS_FLAVOR="oracle" sh`, or use the `arigaio/atlas:latest-extended` - Network accessline 121
|----------|--------| | A local Oracle database to apply migrations to | `atlas tool docker --url "docker://oracle/free:latest-lite" --name my-ora` prints its URL; `atlas tool docker kill --name my-ora` stops it (`references/dev-database.md - Network accessline 122
| A local Oracle database to apply migrations to | `atlas tool docker --url "docker://oracle/free:latest-lite" --name my-ora` prints its URL; `atlas tool docker kill --name my-ora` stops it (`references/dev-database.md`) | | `The oracle dri - Network accessline 123
| `The oracle driver is available only as custom build`, or `Error: timeout:` with that text | Install the Oracle build: `curl -sSf https://atlasgo.sh \| ATLAS_FLAVOR="oracle" sh` (Rule 1) | - Network accessline 163
- Oracle HCL reference: https://atlasgo.io/hcl/oracle - Network accessline 164
- Oracle guides: https://atlasgo.io/guides/oracle/automatic-migrations, - Network accessline 165
https://atlasgo.io/guides/oracle/vector - Network accessline 166
- Security: https://atlasgo.io/guides/oracle/security-declarative, - Network accessline 167
https://atlasgo.io/guides/oracle/security-versioned - Network accessline 168
- Dev database: https://atlasgo.io/concepts/dev-database - Network accessline 169
- Lint checks: https://atlasgo.io/lint/analyzers - Network accessline 170
- Oracle SQL Language Reference: https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/ - Network accessline 171
- Guides for each database: https://atlasgo.io/databases
skills/atlas-oracle/references/custom-rules.md
- Network accessline 4
no analyzer covers a check, or the user states a convention, write a custom rule in Atlas's HCL rule language. A rule can check any attribute of any object Atlas inspects, and `atlas schema lint` and `atlas migrate lint` enforce it on every - Network accessline 5
language. A rule can check any attribute of any object Atlas inspects, and `atlas schema lint` and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lint/rules). Lint needs `atlas login`. If `atlas whoami` shows no login, - Network accessline 6
`atlas migrate lint` enforce it on every change (https://atlasgo.io/lint/rules). Lint needs - Network accessline 12
Rules live in `.rule.hcl` files. The language reference is https://atlasgo.io/hcl/rule. - Network accessline 32
Oracle objects expose the attributes common to every driver (https://atlasgo.io/hcl/rule#predicate). Driver-specific ones from other databases are rejected, such as - Network accessline 33
(https://atlasgo.io/hcl/rule#predicate). Driver-specific ones from other databases are rejected, such as - Network accessline 60
Foreign-key columns that lead an index. Without one, updating a parent key or deleting a parent row locks the whole child table, and Oracle's guidance is to index foreign keys (https://docs.oracle.com/en/database/oracle/oracle-database/26/c - Network accessline 61
locks the whole child table, and Oracle's guidance is to index foreign keys (https://docs.oracle.com/en/database/oracle/oracle-database/26/cncpt/data-concurrency-and-consistency.html). An index, a unique constraint, or the primary key cover - Network accessline 62
(https://docs.oracle.com/en/database/oracle/oracle-database/26/cncpt/data-concurrency-and-consistency.html). - Network accessline 212
The docs have more, such as comments on PII columns, foreign keys that reference primary keys with `ON DELETE CASCADE`, naming conventions, and audit tables (https://atlasgo.io/lint/rules#examples). - Network accessline 213
`ON DELETE CASCADE`, naming conventions, and audit tables (https://atlasgo.io/lint/rules#examples). - Network accessline 217
Add the rule files to `atlas.hcl`, globally or inside an env (https://atlasgo.io/lint/rules):
skills/atlas-oracle/references/dev-database.md
- Network accessline 3
The dev database is a temporary database Atlas uses to load the desired state, replay migrations, and compute plans (https://atlasgo.io/concepts/dev-database). For Oracle it must match the target's scope, - Network accessline 4
compute plans (https://atlasgo.io/concepts/dev-database). For Oracle it must match the target's scope, - Network accessline 9
In Oracle, a schema is a user: the objects that one user owns. The URL's `mode` parameter decides what Atlas covers (https://atlasgo.io/concepts/url#scope): - Network accessline 10
Atlas covers (https://atlasgo.io/concepts/url#scope): - Network accessline 17
- The path is the service name of a pluggable database (PDB), such as `FREEPDB1`. Connect to the PDB's service, not to the root container (https://docs.oracle.com/en/database/oracle/oracle-database/26/multi/administering-pdbs-with-sql-p - Network accessline 18
service, not to the root container (https://docs.oracle.com/en/database/oracle/oracle-database/26/multi/administering-pdbs-with-sql-plus.html). - At schema scope, Atlas manages the schema of the user it connects as, so connect as the sche - Network accessline 19
(https://docs.oracle.com/en/database/oracle/oracle-database/26/multi/administering-pdbs-with-sql-plus.html). - Network accessline 38
The `docker://` driver starts a fresh container for each run (https://atlasgo.io/concepts/dev-database): - Network accessline 50
holds 19c and 21c. Pulling an enterprise image needs an Oracle account, accepting the license in the registry, and `docker login container-registry.oracle.com` (https://container-registry.oracle.com/ords/ocr/ba/database/free). - Network accessline 51
registry, and `docker login container-registry.oracle.com` (https://container-registry.oracle.com/ords/ocr/ba/database/free). - Atlas connects to the `FREEPDB1` database as `PDBADMIN`. - Network accessline 52
(https://container-registry.oracle.com/ords/ocr/ba/database/free). - Network accessline 65
The lite image removes features to stay small, such as XML DB, so it has no `XMLTYPE`, and Oracle Text lexers other than `BASIC_LEXER` (https://container-registry.oracle.com/ords/ocr/ba/database/free). It - Network accessline 66
lexers other than `BASIC_LEXER` (https://container-registry.oracle.com/ords/ocr/ba/database/free). It - Network accessline 79
`atlas tool docker` creates a named container from a `docker://` URL and prints its connection URL. It cleans the database if it is not empty, so never run it against a container that holds data to keep (https://atlasgo.io/cli-reference#atl - Network accessline 81
(https://atlasgo.io/cli-reference#atlas-tool-docker). Use it for a local database to apply migrations to: - Access to secretsline 88
[Credential-related source omitted] - Network accessline 93
A `docker "oracle"` block configures the dev container (https://atlasgo.io/hcl/config#docker.oracle). - Network accessline 162
- Release. The Free image is Oracle AI Database 26ai, release 23.26, which replaced 23ai through a release update (https://docs.oracle.com/en/database/oracle/oracle-database/26/nfcoa/). Features by release: - Network accessline 163
update (https://docs.oracle.com/en/database/oracle/oracle-database/26/nfcoa/). Features by release: - Network accessline 176
- `MAX_STRING_SIZE`. `STANDARD`, the default and the Free image's setting, limits `VARCHAR2` to 4000 bytes; `EXTENDED` allows 32767 (https://docs.oracle.com/en/database/oracle/oracle-database/26/refrn/MAX_STRING_SIZE.html). A - Network accessline 177
bytes; `EXTENDED` allows 32767 (https://docs.oracle.com/en/database/oracle/oracle-database/26/refrn/MAX_STRING_SIZE.html). A `VARCHAR2(8000)` column that an `EXTENDED` target accepts fails on a `STANDARD` dev database with - Network accessline 178
(https://docs.oracle.com/en/database/oracle/oracle-database/26/refrn/MAX_STRING_SIZE.html). A - Network accessline 184
for multibyte text. Write `VARCHAR2(100 CHAR)` for a character length (`references/hcl.md`). - Free limits each instance to 2 CPUs, 2 GB of memory, and 12 GB of user data (https://docs.oracle.com/en/database/oracle/oracle-database/26/xein - Network accessline 185
- Free limits each instance to 2 CPUs, 2 GB of memory, and 12 GB of user data (https://docs.oracle.com/en/database/oracle/oracle-database/26/xeinl/licensing-restrictions.html), enough for a dev database. - Network accessline 186
(https://docs.oracle.com/en/database/oracle/oracle-database/26/xeinl/licensing-restrictions.html), - Network accessline 191
Connect Atlas as a dedicated user that owns the application schema, not as an administrator (https://atlasgo.io/guides/oracle/security-declarative). It needs these, granted once by an - Network accessline 192
(https://atlasgo.io/guides/oracle/security-declarative). It needs these, granted once by an - Network accessline 203
- Each `CREATE` privilege covers one object type in the user's own schema; `CREATE PROCEDURE` covers functions and packages too. Add `CREATE MATERIALIZED VIEW`, `CREATE DATABASE LINK`, or `CREATE ROLE` if the schema has them (https://do - Network accessline 204
functions and packages too. Add `CREATE MATERIALIZED VIEW`, `CREATE DATABASE LINK`, or `CREATE ROLE` if the schema has them (https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/GRANT.html). - `RESOURCE` does not include `U - Network accessline 205
the schema has them (https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/GRANT.html). - Network accessline 206
- `RESOURCE` does not include `UNLIMITED TABLESPACE` since 12c, so give the user a quota. On 19c, `RESOURCE` also lacks `CREATE VIEW` and `CREATE SYNONYM` (https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/predefined-r - Network accessline 207
`RESOURCE` also lacks `CREATE VIEW` and `CREATE SYNONYM` (https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/predefined-roles-oracle-database-installation.html). - A missing grant fails with one of these: - Network accessline 208
(https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/predefined-roles-oracle-database-installation.html). - Network accessline 219
first row then fails with `ORA-01950`. - Database scope needs privileges on other users' objects, listed in the Oracle tab of https://atlasgo.io/concepts/url. - Network accessline 221
https://atlasgo.io/concepts/url. - Network accessline 225
- Amazon RDS for Oracle: the master user is not `SYSDBA`, and grants on `SYS` objects go through an RDS procedure, which grants only privileges the master user holds (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracl - Network accessline 226
procedure, which grants only privileges the master user holds (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.TransferPrivileges.html). Run it once from a SQL client, not from a migration file (`re - Network accessline 227
(https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.TransferPrivileges.html). - Network accessline 242
- Oracle Autonomous Database: connect as `ADMIN`, which is not `SYSDBA`, or as a user it creates, through a predefined service such as `<db>_low` or `<db>_tp` (https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/p - Network accessline 243
a predefined service such as `<db>_low` or `<db>_tp` (https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/predefined-database-services-names.html). Mutual TLS, the default on port 1522, needs the wallet: `?ssl=tru - Network accessline 244
(https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/predefined-database-services-names.html). - Network accessline 245
Mutual TLS, the default on port 1522, needs the wallet: `?ssl=true&wallet=/path/to/wallet`. TLS without a wallet needs an access control list or a private endpoint (https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/ad - Network accessline 246
a wallet needs an access control list or a private endpoint (https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/connect-introduction.html). - Autonomous Database ignores tablespace and storage clauses in `CREATE TA - Network accessline 247
(https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/connect-introduction.html). - Network accessline 248
- Autonomous Database ignores tablespace and storage clauses in `CREATE TABLE`, and refuses tablespace changes (https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/autonomous-sql-commands.html). It uses `MAX_STRIN - Network accessline 249
changes (https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/autonomous-sql-commands.html). - Network accessline 254
- Write the URL as `oracle://user:pass@host:1521/service_name`. The service names a PDB. - Percent-encode special characters in passwords, or build the URL with `urlescape` (https://atlasgo.io/faq/url-special-chars). - Network accessline 255
- Percent-encode special characters in passwords, or build the URL with `urlescape` (https://atlasgo.io/faq/url-special-chars). - TLS options go in the query: `?ssl=true` turns TLS on, and `wallet` points at a wallet directory for - Network accessline 256
(https://atlasgo.io/faq/url-special-chars). - Network accessline 263
| Error | Cause | Fix | |-------|-------|-----| | `The oracle driver is available only as custom build`, or `Error: timeout: ...` with that text on a `docker://` dev URL | The installed Atlas has no Oracle driver | Install the Oracle build: - Network accessline 264
|-------|-------|-----| | `The oracle driver is available only as custom build`, or `Error: timeout: ...` with that text on a `docker://` dev URL | The installed Atlas has no Oracle driver | Install the Oracle build: `curl -sSf https://atla - Network accessline 265
| `The oracle driver is available only as custom build`, or `Error: timeout: ...` with that text on a `docker://` dev URL | The installed Atlas has no Oracle driver | Install the Oracle build: `curl -sSf https://atlasgo.sh \| ATLAS_FLAVOR="
skills/atlas-oracle/references/hcl.md
- Network accessline 3
The rules of the HCL schema language that matter on Oracle, and the places where HCL behaves differently from SQL. The language: https://atlasgo.io/atlas-schema/hcl. Every Oracle block and attribute: - Network accessline 4
from SQL. The language: https://atlasgo.io/atlas-schema/hcl. Every Oracle block and attribute: - Network accessline 5
https://atlasgo.io/hcl/oracle. The Oracle driver needs `atlas login`. If `atlas whoami` shows no login, - Network accessline 10
- Name Oracle schema files `*.oc.hcl`, test files `*.test.hcl`, and rule files `*.rule.hcl`. The Atlas editor plugins recognize `.oc.hcl` for Oracle (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 11
editor plugins recognize `.oc.hcl` for Oracle (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - A `schema` block is an Oracle user. At schema scope, its name must be the user in the URL, in - Network accessline 12
(https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 15
several `schema` blocks needs database scope (`references/dev-database.md`). - When environments use different owners, such as `APP_DEV` and `APP_PROD`, set the name from an input variable (https://atlasgo.io/atlas-schema/input-variables) - Network accessline 17
variable (https://atlasgo.io/atlas-schema/input-variables): - Network accessline 281
Rows are declared next to the table in a `data` block, and applied only when the env enables data sync (https://atlasgo.io/atlas-schema/hcl#preserving-explicit-ids): - Network accessline 282
(https://atlasgo.io/atlas-schema/hcl#preserving-explicit-ids): - Network accessline 299
Input variables work as in any Atlas HCL schema (https://atlasgo.io/atlas-schema/input-variables). A
skills/atlas-oracle/references/migrations.md
- Network accessline 10
Oracle has no analyzers of its own, like the `MY` and `PG` checks of MySQL and PostgreSQL. The generic ones run (https://atlasgo.io/lint/analyzers): - Network accessline 11
ones run (https://atlasgo.io/lint/analyzers): - Network accessline 26
- A `statement` rule that flags indexes built without `ONLINE` (https://atlasgo.io/lint/analyzers#statement-rules). Rules run in order, and the first match wins: - Network accessline 27
(https://atlasgo.io/lint/analyzers#statement-rules). Rules run in order, and the first match wins: - Network accessline 48
A statement opts out of named checks with a directive on the line before it (https://atlasgo.io/versioned/lint#nolint-directive): - Network accessline 49
(https://atlasgo.io/versioned/lint#nolint-directive): - Network accessline 58
Oracle commits the open transaction before and after every DDL statement (https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/COMMIT.html). A migration file or a - Network accessline 59
(https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/COMMIT.html). A migration file or a - Network accessline 78
file. Keep data changes in files of their own, apart from DDL. - `atlas migrate down` reverts applied files on Oracle. It computes the revert on the dev database and checks that a column it drops holds no data (https://atlasgo.io/versione - Network accessline 79
- `atlas migrate down` reverts applied files on Oracle. It computes the revert on the dev database and checks that a column it drops holds no data (https://atlasgo.io/versioned/down). - `atlas migrate set <version>` updates the revisions - Network accessline 80
checks that a column it drops holds no data (https://atlasgo.io/versioned/down). - Network accessline 102
- In a hand-written file, end each `CREATE [OR REPLACE]` of a function, procedure, trigger, type, package, or package body with `END;;`, or with a `/` on a line of its own, as in SQL*Plus (https://docs.oracle.com/en/database/oracle/orac - Network accessline 104
(https://docs.oracle.com/en/database/oracle/oracle-database/26/sqpug/SQL-Plus-basics.html): - Network accessline 152
- After a deployment that changes tables, views, or PL/SQL that other code depends on, recompile the schema: `CALL DBMS_UTILITY.COMPILE_SCHEMA(schema => 'APP', compile_all => FALSE);` (https://docs.oracle.com/en/database/oracle/oracle-d - Network accessline 154
(https://docs.oracle.com/en/database/oracle/oracle-database/26/admin/managing-schema-objects.html). - Network accessline 158
- `migrate apply` and `schema apply` hold a `DBMS_LOCK` lock for the run, which needs `EXECUTE ON SYS.DBMS_LOCK`. `--lock-timeout` waits 10 seconds by default; `--skip-lock` skips the lock (https://atlasgo.io/versioned/apply#controlling - Network accessline 159
`EXECUTE ON SYS.DBMS_LOCK`. `--lock-timeout` waits 10 seconds by default; `--skip-lock` skips the lock (https://atlasgo.io/versioned/apply#controlling-advisory-locks). `migrate diff` and `migrate lint` take the lock on the dev database. - Network accessline 160
(https://atlasgo.io/versioned/apply#controlling-advisory-locks). `migrate diff` and `migrate lint` take - Network accessline 161
the lock on the dev database. - `DDL_LOCK_TIMEOUT` is 0 by default, so DDL on a table with an open transaction fails at once (https://docs.oracle.com/en/database/oracle/oracle-database/26/refrn/DDL_LOCK_TIMEOUT.html): - Network accessline 163
(https://docs.oracle.com/en/database/oracle/oracle-database/26/refrn/DDL_LOCK_TIMEOUT.html): - Network accessline 177
or for every file, with a hook in `atlas.hcl` (https://atlasgo.io/versioned/apply#migration-hooks): - Network accessline 190
- Atlas plans `CREATE INDEX` without `ONLINE`, which blocks writes for the whole build. On a populated table, write the index by hand with `ONLINE`, which lets DML continue (https://docs.oracle.com/en/database/oracle/oracle-database/26/ - Network accessline 192
(https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/CREATE-INDEX.html): - Network accessline 198
- `ONLINE` operations are included in Enterprise Edition and Free, not in Standard Edition 2 (https://docs.oracle.com/en/database/oracle/oracle-database/26/dblic/Licensing-Information.html). - Network accessline 199
(https://docs.oracle.com/en/database/oracle/oracle-database/26/dblic/Licensing-Information.html). - Network accessline 203
- Add foreign keys and checks to populated tables without validating them, then validate in a later file. Validating an `ENABLE NOVALIDATE` constraint blocks neither reads nor writes (https://docs.oracle.com/en/database/oracle/oracle-da - Network accessline 205
(https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/constraint.html): - Network accessline 218
- With supplemental logging on, as GoldenGate and logical standby require, Oracle runs `ADD COLUMN`, `ENABLE NOVALIDATE`, and `VALIDATE` as blocking DDL (https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/Automatic-and- - Network accessline 219
`ENABLE NOVALIDATE`, and `VALIDATE` as blocking DDL (https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/Automatic-and-Manual-Locking-Mechanisms-During-SQL-Operations.html). - Adding a column with a `DEFAULT` stores the de - Network accessline 220
(https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/Automatic-and-Manual-Locking-Mechanisms-During-SQL-Operations.html). - Network accessline 221
- Adding a column with a `DEFAULT` stores the default as metadata, without rewriting rows, for nullable and `NOT NULL` columns alike, except on index-organized, temporary, and some other tables (https://docs.oracle.com/en/database/oracl - Network accessline 222
and `NOT NULL` columns alike, except on index-organized, temporary, and some other tables (https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/ALTER-TABLE.html). - A column's size or precision can always grow. Changing its - Network accessline 223
(https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/ALTER-TABLE.html). - Network accessline 226
data, and drop the old one in a later file. - Changes that rebuild a large table online use `DBMS_REDEFINITION` (https://docs.oracle.com/en/database/oracle/oracle-database/26/admin/managing-tables.html), and - Network accessline 227
- Changes that rebuild a large table online use `DBMS_REDEFINITION` (https://docs.oracle.com/en/database/oracle/oracle-database/26/admin/managing-tables.html), and upgrades of PL/SQL in use without downtime use edition-based redefinitio - Network accessline 228
(https://docs.oracle.com/en/database/oracle/oracle-database/26/admin/managing-tables.html), and - Network accessline 229
upgrades of PL/SQL in use without downtime use edition-based redefinition (https://docs.oracle.com/en/database/oracle/oracle-database/26/adfns/editions.html). Run both outside Atlas, then record the file with `atlas migrate set <version - Network accessline 230
(https://docs.oracle.com/en/database/oracle/oracle-database/26/adfns/editions.html). Run both outside - Network accessline 263
A schema that has objects but no revisions table is refused until it gets a baseline, the first migration recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases). - Network accessline 264
migration recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases).
skills/atlas-oracle/references/objects.md
- Network accessline 3
How Atlas models Oracle objects, and the cases where its plan differs from what a hand-written migration would do. The full attribute reference is https://atlasgo.io/hcl/oracle. HCL syntax is in - Network accessline 4
would do. The full attribute reference is https://atlasgo.io/hcl/oracle. HCL syntax is in - Network accessline 14
indexes, comments, views, sequences, functions, procedures, triggers, object types, varrays, nested tables, synonyms, database links, operators, index types, roles, and object grants (https://atlasgo.io/hcl/oracle). - Network accessline 16
(https://atlasgo.io/hcl/oracle). - Network accessline 35
- Oracle folds unquoted names to uppercase and keeps quoted names as written (https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/Database-Object-Names-and-Qualifiers.html). - Network accessline 36
(https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/Database-Object-Names-and-Qualifiers.html). - Network accessline 81
`NUMBER`, which accepts decimals, and later plans do not report the difference. Write integers with a precision: `NUMBER(10)`, `NUMBER(19)`, or `NUMBER(38)`. - Oracle treats `''` as `NULL` (https://docs.oracle.com/en/database/oracle/oracl - Network accessline 82
precision: `NUMBER(10)`, `NUMBER(19)`, or `NUMBER(38)`. - Oracle treats `''` as `NULL` (https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/Nulls.html): - A `NOT NULL` `VARCHAR2` column rejects `''` with `ORA-01400`. - Network accessline 83
- Oracle treats `''` as `NULL` (https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/Nulls.html): - Network accessline 97
- `BOOLEAN` (23ai), `JSON` (21c), and `VECTOR` (23.4) exist only on those releases: on an older target, see `references/dev-database.md`, Versions and Settings. `VECTOR` columns are covered in https://atlasgo.io/guides/oracle/vector. - Network accessline 98
see `references/dev-database.md`, Versions and Settings. `VECTOR` columns are covered in https://atlasgo.io/guides/oracle/vector. - `LONG` columns are deprecated and limited to one per table. Convert them to `CLOB`. - Network accessline 99
https://atlasgo.io/guides/oracle/vector. - Network accessline 109
- Declarative: declare the sequence without a start, apply it, then move it once by hand: `ALTER SEQUENCE "INVOICE_SEQ" RESTART START WITH 50000;` (https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/ALTER-SEQUENCE.h - Network accessline 110
`ALTER SEQUENCE "INVOICE_SEQ" RESTART START WITH 50000;` (https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/ALTER-SEQUENCE.html). Later plans leave it alone. - Network accessline 111
(https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/ALTER-SEQUENCE.html). Later - Network accessline 117
- An identity column's `start` is planned, and plans leave the identity alone once rows use it. - Identity columns take `GENERATED ALWAYS`, the default, `BY DEFAULT`, or `BY DEFAULT ON NULL` (https://docs.oracle.com/en/database/oracle/ora - Network accessline 118
- Identity columns take `GENERATED ALWAYS`, the default, `BY DEFAULT`, or `BY DEFAULT ON NULL` (https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/CREATE-TABLE.html): - A table has at most one, and it is implicitly `NOT - Network accessline 119
(https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/CREATE-TABLE.html): - Network accessline 127
- Seed rows in a `data` block skip `GENERATED ALWAYS` identity values even with `preserve_ids = true`; `BY DEFAULT` values are kept with it (https://atlasgo.io/atlas-schema/hcl#preserving-explicit-ids). - Network accessline 129
(https://atlasgo.io/atlas-schema/hcl#preserving-explicit-ids). - Network accessline 136
row locks the whole child table, and Oracle's guidance is that "foreign keys should almost always be indexed" (https://docs.oracle.com/en/database/oracle/oracle-database/26/cncpt/data-concurrency-and-consistency.html). - Network accessline 137
indexed" (https://docs.oracle.com/en/database/oracle/oracle-database/26/cncpt/data-concurrency-and-consistency.html). Atlas creates no index on its own; enforce it with the rule in `references/custom-rules.md`. - Network accessline 138
(https://docs.oracle.com/en/database/oracle/oracle-database/26/cncpt/data-concurrency-and-consistency.html). - Network accessline 167
statement as applied. An invalid trigger fails every statement that fires it, with `ORA-04098: trigger '...' is invalid and failed re-validation`, until it is fixed (https://docs.oracle.com/en/database/oracle/oracle-database/26/lnpls/tr - Network accessline 168
`ORA-04098: trigger '...' is invalid and failed re-validation`, until it is fixed (https://docs.oracle.com/en/database/oracle/oracle-database/26/lnpls/trigger-compilation-invalidation-and-recompilation.html). A migration test that check - Network accessline 169
(https://docs.oracle.com/en/database/oracle/oracle-database/26/lnpls/trigger-compilation-invalidation-and-recompilation.html). - Network accessline 173
optional `referencing`, `when`, `follows` or `precedes`, and its body in `as`. The body reads `:NEW` and `:OLD`, but a `when` condition writes `NEW` and `OLD` without the colon (https://docs.oracle.com/en/database/oracle/oracle-database - Network accessline 174
`:NEW` and `:OLD`, but a `when` condition writes `NEW` and `OLD` without the colon (https://docs.oracle.com/en/database/oracle/oracle-database/26/lnpls/CREATE-TRIGGER-statement.html). - Definer's-rights code and views run without the owne - Network accessline 175
(https://docs.oracle.com/en/database/oracle/oracle-database/26/lnpls/CREATE-TRIGGER-statement.html). - Network accessline 179
sessions running that code can fail with `ORA-04068`. After a deployment, recompile with `UTL_RECOMP` or `DBMS_UTILITY.COMPILE_SCHEMA` (https://docs.oracle.com/en/database/oracle/oracle-database/26/admin/managing-schema-objects.html). - Network accessline 181
(https://docs.oracle.com/en/database/oracle/oracle-database/26/admin/managing-schema-objects.html). - Network accessline 199
- `synonym` points at a table, view, sequence, function, or procedure, or a name through a `database_link`. A `database_link` takes a `host` and its credentials; keep passwords in input variables (https://atlasgo.io/atlas-schema/input-v - Network accessline 200
`database_link`. A `database_link` takes a `host` and its credentials; keep passwords in input variables (https://atlasgo.io/atlas-schema/input-variables). - `operator` and `index_type` model Data Cartridge objects for domain indexes. - Network accessline 201
variables (https://atlasgo.io/atlas-schema/input-variables).
skills/atlas-oracle/references/security.md
- Network accessline 3
Roles, role hierarchies, and object and column grants. The guides: https://atlasgo.io/guides/oracle/security-declarative and - Network accessline 4
https://atlasgo.io/guides/oracle/security-declarative and - Network accessline 5
https://atlasgo.io/guides/oracle/security-versioned. - Network accessline 96
global authorization, or a package (a secure application role). Only `NOT IDENTIFIED` roles are enabled at login as default roles; the others need `SET ROLE` or the package (https://docs.oracle.com/en/database/oracle/oracle-database/26/ - Network accessline 97
enabled at login as default roles; the others need `SET ROLE` or the package (https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/ALTER-USER.html). - The `role` block has no `external` attribute. Every role that Oracle doe - Network accessline 98
(https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/ALTER-USER.html). - Network accessline 99
- The `role` block has no `external` attribute. Every role that Oracle does not maintain is in scope, including other teams' roles, and a role the schema does not declare is planned for `DROP ROLE`. Keep `drop_role = true` in the env's - Network accessline 100
including other teams' roles, and a role the schema does not declare is planned for `DROP ROLE`. Keep `drop_role = true` in the env's `skip` policy (https://atlasgo.io/versioned/diff#diff-policy). - The user Atlas connects as can grant or - Network accessline 101
`drop_role = true` in the env's `skip` policy (https://atlasgo.io/versioned/diff#diff-policy). - Network accessline 132
- Prefer `READ` to `SELECT` for read-only access: `SELECT` also allows `SELECT ... FOR UPDATE` and `LOCK TABLE`, so a reader can lock rows (12.1.0.2 and later, https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/GRANT.ht - Network accessline 133
`LOCK TABLE`, so a reader can lock rows (12.1.0.2 and later, https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/GRANT.html). Changing one to the other plans a `GRANT` and a `REVOKE`. - Network accessline 134
https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/GRANT.html). Changing one to the - Network accessline 144
Write schema privileges (23ai and later), such as `GRANT SELECT ANY TABLE ON SCHEMA APP TO APP_READONLY`, and system privileges in hand-written migration files (https://docs.oracle.com/en/database/oracle/oracle-database/26/dbseg/managin - Network accessline 146
(https://docs.oracle.com/en/database/oracle/oracle-database/26/dbseg/managing-system-privileges.html). - Network accessline 150
Oracle disables roles inside definer's-rights PL/SQL, the default for functions, procedures, packages, and triggers, and when it compiles a view (https://docs.oracle.com/en/database/oracle/oracle-database/26/dbseg/user-roles.html): - Network accessline 152
(https://docs.oracle.com/en/database/oracle/oracle-database/26/dbseg/user-roles.html):
skills/atlas-oracle/references/testing.md
- Network accessline 102
database, and the call fails with `ORA-00904: "NO_SUCH_FN": invalid identifier`. - Triggers: seed rows, make the change that fires the trigger, and check the side effect, as above (https://atlasgo.io/guides/testing/triggers). A row trigge - Network accessline 103
- Triggers: seed rows, make the change that fires the trigger, and check the side effect, as above (https://atlasgo.io/guides/testing/triggers). A row trigger that reads `:NEW` needs `for = ROW`. - Views and virtual columns: seed rows and - Network accessline 104
(https://atlasgo.io/guides/testing/triggers). A row trigger that reads `:NEW` needs `for = ROW`. - Network accessline 105
- Views and virtual columns: seed rows and compare the output (https://atlasgo.io/guides/testing/views). - Functions and procedures: normal inputs, edge cases, and error paths with `catch` - Network accessline 106
(https://atlasgo.io/guides/testing/views). - Network accessline 108
(https://atlasgo.io/guides/testing/functions, https://atlasgo.io/guides/testing/procedures). - Network accessline 112
Each case starts from an empty database. Migrate to the version before the change, seed rows, migrate to the version under test, and check the data (https://atlasgo.io/guides/testing/data-migrations): - Network accessline 113
to the version under test, and check the data (https://atlasgo.io/guides/testing/data-migrations):
skills/atlas-postgres/SKILL.md
- Network accessline 9
commands; this skill covers the rules, edge cases, and answers that differ on PostgreSQL. PostgreSQL-compatible engines, such as CockroachDB, YugabyteDB, and Aurora DSQL, behave differently in places: follow their guides (https://atlasgo.io - Network accessline 9
commands; this skill covers the rules, edge cases, and answers that differ on PostgreSQL. PostgreSQL-compatible engines, such as CockroachDB, YugabyteDB, and Aurora DSQL, behave differently in places: follow their guides (https://atlasgo.io - Network accessline 9
commands; this skill covers the rules, edge cases, and answers that differ on PostgreSQL. PostgreSQL-compatible engines, such as CockroachDB, YugabyteDB, and Aurora DSQL, behave differently in places: follow their guides (https://atlasgo.io - Network accessline 11
places: follow their guides (https://atlasgo.io/databases). - Network accessline 11
places: follow their guides (https://atlasgo.io/databases). - Network accessline 11
places: follow their guides (https://atlasgo.io/databases). - Network accessline 15
This skill is `SKILL.md` plus seven reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-postgres/references/<name>`. Read a reference when the task needs it: - Network accessline 15
This skill is `SKILL.md` plus seven reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-postgres/references/<name>`. Read a reference when the task needs it: - Network accessline 15
This skill is `SKILL.md` plus seven reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-postgres/references/<name>`. Read a reference when the task needs it: - Network accessline 16
`https://atlasgo.io/skills/atlas-postgres/references/<name>`. Read a reference when the task needs it: - Network accessline 16
`https://atlasgo.io/skills/atlas-postgres/references/<name>`. Read a reference when the task needs it: - Network accessline 16
`https://atlasgo.io/skills/atlas-postgres/references/<name>`. Read a reference when the task needs it: - Network accessline 30
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 30
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 30
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 31
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 31
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 31
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 125
- PostgreSQL HCL reference: https://atlasgo.io/hcl/postgres - Network accessline 125
- PostgreSQL HCL reference: https://atlasgo.io/hcl/postgres - Network accessline 125
- PostgreSQL HCL reference: https://atlasgo.io/hcl/postgres - Network accessline 126
- Dev database: https://atlasgo.io/concepts/dev-database - Network accessline 126
- Dev database: https://atlasgo.io/concepts/dev-database - Network accessline 126
- Dev database: https://atlasgo.io/concepts/dev-database - Network accessline 127
- Security: https://atlasgo.io/guides/postgres/security-declarative, - Network accessline 127
- Security: https://atlasgo.io/guides/postgres/security-declarative, - Network accessline 127
- Security: https://atlasgo.io/guides/postgres/security-declarative, - Network accessline 128
https://atlasgo.io/guides/postgres/security-default-privileges - Network accessline 128
https://atlasgo.io/guides/postgres/security-default-privileges - Network accessline 128
https://atlasgo.io/guides/postgres/security-default-privileges - Network accessline 129
- Lock-safe changes: https://atlasgo.io/guides/lock-safe-not-null, https://atlasgo.io/lint/analyzers - Network accessline 129
- Lock-safe changes: https://atlasgo.io/guides/lock-safe-not-null, https://atlasgo.io/lint/analyzers - Network accessline 129
- Lock-safe changes: https://atlasgo.io/guides/lock-safe-not-null, https://atlasgo.io/lint/analyzers - Network accessline 130
- Guides for each database: https://atlasgo.io/databases - Network accessline 130
- Guides for each database: https://atlasgo.io/databases - Network accessline 130
- Guides for each database: https://atlasgo.io/databases
skills/atlas-postgres/references/custom-rules.md
- Network accessline 4
the user states a convention, write a custom rule in Atlas's HCL rule language. A rule can check any attribute of any object Atlas inspects, and `atlas schema lint` and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lin - Network accessline 5
attribute of any object Atlas inspects, and `atlas schema lint` and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lint/rules). Lint needs `atlas login`. If `atlas whoami` shows no login, ask the user to run `atlas logi - Network accessline 6
every change (https://atlasgo.io/lint/rules). Lint needs `atlas login`. If `atlas whoami` shows no - Network accessline 11
Rules live in `.rule.hcl` files. The language reference is https://atlasgo.io/hcl/rule. - Network accessline 31
The attributes PostgreSQL objects expose to predicates, and the child objects a predicate or rule can walk into (https://atlasgo.io/hcl/rule#predicate): - Network accessline 32
walk into (https://atlasgo.io/hcl/rule#predicate): - Network accessline 53
From the docs (https://atlasgo.io/lint/rules#examples). Adapt the closest one before writing a rule - Network accessline 216
Add the rule files to `atlas.hcl`, globally or inside an env (https://atlasgo.io/lint/rules):
skills/atlas-postgres/references/dev-database.md
- Network accessline 3
The dev database is a temporary database Atlas uses to load the desired state, replay migrations, and compute plans (https://atlasgo.io/concepts/dev-database). For PostgreSQL it must match the target's - Network accessline 4
compute plans (https://atlasgo.io/concepts/dev-database). For PostgreSQL it must match the target's - Network accessline 9
The URL's `search_path` decides what Atlas covers (https://atlasgo.io/concepts/url#scope): - Network accessline 35
The `docker://` driver starts a fresh container for each run (https://atlasgo.io/concepts/dev-database). - Network accessline 65
`docker://` needs a Docker client and a reachable daemon. Inside the `arigaio/atlas` image, or on a CI runner without Docker, point `dev` at a separate PostgreSQL container instead (https://atlasgo.io/faq/docker-in-docker): - Network accessline 67
(https://atlasgo.io/faq/docker-in-docker): - Network accessline 79
`atlas tool docker` creates a named container from a `docker://` URL and prints its connection URL. It also applies the baseline, and cleans the database if it is not empty, so never run it against a container that holds data to keep (https - Network accessline 80
also applies the baseline, and cleans the database if it is not empty, so never run it against a container that holds data to keep (https://atlasgo.io/cli-reference#atlas-tool-docker). The container runs until `atlas tool docker kill`. Use - Network accessline 81
container that holds data to keep (https://atlasgo.io/cli-reference#atlas-tool-docker). The container - Network accessline 83
(https://atlasgo.io/getting-started#step-4-set-up-your-database): - Network accessline 100
A `docker` block configures the dev container, and its `baseline` creates what the schema depends on but does not manage: extensions, schemas, provider roles, external functions (https://atlasgo.io/concepts/dev-database#baseline-schema). Th - Network accessline 101
but does not manage: extensions, schemas, provider roles, external functions (https://atlasgo.io/concepts/dev-database#baseline-schema). The `docker` and `dev` blocks need `atlas login`. If `atlas whoami` shows no login, ask the user to run - Network accessline 102
(https://atlasgo.io/concepts/dev-database#baseline-schema). The `docker` and `dev` blocks need - Network accessline 125
- A longer script lives in a file: `baseline = file("baseline.sql")`. - A `build` block builds a custom image, for example with an extension package installed (https://atlasgo.io/concepts/dev-database#docker-with-build-configurations). - Network accessline 126
- A `build` block builds a custom image, for example with an extension package installed (https://atlasgo.io/concepts/dev-database#docker-with-build-configurations). - `command` passes server settings. For `ERROR: out of shared memory` on - Network accessline 127
(https://atlasgo.io/concepts/dev-database#docker-with-build-configurations). - Network accessline 128
- `command` passes server settings. For `ERROR: out of shared memory` on large schemas, raise `max_locks_per_transaction` above 128, which the official images already set (https://atlasgo.io/faq/out-of-shared-memory): - Network accessline 130
(https://atlasgo.io/faq/out-of-shared-memory): - Network accessline 148
Without Docker, the `dev` block connects to an existing empty database, applies the `baseline`, and restores the database to its original state on exit (https://atlasgo.io/concepts/dev-database#providing-your-own-dev-database): - Network accessline 150
(https://atlasgo.io/concepts/dev-database#providing-your-own-dev-database): - Network accessline 171
Managing extensions needs `atlas login`, and a database-scoped URL (https://atlasgo.io/faq/postgres-extensions). - Network accessline 172
(https://atlasgo.io/faq/postgres-extensions). - Network accessline 174
- Atlas writes the extension version installed in the dev image into the migration, so the target must offer that version (https://atlasgo.io/guides/postgres/rds-extensions): - Network accessline 175
offer that version (https://atlasgo.io/guides/postgres/rds-extensions): - Network accessline 191
Use an image with the target's versions, or stop tracking versions (https://atlasgo.io/faq/extension-version-mismatch): - Network accessline 192
(https://atlasgo.io/faq/extension-version-mismatch): - Network accessline 202
- To manage extensions in their own env, apart from the application schema (https://atlasgo.io/faq/manage-extension-only): - Network accessline 203
(https://atlasgo.io/faq/manage-extension-only): - Network accessline 213
The application envs then create the same extensions in their dev `baseline`. - PostGIS needs an image that provides it and `CREATE EXTENSION postgis` (https://atlasgo.io/faq/geometry-type). `pq: extension "postgis" is not available` mean - Network accessline 214
- PostGIS needs an image that provides it and `CREATE EXTENSION postgis` (https://atlasgo.io/faq/geometry-type). `pq: extension "postgis" is not available` means the dev image lacks it: use `docker://postgis/latest/dev`. `pq: type "geom - Network accessline 215
(https://atlasgo.io/faq/geometry-type). `pq: extension "postgis" is not available` means the dev - Network accessline 220
- Extensions that exist only on a managed service, such as `aws_s3` on RDS, have no public package. Mock them in the dev image with a control file and an SQL script; the RDS guide shows the image (https://atlasgo.io/guides/postgres/rds- - Network accessline 222
(https://atlasgo.io/guides/postgres/rds-extensions). - Network accessline 228
- RDS: creating the AWS extensions needs `rds_superuser`, so apply that migration with a privileged role. With IAM authentication, Atlas builds the URL from a token (https://atlasgo.io/guides/postgres/rds-extensions): - Network accessline 230
(https://atlasgo.io/guides/postgres/rds-extensions): - Network accessline 240
- Cloud SQL: the `gcp_cloudsql_token` data source signs in with IAM; use `sslmode=require` (https://atlasgo.io/atlas-schema/projects#data-source-gcp_cloudsql_token). Grants to the `postgres` - Network accessline 241
(https://atlasgo.io/atlas-schema/projects#data-source-gcp_cloudsql_token). Grants to the `postgres` - Network accessline 242
admin need a dev database where `postgres` is an ordinary role (`references/security.md`). - Supabase (https://atlasgo.io/guides/postgres/supabase): - Connect to the direct connection, `db.[project-ref].supabase.co:5432`. The session pool - Network accessline 243
- Supabase (https://atlasgo.io/guides/postgres/supabase): - Network accessline 292
- Local databases without TLS need `sslmode=disable`; managed services need `sslmode=require` (https://atlasgo.io/concepts/url#ssltls-mode). - Network accessline 293
(https://atlasgo.io/concepts/url#ssltls-mode). - Network accessline 294
- Percent-encode special characters in passwords, or build the URL with `urlescape`: `urlescape(getenv("DB_PASSWORD"))` (https://atlasgo.io/faq/url-special-chars). - The user Atlas connects as must be able to read every object Atlas manag - Network accessline 295
`urlescape(getenv("DB_PASSWORD"))` (https://atlasgo.io/faq/url-special-chars). - Network accessline 303
- On Windows PowerShell, `>` writes UTF-16, which Atlas cannot read. Set `$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'` first (https://atlasgo.io/faq/schema-encoding). - Network accessline 305
(https://atlasgo.io/faq/schema-encoding).
skills/atlas-postgres/references/hcl.md
- Network accessline 3
The rules of the HCL schema language that matter on PostgreSQL, and the places where HCL behaves differently from SQL. The language: https://atlasgo.io/atlas-schema/hcl. Column types: - Network accessline 4
differently from SQL. The language: https://atlasgo.io/atlas-schema/hcl. Column types: - Network accessline 5
https://atlasgo.io/atlas-schema/hcl-types. Every PostgreSQL block and attribute: - Network accessline 6
https://atlasgo.io/hcl/postgres. - Network accessline 13
- Name PostgreSQL schema files `*.pg.hcl` and test files `*.test.hcl`, so editors apply the right schema (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 14
schema (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 24
`default = sql("public.uuid_generate_v4()")`. - `renamed_from` plans a rename instead of dropping the old column and adding a new one (https://atlasgo.io/guides/destructive-change-policy): - Network accessline 26
(https://atlasgo.io/guides/destructive-change-policy): - Network accessline 36
`-- atlas:renamed_from legacy_email`. - Generated columns take an expression in `as`, or an `as` block with the storage type (https://atlasgo.io/atlas-schema/hcl#generated-columns): - Network accessline 38
(https://atlasgo.io/atlas-schema/hcl#generated-columns): - Network accessline 63
Write parameters inline: `numeric(5,2)`, `varchar(255)`, `timestamp(4)`, `bit(2)`. Multi-word types use underscores (https://atlasgo.io/atlas-schema/hcl-types): - Network accessline 64
underscores (https://atlasgo.io/atlas-schema/hcl-types): - Network accessline 102
use the full path. - Two tables with the same name in different schemas take a second label, the schema (https://atlasgo.io/atlas-schema/hcl#table-qualification): - Network accessline 104
(https://atlasgo.io/atlas-schema/hcl#table-qualification): - Network accessline 129
- A foreign key's `on_delete` and `on_update` take `NO_ACTION`, `RESTRICT`, `CASCADE`, `SET_NULL`, or `SET_DEFAULT`, and `deferrable` takes `INITIALLY_IMMEDIATE` or `INITIALLY_DEFERRED` (https://atlasgo.io/hcl/postgres). A self-referenc - Network accessline 131
(https://atlasgo.io/hcl/postgres). A self-reference uses the table's own column: - Network accessline 162
index, or `deduplicate_items = false` on a B-tree. - pgvector indexes (need `atlas login` and `extension "vector"` in the schema) name the type as a string (https://atlasgo.io/atlas-schema/hcl#index-storage-parameters): - Network accessline 164
(https://atlasgo.io/atlas-schema/hcl#index-storage-parameters): - Network accessline 184
- A table's `storage_params` block sets options such as `fillfactor` and the autovacuum settings (https://atlasgo.io/hcl/postgres#table.storage_params). Lint flags turning autovacuum off (`PG320`). - Network accessline 185
(https://atlasgo.io/hcl/postgres#table.storage_params). Lint flags turning autovacuum off (`PG320`). - Network accessline 186
- `replica_identity = FULL`, or `replica_identity = index.idx_account_id` for `USING INDEX`, sets the table's replica identity (https://atlasgo.io/changelog/postgres-replica-identity). Lint flags `FULL` and `NOTHING` (`PG314`). - Network accessline 187
table's replica identity (https://atlasgo.io/changelog/postgres-replica-identity). Lint flags `FULL` - Network accessline 188
and `NOTHING` (`PG314`). - `access_method` sets the table access method (https://atlasgo.io/hcl/postgres#table.access_method). A new access method rewrites the table (`PG311`). - Network accessline 189
- `access_method` sets the table access method (https://atlasgo.io/hcl/postgres#table.access_method). - Network accessline 190
A new access method rewrites the table (`PG311`). - `collation` and `cast` blocks define collations and casts (https://atlasgo.io/hcl/postgres#collation, https://atlasgo.io/hcl/postgres#cast). - Network accessline 191
- `collation` and `cast` blocks define collations and casts (https://atlasgo.io/hcl/postgres#collation, - Network accessline 192
https://atlasgo.io/hcl/postgres#cast). - Network accessline 196
A partition key can be an expression: one `by` block per part, each with `column` or `expr` (https://atlasgo.io/atlas-schema/hcl#partitions): - Network accessline 197
(https://atlasgo.io/atlas-schema/hcl#partitions): - Network accessline 228
- Arguments may be unnamed and read as `$1`. Function attributes such as volatility, `strict`, `leakproof`, and `security` are set directly (https://atlasgo.io/atlas-schema/hcl#function): - Network accessline 229
`leakproof`, and `security` are set directly (https://atlasgo.io/atlas-schema/hcl#function): - Network accessline 263
- An `event_trigger` has no `schema`, and its `execute` is an attribute, not a block as in `trigger` (https://atlasgo.io/atlas-schema/hcl#event-trigger): - Network accessline 264
(https://atlasgo.io/atlas-schema/hcl#event-trigger): - Network accessline 274
- A `policy` takes `to` as a list, `[PUBLIC]` or role names as strings, and `using` and `check` as SQL strings (https://atlasgo.io/atlas-schema/hcl#row-level-security-policy): - Network accessline 275
strings (https://atlasgo.io/atlas-schema/hcl#row-level-security-policy): - Network accessline 298
options of one membership (`references/security.md`). - A password comes in through an input variable, never as a literal in the file (https://atlasgo.io/atlas-schema/hcl#sensitive-information): - Network accessline 300
(https://atlasgo.io/atlas-schema/hcl#sensitive-information): - Network accessline 327
Rows are declared next to the table in a `data` block, and applied only when the env enables data sync (needs `atlas login`, https://atlasgo.io/atlas-schema/hcl#data): - Network accessline 328
(needs `atlas login`, https://atlasgo.io/atlas-schema/hcl#data): - Network accessline 367
A schema file declares the values it expects (https://atlasgo.io/atlas-schema/input-variables): - Network accessline 376
`atlas.hcl` passes them through `data "hcl_schema"` (https://atlasgo.io/atlas-schema/projects): - Network accessline 377
(https://atlasgo.io/atlas-schema/projects):
skills/atlas-postgres/references/migrations.md
- Network accessline 33
Each check is tuned in the `lint` block (https://atlasgo.io/lint/analyzers#check-policy): - Network accessline 54
`CREATE INDEX` takes a `SHARE` lock that blocks writes, and `DROP INDEX` takes `ACCESS EXCLUSIVE`. The `concurrent_index` diff policy, off by default, makes Atlas plan both with `CONCURRENTLY`, and the files it generates get the `atlas:txmo - Network accessline 56
it generates get the `atlas:txmode none` directive (https://atlasgo.io/versioned/diff#diff-policy): - Network accessline 70
A file written by hand needs the directive at the top, followed by an empty line (https://atlasgo.io/versioned/apply#transaction-configuration): - Network accessline 71
(https://atlasgo.io/versioned/apply#transaction-configuration): - Network accessline 85
`ADD PRIMARY KEY USING INDEX` or `ADD CONSTRAINT ... UNIQUE USING INDEX`. - In an HCL schema, add the `index` block first and apply it under the policy, then replace it with a `unique` block (https://atlasgo.io/atlas-schema/hcl#adding-uni - Network accessline 86
- In an HCL schema, add the `index` block first and apply it under the policy, then replace it with a `unique` block (https://atlasgo.io/atlas-schema/hcl#adding-unique-constraints-concurrently). - An `EXCLUDE` constraint cannot use a pre- - Network accessline 87
`unique` block (https://atlasgo.io/atlas-schema/hcl#adding-unique-constraints-concurrently). - Network accessline 100
takes is held while `VALIDATE` scans the table, so start the file with `-- atlas:txmode none`, or validate in a later migration file (https://atlasgo.io/guides/lock-safe-not-null#why-the-transaction-is-disabled): - Network accessline 102
(https://atlasgo.io/guides/lock-safe-not-null#why-the-transaction-is-disabled): - Network accessline 118
A plain `SET NOT NULL` scans the table under `ACCESS EXCLUSIVE`. The `not_null` diff policy plans it in steps that avoid the long lock (https://atlasgo.io/guides/lock-safe-not-null): - Network accessline 119
steps that avoid the long lock (https://atlasgo.io/guides/lock-safe-not-null): - Network accessline 140
- `atlas migrate apply` runs each file in its own transaction by default (`--tx-mode file`); `all` runs every pending file in one, and `none` runs statements without one. `atlas schema apply` supports `file` and `none` (https://atlasgo. - Network accessline 141
every pending file in one, and `none` runs statements without one. `atlas schema apply` supports `file` and `none` (https://atlasgo.io/versioned/apply#transaction-configuration). - `-- atlas:txmode none` sets the mode for one file. Use it - Network accessline 142
`file` and `none` (https://atlasgo.io/versioned/apply#transaction-configuration). - Network accessline 172
The lock needs a direct connection; see Connection Poolers below. - `hook` blocks run SQL inside the migration transaction, for example to bound locks (https://atlasgo.io/versioned/apply#migration-hooks): - Network accessline 174
(https://atlasgo.io/versioned/apply#migration-hooks): - Network accessline 194
Never apply migrations through a connection pooler in transaction mode. The advisory lock that `migrate apply` and `schema apply` hold is per session (https://atlasgo.io/versioned/apply#controlling-advisory-locks). A transaction-mode pooler - Network accessline 195
`migrate apply` and `schema apply` hold is per session (https://atlasgo.io/versioned/apply#controlling-advisory-locks). A transaction-mode pooler gives every transaction a different server connection, so the lock is taken on one connection - Network accessline 196
(https://atlasgo.io/versioned/apply#controlling-advisory-locks). A transaction-mode pooler gives every - Network accessline 200
| Service | Give Atlas | Not | Where the provider says so | |---------|------------|-----|----------------------------| | Supabase | The direct connection, `db.[project-ref].supabase.co:5432`. From an IPv4-only network without the IPv4 add- - Network accessline 201
|---------|------------|-----|----------------------------| | Supabase | The direct connection, `db.[project-ref].supabase.co:5432`. From an IPv4-only network without the IPv4 add-on, the session pooler | The transaction pooler, port 6543 | - Network accessline 202
| Supabase | The direct connection, `db.[project-ref].supabase.co:5432`. From an IPv4-only network without the IPv4 add-on, the session pooler | The transaction pooler, port 6543 | Its connection guide lists the direct connection for migrat - Network accessline 203
| Neon | The direct connection string: the hostname without `-pooler` | The pooled string, whose hostname ends in `-pooler` | Its pooler runs PgBouncer in transaction mode, lists "Session-level advisory locks" as unsupported, and recommends - Network accessline 204
| PgBouncer, or any pooler built on it | A direct connection, or a pool in session mode | A pool in transaction mode | PgBouncer's feature table: session-level advisory locks work in transaction pooling "Never" (https://www.pgbouncer.org/fe - Network accessline 215
A database that has objects but no revisions table is refused until it gets a baseline: the first migration recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases). - Network accessline 216
migration recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases). - Network accessline 217
Set `baseline` in the env's `migration` block, or pass `--baseline <version>` once. The GitHub action `migrate/apply` has no baseline input; use the env attribute (https://atlasgo.io/faq/migrate-baseline-github-action). - Network accessline 219
(https://atlasgo.io/faq/migrate-baseline-github-action). - Network accessline 223
Lookup tables and other reference rows can be declared with the schema and kept in sync on every apply (https://atlasgo.io/guides/postgres/seed-data). `INSERT` adds missing rows, `UPSERT` also updates them, - Network accessline 224
(https://atlasgo.io/guides/postgres/seed-data). `INSERT` adds missing rows, `UPSERT` also updates them,
skills/atlas-postgres/references/objects.md
- Network accessline 3
How Atlas models PostgreSQL objects, and the cases where its plan differs from what a hand-written migration would do. The full attribute reference is https://atlasgo.io/hcl/postgres, with examples in - Network accessline 4
migration would do. The full attribute reference is https://atlasgo.io/hcl/postgres, with examples in - Network accessline 5
https://atlasgo.io/atlas-schema/hcl. - Network accessline 10
without a login. Everything else needs `atlas login`: views, materialized views, functions, aggregates, procedures, triggers and event triggers, sequences, extensions, partitions, policies, domain, composite, and range types, and foreign se - Network accessline 12
domain, composite, and range types, and foreign servers (https://atlasgo.io/features). - Network accessline 26
default. Inspection prints `type = serial` and hides the implicit sequence, and so do identity columns. Write a `sequence` block only for a sequence the database did not create for a column (https://atlasgo.io/atlas-schema/hcl#sequence) - Network accessline 27
columns. Write a `sequence` block only for a sequence the database did not create for a column (https://atlasgo.io/atlas-schema/hcl#sequence). - A `sequence` block takes `type`, `start`, `increment`, `min_value`, `max_value`, `cache`, and - Network accessline 28
(https://atlasgo.io/atlas-schema/hcl#sequence). - Network accessline 30
(https://atlasgo.io/hcl/postgres#sequence). `owner` ties it to a column, which is `OWNED BY`: - Network accessline 40
- What Atlas plans when a column changes (https://atlasgo.io/guides/postgres/serial-columns): - Network accessline 70
surfaces the sequence as an explicit object and demotes the column from `bigserial` to `bigint` with a `nextval(...)` default, so both the sequence and its grants are managed. A `serial` column without a grant is unchanged (https://atla - Network accessline 71
`nextval(...)` default, so both the sequence and its grants are managed. A `serial` column without a grant is unchanged (https://atlasgo.io/atlas-schema/hcl#permissions). - Identity columns need PostgreSQL 10 or later. Adding one to an ex - Network accessline 72
grant is unchanged (https://atlasgo.io/atlas-schema/hcl#permissions). - Network accessline 106
- A `domain` wraps a base type with `null`, `default`, and `check` blocks that refer to `VALUE`. In HCL, a domain without `null = true` is `NOT NULL`, like a column (https://atlasgo.io/atlas-schema/hcl#domain): - Network accessline 108
(https://atlasgo.io/atlas-schema/hcl#domain): - Network accessline 162
or `OLD`: PostgreSQL's default is `FOR EACH STATEMENT`, where both are null. A function the schema does not manage is called with `sql()`, and its arguments go in `args` (https://atlasgo.io/atlas-schema/hcl#trigger): - Network accessline 164
(https://atlasgo.io/atlas-schema/hcl#trigger): - Network accessline 183
- An `event_trigger` belongs to the database, not to a schema. A schema-scoped dev URL silently drops event triggers from migrations; use a database-scoped one (https://atlasgo.io/faq/event-trigger-search-path). - Network accessline 185
(https://atlasgo.io/faq/event-trigger-search-path). - Network accessline 194
it is created, so loading the schema on the dev database fails with `could not connect to server`. Stub the remote server in the dev container with `extra_hosts` and an `init` script (https://atlasgo.io/faq/mock-postgres-fdw-foreign-ser - Network accessline 196
(https://atlasgo.io/faq/mock-postgres-fdw-foreign-server). - Network accessline 200
The parent table declares `partition { type = RANGE, LIST, or HASH }` with its columns. Each child is a top-level `partition` block with `schema`, `of`, and its bounds; a child without bounds is the default partition (https://atlasgo.io/atl - Network accessline 202
partition (https://atlasgo.io/atlas-schema/hcl#partitions): - Network accessline 224
- An `index` takes `columns`, or `on` blocks with `column` or `expr`, plus `desc`, `ops` (the operator class), `include`, `where`, `type` (`BTREE`, `BRIN`, `HASH`, `GIN`, `GIST`, `SPGIST`), `unique`, and `nulls_distinct`. An operator cl - Network accessline 226
`nulls_distinct`. An operator class (https://atlasgo.io/guides/postgres/index-operator-classes):
skills/atlas-postgres/references/security.md
- Network accessline 3
Roles, users, GRANT and REVOKE, default privileges, ownership, row-level security, and the admin roles of managed providers. The guides: https://atlasgo.io/guides/postgres/security-declarative, - Network accessline 4
of managed providers. The guides: https://atlasgo.io/guides/postgres/security-declarative, - Network accessline 5
https://atlasgo.io/guides/postgres/security-versioned, and - Network accessline 6
https://atlasgo.io/guides/postgres/security-default-privileges. - Network accessline 11
login. If `atlas whoami` shows no login, ask the user to run `atlas login`; a user without an account can start a free trial with it. Enable them in the env's `schema` block (https://atlasgo.io/atlas-schema/hcl#enabling-roles-and-permission - Network accessline 13
(https://atlasgo.io/atlas-schema/hcl#enabling-roles-and-permissions): - Network accessline 37
RDS example under Managed Providers. - The `skip` diff policy takes `drop_role = true` and `drop_user = true` to keep drops of roles and users out of plans (https://atlasgo.io/versioned/diff#diff-policy). - Network accessline 38
- The `skip` diff policy takes `drop_role = true` and `drop_user = true` to keep drops of roles and users out of plans (https://atlasgo.io/versioned/diff#diff-policy). - With `permissions = true` and `roles` off, Atlas plans grants withou - Network accessline 39
users out of plans (https://atlasgo.io/versioned/diff#diff-policy). - Network accessline 41
as a string: `to = "app_reader"`. - To manage only roles and users, disable `schemas` and `objects`. This env needs no dev database (https://atlasgo.io/atlas-schema/projects): - Network accessline 43
(https://atlasgo.io/atlas-schema/projects): - Network accessline 62
workflow leaves passwords out of migration files; set them from a template directory with the `-- atlas:sensitive` directive (https://atlasgo.io/guides/postgres/security-versioned): - Network accessline 64
(https://atlasgo.io/guides/postgres/security-versioned): - Network accessline 126
role access to every table in a large database produces thousands of statements. For read access to all data, make the role a member of PostgreSQL's predefined `pg_read_all_data` role instead (PostgreSQL 14 and later, https://www.postgresql - Network accessline 127
all data, make the role a member of PostgreSQL's predefined `pg_read_all_data` role instead (PostgreSQL 14 and later, https://www.postgresql.org/docs/current/predefined-roles.html): it reads every table, view, and sequence in every schema, - Network accessline 128
14 and later, https://www.postgresql.org/docs/current/predefined-roles.html): it reads every table, - Network accessline 129
view, and sequence in every schema, and row-level security still applies to it. Predefined roles need no declaration; declare one as external only to reference it (https://atlasgo.io/atlas-schema/hcl#external-roles-and-users): - Network accessline 131
(https://atlasgo.io/atlas-schema/hcl#external-roles-and-users): - Network accessline 160
`member_of` lists the roles a role belongs to. To set a membership's options, use a `membership` block with `admin`, `inherit`, and `set`; `inherit` and `set` need PostgreSQL 16 or later (https://atlasgo.io/hcl/postgres#role.membership): - Network accessline 162
(https://atlasgo.io/hcl/postgres#role.membership): - Network accessline 175
The `permission` block grants on a schema, table, view, materialized view, function, procedure, sequence, partition, foreign table, or columns, to `PUBLIC`, a role name, or a role reference (https://atlasgo.io/hcl/postgres). `for_each` expa - Network accessline 177
(https://atlasgo.io/hcl/postgres). `for_each` expands one block into a grant per object at plan time: - Network accessline 200
and the admin on AlloyDB (`alloydbsuperuser`). With `permissions = true`, its grants show up in inspection, and a diff through a local dev database plans a `REVOKE` from the admin on every object (https://atlasgo.io/faq/cloud-sql-postgres-g - Network accessline 202
(https://atlasgo.io/faq/cloud-sql-postgres-grants). - Network accessline 236
- RDS IAM authentication: the user Atlas connects as needs `member_of = [role.rds_iam]`, the AWS `rds-db:connect` permission, and `sslmode=require`. RDS owns `rds_iam`, so declare it as `role "rds_iam" { external = true }` (https://atla - Network accessline 237
`rds-db:connect` permission, and `sslmode=require`. RDS owns `rds_iam`, so declare it as `role "rds_iam" { external = true }` (https://atlasgo.io/guides/deploying/rds-iam-migration-role). - Supabase roles, grants, and their dev database a - Network accessline 238
`role "rds_iam" { external = true }` (https://atlasgo.io/guides/deploying/rds-iam-migration-role). - Network accessline 243
- A table enables policies with `row_security { enabled = true }`; `enforced = true` adds `FORCE ROW LEVEL SECURITY` (https://atlasgo.io/hcl/postgres). Policies are `AS PERMISSIVE` unless - Network accessline 244
`FORCE ROW LEVEL SECURITY` (https://atlasgo.io/hcl/postgres). Policies are `AS PERMISSIVE` unless - Network accessline 247
policies returns no rows to the roles row-level security applies to. - Row-level security does not apply to superusers, roles with `BYPASSRLS`, or the table owner unless the table enforces it (https://atlasgo.io/guides/rls-policy). - Network accessline 248
- Row-level security does not apply to superusers, roles with `BYPASSRLS`, or the table owner unless the table enforces it (https://atlasgo.io/guides/rls-policy). - Test policies as a non-privileged role: the Docker dev database connects - Network accessline 249
the table enforces it (https://atlasgo.io/guides/rls-policy).
skills/atlas-postgres/references/testing.md
- Network accessline 22
The env lists the test files (https://atlasgo.io/guides/testing/triggers): - Network accessline 41
Each case starts from the desired schema, created on the dev database. A trigger test seeds rows, makes the change that fires the trigger, and checks the side effect (https://atlasgo.io/guides/testing/triggers): - Network accessline 43
(https://atlasgo.io/guides/testing/triggers): - Network accessline 73
- PL/pgSQL functions and procedures: normal inputs, edge cases, and error paths with `catch` (https://atlasgo.io/guides/testing/functions, https://atlasgo.io/guides/testing/procedures). - Network accessline 74
(https://atlasgo.io/guides/testing/functions, https://atlasgo.io/guides/testing/procedures). - Network accessline 75
- Triggers: seed rows, change them, and check the side effects, as above. A trigger declared without `for = ROW` runs once per statement, where `NEW` and `OLD` are null; a test catches it. - Domains and check constraints: `catch` an inval - Network accessline 76
`for = ROW` runs once per statement, where `NEW` and `OLD` are null; a test catches it. - Domains and check constraints: `catch` an invalid value (https://atlasgo.io/guides/testing/domains). - Views: seed rows and compare the view's output - Network accessline 77
- Domains and check constraints: `catch` an invalid value (https://atlasgo.io/guides/testing/domains). - Network accessline 78
- Views: seed rows and compare the view's output (https://atlasgo.io/guides/testing/views). - Network accessline 84
queries as `postgres` passes whatever the policy says. Create a non-privileged role in the test, run the queries as that role, and drop it in `cleanup`. In this example, a Go test connects with the role's URL, built by `urluserinfo` (https: - Network accessline 86
role's URL, built by `urluserinfo` (https://atlasgo.io/faq/testing-rls): - Network accessline 123
Template databases make `atlas schema test` fast; `atlas migrate test` does not use them. With `template = true`, every test group starts from a fresh copy of the dev database, and role changes are reverted (https://atlasgo.io/guides/postgr - Network accessline 125
reverted (https://atlasgo.io/guides/postgres/schema-test-template-databases): - Network accessline 144
pgTAP runs inside Atlas tests: install it in the dev image, run `SELECT no_plan();` first, and match `^ok` in the assertions (https://atlasgo.io/guides/postgres/pgtap-with-atlas). Prefer custom lint rules - Network accessline 145
`^ok` in the assertions (https://atlasgo.io/guides/postgres/pgtap-with-atlas). Prefer custom lint rules - Network accessline 150
Each case starts from an empty database. Migrate to the version before the change, seed rows, migrate to the version under test, and check the data (https://atlasgo.io/guides/testing/data-migrations): - Network accessline 151
to the version under test, and check the data (https://atlasgo.io/guides/testing/data-migrations):
skills/atlas-redshift/SKILL.md
- Network accessline 1
--- name: atlas-redshift description: "Redshift specifics for Atlas: the login-only driver, redshift:// and Data API (redshift+http://) URLs and their scope, the dev database without Docker, distribution, sort keys, and encodings, identity - Network accessline 2
name: atlas-redshift description: "Redshift specifics for Atlas: the login-only driver, redshift:// and Data API (redshift+http://) URLs and their scope, the dev database without Docker, distribution, sort keys, and encodings, identity colu - Network accessline 3
description: "Redshift specifics for Atlas: the login-only driver, redshift:// and Data API (redshift+http://) URLs and their scope, the dev database without Docker, distribution, sort keys, and encodings, identity columns, column changes R - Network accessline 16
This skill is `SKILL.md` plus seven reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-redshift/references/<name>`. Read a reference when the task needs it: - Network accessline 17
`https://atlasgo.io/skills/atlas-redshift/references/<name>`. Read a reference when the task needs it: - Network accessline 31
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 32
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 42
unqualified statements (`"users"`). Database scope, no `search_path`: Atlas covers every schema in the database and qualifies each statement (`"public"."users"`). - Data API URLs (`redshift+http://`) ignore `search_path`: they are s - Network accessline 43
in the database and qualifies each statement (`"public"."users"`). - Data API URLs (`redshift+http://`) ignore `search_path`: they are schema-scoped to the user's current schema by default, and `mode=database` gives database scope. - Network accessline 44
- Data API URLs (`redshift+http://`) ignore `search_path`: they are schema-scoped to the user's - Network accessline 100
| `login is required to use the 'redshift' driver` | Ask the user to run `atlas login` (Rule 1) | | `unsupported docker image "redshift"` | Redshift has no Docker image: give Atlas an empty database on a cluster or workgroup (`references/de - Network accessline 101
| `unsupported docker image "redshift"` | Redshift has no Docker image: give Atlas an empty database on a cluster or workgroup (`references/dev-database.md`, Your Own Dev Database) | | Which URL for Serverless, a provisioned cluster, or a c - Network accessline 102
| Which URL for Serverless, a provisioned cluster, or a cluster without network access | `redshift://` over the endpoint, or `redshift+http://workgroup(name)/db` and `redshift+http://cluster(name)/db` through the Data API (`references/dev-d - Network accessline 138
- Redshift HCL reference: https://atlasgo.io/hcl/redshift - Network accessline 139
- Getting started: https://atlasgo.io/guides/redshift/automatic-migrations - Network accessline 140
- Dev database: https://atlasgo.io/concepts/dev-database - Network accessline 141
- Security: https://atlasgo.io/guides/redshift/security-declarative, - Network accessline 142
https://atlasgo.io/guides/redshift/security-versioned - Network accessline 143
- Lint checks: https://atlasgo.io/lint/analyzers - Network accessline 144
- Guides for each database: https://atlasgo.io/databases
skills/atlas-redshift/references/custom-rules.md
- Network accessline 4
the user states a convention, write a custom rule in Atlas's HCL rule language. A rule can check any attribute of any object Atlas inspects, and `atlas schema lint` and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lin - Network accessline 5
attribute of any object Atlas inspects, and `atlas schema lint` and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lint/rules). Redshift has no analyzers of its own, so distribution keys, sort keys, encodings, and ident - Network accessline 6
every change (https://atlasgo.io/lint/rules). Redshift has no analyzers of its own, so distribution - Network accessline 13
Rules live in `.rule.hcl` files. The language reference is https://atlasgo.io/hcl/rule. - Network accessline 33
The attributes Redshift objects expose to predicates, and the child objects a predicate or rule can walk into (https://atlasgo.io/hcl/rule#predicate): - Network accessline 34
walk into (https://atlasgo.io/hcl/rule#predicate): - Network accessline 203
Add the rule files to `atlas.hcl`, globally or inside an env (https://atlasgo.io/lint/rules):
skills/atlas-redshift/references/dev-database.md
- Network accessline 3
The dev database is a temporary database Atlas uses to load the desired state, replay migrations, and compute plans (https://atlasgo.io/concepts/dev-database). Redshift runs only on AWS and has no Docker - Network accessline 4
compute plans (https://atlasgo.io/concepts/dev-database). Redshift runs only on AWS and has no Docker - Network accessline 11
The scope decides what Atlas covers (https://atlasgo.io/concepts/url#scope): - Network accessline 15
| `redshift://u:p@host:5439/analytics?search_path=public` | Schema | That schema only | Unqualified (`"users"`) | | `redshift://u:p@host:5439/analytics` | Database | Every schema in `analytics` | Qualified (`"public"."users"`) | | `redshift - Network accessline 16
| `redshift://u:p@host:5439/analytics` | Database | Every schema in `analytics` | Qualified (`"public"."users"`) | | `redshift+http://cluster(c)/analytics` | Schema (the default `mode=schema`) | The user's current schema, `SELECT CURRENT_SC - Network accessline 17
| `redshift+http://cluster(c)/analytics` | Schema (the default `mode=schema`) | The user's current schema, `SELECT CURRENT_SCHEMA()` | Unqualified | - Network accessline 18
| `redshift+http://cluster(c)/analytics?mode=database` | Database | Every schema in `analytics` | Qualified | - Network accessline 20
- `redshift+http://` ignores `search_path`. To bind a Data API connection to another schema, set the - Network accessline 34
Redshift has no Docker image, so `docker://redshift/...` fails with `unsupported docker image "redshift"`, and `atlas tool docker` cannot start one. Give Atlas an empty database you own instead (https://atlasgo.io/concepts/dev-database#prov - Network accessline 36
database you own instead (https://atlasgo.io/concepts/dev-database#providing-your-own-dev-database): - Network accessline 82
atlas schema apply \ --url "redshift+http://cluster(atlas-demo)/dev?mode=database" \ - Network accessline 83
--url "redshift+http://cluster(atlas-demo)/dev?mode=database" \ - Network accessline 84
--dev-url "redshift+http://root@cluster(atlas-demo)/devdb?mode=database" \ - Network accessline 101
When the schema depends on objects it does not manage, such as another team's schema, a view source, or an external schema, a `dev` block applies a `baseline` script to the dev database before each run (https://atlasgo.io/concepts/dev-datab - Network accessline 103
(https://atlasgo.io/concepts/dev-database#baseline-schema): - Network accessline 131
|--------|-----------|-------------| | `redshift://` | The PostgreSQL wire protocol to the cluster or workgroup endpoint, port `5439` by default | Atlas can reach the endpoint: a public endpoint, a VPN, or a runner in the VPC | | `redshift+ - Network accessline 133
| `redshift+http://` | The Redshift Data API over HTTPS, authenticated with AWS credentials | Atlas has AWS credentials but no network path to the endpoint | - Network accessline 143
- Without a port, Atlas uses `5439`. - Query parameters reach the PostgreSQL client: `sslmode=disable` turns TLS off (https://atlasgo.io/concepts/url). - Network accessline 144
- Query parameters reach the PostgreSQL client: `sslmode=disable` turns TLS off (https://atlasgo.io/concepts/url). - Percent-encode special characters in the password, or build the URL with `urlescape` in `atlas.hcl`. - Network accessline 145
(https://atlasgo.io/concepts/url). - Network accessline 148
### `redshift+http://` (Data API) - Network accessline 151
redshift+http://workgroup(<workgroup>)/<database> # Serverless, IAM identity - Network accessline 152
redshift+http://<secret-arn>@workgroup(<workgroup>)/<database> # Serverless, Secrets Manager redshift+http://cluster(<cluster-id>)/<database> # Provisioned, IAM identity redshift+http://<db-user>@cluster(<cluster-id>)/<datab - Network accessline 153
redshift+http://cluster(<cluster-id>)/<database> # Provisioned, IAM identity - Network accessline 163
- `timeout` bounds each statement, or each transaction batch (default `5m`), and `polling` sets how often Atlas polls for its result (default `50ms`): `redshift+http://cluster(atlas-demo)/dev?timeout=10m`. Both take a number with a unit - Network accessline 164
often Atlas polls for its result (default `50ms`): `redshift+http://cluster(atlas-demo)/dev?timeout=10m`. Both take a number with a unit (`90s`, `10m`); anything else fails with `invalid timeout: ...` or `invalid polling: ...`. - Network accessline 165
`redshift+http://cluster(atlas-demo)/dev?timeout=10m`. Both take a number with a unit (`90s`, - Network accessline 184
| `cannot diff a schema "..." with a database connection`, or `cannot diff a database connection with a schema "..."` | The URL and the dev URL have different scopes | Give both the same `search_path`, or the same `mode` | | `modify schema - Network accessline 185
| `modify schema "..." is not allowed when migration plan is scoped to one schema` | A schema-level change through schema-scoped URLs | Use database scope for both URLs | | `sql/redshift: connection mode must be schema or database, received - Network accessline 186
| `sql/redshift: connection mode must be schema or database, received "..."` | A bad `mode` on a `redshift+http://` URL | `mode=schema` or `mode=database` |
skills/atlas-redshift/references/hcl.md
- Network accessline 3
The rules of the HCL schema language that matter on Redshift, and the places where HCL behaves differently from SQL. The language: https://atlasgo.io/atlas-schema/hcl. Column types: - Network accessline 4
differently from SQL. The language: https://atlasgo.io/atlas-schema/hcl. Column types: - Network accessline 5
https://atlasgo.io/atlas-schema/hcl-types. Every Redshift block and attribute: - Network accessline 6
https://atlasgo.io/hcl/redshift. - Network accessline 13
- Name Redshift schema files `*.rs.hcl` and test files `*.test.hcl`, so editors apply the Redshift schema (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 14
schema (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 272
one block over a list of objects. - A password comes in through an input variable, never as a literal (https://atlasgo.io/atlas-schema/hcl#sensitive-information): - Network accessline 274
(https://atlasgo.io/atlas-schema/hcl#sensitive-information): - Network accessline 288
A schema file declares the values it expects, and `atlas.hcl` passes them through `data "hcl_schema"` (https://atlasgo.io/atlas-schema/input-variables): - Network accessline 289
(https://atlasgo.io/atlas-schema/input-variables):
skills/atlas-redshift/references/migrations.md
- Network accessline 11
Redshift has no driver-specific analyzers (no `PG*` or `MY*` codes). Lint runs the general ones (https://atlasgo.io/lint/analyzers): - Network accessline 12
(https://atlasgo.io/lint/analyzers): - Network accessline 47
- `atlas migrate apply` runs each file in its own transaction by default (`--tx-mode file`); `all` runs every pending file in one, and `none` runs statements without one (https://atlasgo.io/versioned/apply#transaction-configuration). - Network accessline 48
every pending file in one, and `none` runs statements without one (https://atlasgo.io/versioned/apply#transaction-configuration). - Redshift rejects these statements inside a transaction block: - Network accessline 49
(https://atlasgo.io/versioned/apply#transaction-configuration). - Network accessline 95
Through `redshift+http://`, Atlas sends statements as Data API calls instead of over one session: - Network accessline 115
- `atlas_schema_revisions` lives in the schema the URL is bound to: the `search_path` of a `redshift://` URL, or the user's current schema for a `redshift+http://` URL in `mode=schema`. With a - Network accessline 116
`redshift://` URL, or the user's current schema for a `redshift+http://` URL in `mode=schema`. With a - Network accessline 139
A database that has objects but no revisions table is refused until it gets a baseline: the first migration recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases). - Network accessline 140
migration recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases).
skills/atlas-redshift/references/objects.md
- Network accessline 3
How Atlas models Redshift objects, and the cases where its plan differs from what a hand-written migration would do. The full attribute reference is https://atlasgo.io/hcl/redshift, and the HCL - Network accessline 4
migration would do. The full attribute reference is https://atlasgo.io/hcl/redshift, and the HCL
skills/atlas-redshift/references/security.md
- Network accessline 3
Users, groups, roles, memberships, and GRANT and REVOKE on Redshift. The guides: https://atlasgo.io/guides/redshift/security-declarative and - Network accessline 4
https://atlasgo.io/guides/redshift/security-declarative and - Network accessline 5
https://atlasgo.io/guides/redshift/security-versioned. Every Redshift command needs `atlas login`. If - Network accessline 60
objects the state does not define name them with `ref()` (Permissions below). - The `skip` diff policy takes `drop_role = true` and `drop_user = true` to keep drops of principals out of plans (https://atlasgo.io/versioned/diff#diff-policy - Network accessline 62
of plans (https://atlasgo.io/versioned/diff#diff-policy). - Network accessline 143
secret, and a password change alone produces no statement. Set the credential out of band, manage it declaratively with `sensitive = ALLOW`, or let IAM authenticate a user declared `external = true` (https://atlasgo.io/guides/redshift/s - Network accessline 144
it declaratively with `sensitive = ALLOW`, or let IAM authenticate a user declared `external = true` (https://atlasgo.io/guides/redshift/security-versioned). - Pass passwords in through input variables, never as literals (`references/hcl. - Network accessline 145
`external = true` (https://atlasgo.io/guides/redshift/security-versioned).
skills/atlas-redshift/references/testing.md
- Network accessline 56
- SQL functions: normal inputs, edge cases, and `NULL` inputs (https://atlasgo.io/guides/testing/functions). - Network accessline 57
(https://atlasgo.io/guides/testing/functions). - Network accessline 58
- Stored procedures: `CALL` them with seeded rows, and check the rows they change, and errors with `catch` (https://atlasgo.io/guides/testing/procedures). - Views and late-binding views: seed the tables and compare the view's output - Network accessline 59
`catch` (https://atlasgo.io/guides/testing/procedures). - Network accessline 60
- Views and late-binding views: seed the tables and compare the view's output (https://atlasgo.io/guides/testing/views). - Materialized views: seed the tables, run `REFRESH MATERIALIZED VIEW`, and compare the output. - Network accessline 61
(https://atlasgo.io/guides/testing/views). - Network accessline 88
Each case starts from an empty database. Migrate to the version before the change, seed rows, migrate to the version under test, and check the data (https://atlasgo.io/guides/testing/data-migrations). Here, - Network accessline 89
to the version under test, and check the data (https://atlasgo.io/guides/testing/data-migrations). Here,
skills/atlas-snowflake/SKILL.md
- Network accessline 15
This skill is `SKILL.md` plus seven reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-snowflake/references/<name>`. Read a reference when the task needs it: - Network accessline 16
`https://atlasgo.io/skills/atlas-snowflake/references/<name>`. Read a reference when the task needs it: - Network accessline 30
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 31
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 101
|----------|--------| | `login is required to use the 'snowflake' driver` | Run `atlas login` (Rule 1) | | `sql/sqlclient: unknown driver "snowflake"`, or `The snowflake driver is available only as custom build.` | Install the extended buil - Network accessline 102
| `login is required to use the 'snowflake' driver` | Run `atlas login` (Rule 1) | | `sql/sqlclient: unknown driver "snowflake"`, or `The snowflake driver is available only as custom build.` | Install the extended build: `curl -sSf https:// - Network accessline 103
| `sql/sqlclient: unknown driver "snowflake"`, or `The snowflake driver is available only as custom build.` | Install the extended build: `curl -sSf https://atlasgo.sh \| ATLAS_FLAVOR="snowflake" sh` (`references/dev-database.md`, Install a - Network accessline 135
- Snowflake HCL reference: https://atlasgo.io/hcl/snowflake - Network accessline 136
- Snowflake guides: https://atlasgo.io/guides/snowflake/automatic-migrations, - Network accessline 137
https://atlasgo.io/guides/snowflake/security-declarative - Network accessline 138
- Snowflake with dbt: https://atlasgo.io/guides/dbt/snowflake - Network accessline 139
- URLs and scope: https://atlasgo.io/concepts/url - Network accessline 140
- Dev database: https://atlasgo.io/concepts/dev-database - Network accessline 141
- Lint checks: https://atlasgo.io/lint/analyzers - Network accessline 142
- Guides for each database: https://atlasgo.io/databases
skills/atlas-snowflake/references/custom-rules.md
- Network accessline 3
Lint runs Atlas's built-in analyzers (`references/migrations.md`). When no analyzer covers a check, or the user states a convention, write a custom rule in Atlas's HCL rule language, and `atlas schema lint` and `atlas migrate lint` enforce - Network accessline 4
the user states a convention, write a custom rule in Atlas's HCL rule language, and `atlas schema lint` and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lint/rules). Lint needs `atlas login`. If `atlas whoami` shows n - Network accessline 5
and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lint/rules). Lint needs - Network accessline 16
Rules live in `.rule.hcl` files. The language reference is https://atlasgo.io/hcl/rule. - Network accessline 66
Adapt the closest one before writing a rule from scratch (https://atlasgo.io/lint/rules#examples). - Network accessline 206
For what rules cannot see, the `statement` analyzer matches each statement of a migration file against ordered `allow` and `deny` regular expressions (https://atlasgo.io/lint/analyzers#statement-rules). It - Network accessline 207
ordered `allow` and `deny` regular expressions (https://atlasgo.io/lint/analyzers#statement-rules). It - Network accessline 235
Add the rule files to `atlas.hcl`, globally or inside an env (https://atlasgo.io/lint/rules):
skills/atlas-snowflake/references/dev-database.md
- Network accessline 3
The dev database is a temporary database Atlas uses to load the desired state, replay migrations, and compute plans (https://atlasgo.io/concepts/dev-database). Snowflake does not run in Docker, so on - Network accessline 4
compute plans (https://atlasgo.io/concepts/dev-database). Snowflake does not run in Docker, so on - Network accessline 6
(https://atlasgo.io/concepts/dev-database#providing-your-own-dev-database). - Network accessline 14
curl -sSf https://atlasgo.sh | ATLAS_FLAVOR="snowflake" sh - Network accessline 18
| Error | Cause | Fix | |-------|-------|-----| | `sql/sqlclient: unknown driver "snowflake". See: https://atlasgo.io/url` | The community edition is first on `PATH`; it has no Snowflake driver | Install the extended build, and check `which - Network accessline 19
|-------|-------|-----| | `sql/sqlclient: unknown driver "snowflake". See: https://atlasgo.io/url` | The community edition is first on `PATH`; it has no Snowflake driver | Install the extended build, and check `which atlas` | | `The snowfla - Network accessline 20
| `sql/sqlclient: unknown driver "snowflake". See: https://atlasgo.io/url` | The community edition is first on `PATH`; it has no Snowflake driver | Install the extended build, and check `which atlas` | - Access to secretsline 22
[Credential-related source omitted] - Network accessline 29
The account identifier is the host, the database is the first path segment, and the schema the second (https://atlasgo.io/concepts/url). Query parameters, such as `warehouse` and `role`, go to the Snowflake - Network accessline 30
(https://atlasgo.io/concepts/url). Query parameters, such as `warehouse` and `role`, go to the Snowflake - Access to secretsline 64
[Credential-related source omitted] - Network accessline 91
with `connected database is not clean`. - Planning is slow on Snowflake: every plan and lint run round-trips through the dev database. A lint of a few statements can take about a minute (https://atlasgo.io/guides/dbt/snowflake), and a - Network accessline 92
- Planning is slow on Snowflake: every plan and lint run round-trips through the dev database. A lint of a few statements can take about a minute (https://atlasgo.io/guides/dbt/snowflake), and a database-scoped plan of about 30 objects, - Network accessline 93
of a few statements can take about a minute (https://atlasgo.io/guides/dbt/snowflake), and a - Network accessline 97
A `dev "snowflake"` block connects to the same database and adds a `baseline`, for objects the schema references but does not manage, such as a table in another team's schema. The `dev` block needs `atlas login` (https://atlasgo.io/concepts - Network accessline 99
`atlas login` (https://atlasgo.io/concepts/dev-database#baseline-schema): - Network accessline 137
The URL forms the docs list (https://atlasgo.io/concepts/url): - Network accessline 148
`locals` block above. - `role=` picks the role the session uses. A programmatic access token restricted to one role can only assume that role (https://atlasgo.io/guides/dbt/snowflake). - Network accessline 149
- `role=` picks the role the session uses. A programmatic access token restricted to one role can only assume that role (https://atlasgo.io/guides/dbt/snowflake). - Set `warehouse=` on the target and the dev URL. Atlas restores the sessio - Network accessline 150
assume that role (https://atlasgo.io/guides/dbt/snowflake).
skills/atlas-snowflake/references/hcl.md
- Network accessline 3
The rules of the HCL schema language that matter on Snowflake, and the places where HCL behaves differently from SQL. The language: https://atlasgo.io/atlas-schema/hcl. Every Snowflake block and - Network accessline 4
differently from SQL. The language: https://atlasgo.io/atlas-schema/hcl. Every Snowflake block and - Network accessline 5
attribute: https://atlasgo.io/hcl/snowflake. Which objects need a `mode` switch before Atlas plans - Network accessline 13
- Name Snowflake schema files `*.sf.hcl` and test files `*.test.hcl`, so editors apply the right schema (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 14
schema (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 436
A secret's value comes in through an input variable, never as a literal in the file (https://atlasgo.io/atlas-schema/input-variables): - Network accessline 437
(https://atlasgo.io/atlas-schema/input-variables): - Access to secretsline 440
[Credential-related source omitted] - Access to secretsline 444
[Credential-related source omitted] - Access to secretsline 447
[Credential-related source omitted] - Access to secretsline 453
[Credential-related source omitted]
skills/atlas-snowflake/references/migrations.md
- Network accessline 10
Snowflake has no engine-specific analyzers. These run on it (https://atlasgo.io/lint/analyzers): - Network accessline 29
Each check is tuned in the `lint` block (https://atlasgo.io/lint/analyzers#check-policy): - Network accessline 73
revisions schema as one the desired state does not declare, and plan to drop it. List the managed schemas on the env with `schemas`, or add `--exclude atlas_schema_revisions` (https://atlasgo.io/guides/dbt/snowflake). - Network accessline 75
(https://atlasgo.io/guides/dbt/snowflake). - Network accessline 103
`add_column { if_not_exists = true }` write the `IF [NOT] EXISTS` clause on tables of every kind and on columns. `add_index` has no effect: Snowflake has no indexes (https://atlasgo.io/versioned/diff#diff-policy): - Network accessline 105
(https://atlasgo.io/versioned/diff#diff-policy): - Network accessline 124
Every `migrate diff`, `migrate lint`, `schema plan`, and `schema apply` loads the desired state, the migration directory, or both on the dev database, and Snowflake DDL is slow: a lint of a few statements can take about a minute (https://at - Network accessline 125
migration directory, or both on the dev database, and Snowflake DDL is slow: a lint of a few statements can take about a minute (https://atlasgo.io/guides/dbt/snowflake). In CI, budget for it, lint only new files with `--latest`, and keep ` - Network accessline 126
can take about a minute (https://atlasgo.io/guides/dbt/snowflake). In CI, budget for it, lint only new - Network accessline 131
A database that has objects but no revisions table is refused until it gets a baseline: the first migration recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases). - Network accessline 132
migration recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases).
skills/atlas-snowflake/references/objects.md
- Network accessline 3
How Atlas models Snowflake objects, which ones it reads by default, and the changes Snowflake makes only by dropping and creating the object again. The full attribute reference is https://atlasgo.io/hcl/snowflake, with examples in https://a - Network accessline 4
only by dropping and creating the object again. The full attribute reference is https://atlasgo.io/hcl/snowflake, with examples in https://atlasgo.io/atlas-schema/hcl. HCL details are in `references/hcl.md`. - Network accessline 5
https://atlasgo.io/hcl/snowflake, with examples in https://atlasgo.io/atlas-schema/hcl. HCL details - Network accessline 147
With the policy, Atlas plans the drop and add without asking, in a terminal and in CI (https://atlasgo.io/hcl/config#diff.snowflake): - Network accessline 148
(https://atlasgo.io/hcl/config#diff.snowflake):
skills/atlas-snowflake/references/security.md
- Network accessline 3
Account roles, database roles, role grants to roles and users, and object privileges. The guide: https://atlasgo.io/guides/snowflake/security-declarative. Block reference: - Network accessline 4
https://atlasgo.io/guides/snowflake/security-declarative. Block reference: - Network accessline 5
https://atlasgo.io/hcl/snowflake#role, https://atlasgo.io/hcl/snowflake#database_role, - Network accessline 6
https://atlasgo.io/hcl/snowflake#permission. - Network accessline 60
first `migrate apply` works, and the next `migrate diff` fails: replaying the directory on the dev database runs the `CREATE ROLE` against the shared account, where the role already exists (https://atlasgo.io/guides/dbt/snowflake): - Network accessline 62
(https://atlasgo.io/guides/dbt/snowflake):
skills/atlas-snowflake/references/testing.md
- Access to secretsline 27
[Credential-related source omitted] - Network accessline 86
- SQL, JavaScript, and Python functions: normal inputs, edge cases, overloads, argument defaults, and `NULL` handling under `null_call` (https://atlasgo.io/guides/testing/functions). - Network accessline 87
`NULL` handling under `null_call` (https://atlasgo.io/guides/testing/functions). - Network accessline 88
- Procedures: `CALL` them, check the result and the rows they change (https://atlasgo.io/guides/testing/procedures). - Views and secure views: seed rows and compare the output (https://atlasgo.io/guides/testing/views). - Network accessline 89
(https://atlasgo.io/guides/testing/procedures). - Network accessline 90
- Views and secure views: seed rows and compare the output (https://atlasgo.io/guides/testing/views). - Network accessline 97
Each case starts from an empty database. Migrate to the version before the change, seed rows, migrate to the version under test, and check the data (https://atlasgo.io/guides/testing/data-migrations): - Network accessline 98
the version under test, and check the data (https://atlasgo.io/guides/testing/data-migrations): - Network accessline 126
Without a project file, pass the dev URL and the directory (https://atlasgo.io/cli-reference#atlas-migrate-test): - Network accessline 127
(https://atlasgo.io/cli-reference#atlas-migrate-test):
skills/atlas-spanner/SKILL.md
- Network accessline 15
This skill is `SKILL.md` plus seven reference files under `references/`, each served at `https://atlasgo.io/skills/atlas-spanner/references/<name>`. Read a reference when the task needs it: - Network accessline 16
`https://atlasgo.io/skills/atlas-spanner/references/<name>`. Read a reference when the task needs it: - Network accessline 30
The `atlas` skill, installed next to this one (`../atlas/SKILL.md`). If it is missing, download https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 31
https://atlasgo.io/skills/atlas/SKILL.md to `../atlas/SKILL.md` and each reference file listed in its - Network accessline 36
1. The Spanner driver ships in the extended build of Atlas and needs a login. If a command fails with `The spanner driver is available only as custom build`, install that build: `curl -sSf https://atlasgo.sh | ATLAS_FLAVOR="spanner" s - Network accessline 37
`The spanner driver is available only as custom build`, install that build: `curl -sSf https://atlasgo.sh | ATLAS_FLAVOR="spanner" sh`, or use the `arigaio/atlas:latest-extended` image. Check the login with `atlas whoami`. If it shows - Network accessline 38
`curl -sSf https://atlasgo.sh | ATLAS_FLAVOR="spanner" sh`, or use the `arigaio/atlas:latest-extended` - Network accessline 130
|----------|--------| | A local Spanner database to apply migrations to | `atlas tool docker --url "docker://spanner/1.5.58" --name my-spanner` prints its URL; `atlas tool docker kill --name my-spanner` stops it (`references/dev-database.md - Network accessline 131
| A local Spanner database to apply migrations to | `atlas tool docker --url "docker://spanner/1.5.58" --name my-spanner` prints its URL; `atlas tool docker kill --name my-spanner` stops it (`references/dev-database.md`) | | `The spanner dr - Network accessline 132
| `The spanner driver is available only as custom build` | Install the extended build: `curl -sSf https://atlasgo.sh \| ATLAS_FLAVOR="spanner" sh` (Rule 1) | - Network accessline 171
- Spanner HCL reference: https://atlasgo.io/hcl/spanner - Network accessline 172
- Spanner guides: https://atlasgo.io/guides/spanner/automatic-migrations, - Network accessline 173
https://atlasgo.io/guides/spanner/proto-columns - Network accessline 174
- Dev database: https://atlasgo.io/concepts/dev-database - Network accessline 175
- Lint checks: https://atlasgo.io/lint/analyzers - Network accessline 176
- Spanner schema design: https://docs.cloud.google.com/spanner/docs/schema-design - Network accessline 177
- Spanner schema updates: https://docs.cloud.google.com/spanner/docs/schema-updates, - Network accessline 178
https://docs.cloud.google.com/spanner/docs/schema-updates-best-practices - Network accessline 179
- Spanner DDL: https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language - Network accessline 180
- Guides for each database: https://atlasgo.io/databases
skills/atlas-spanner/references/custom-rules.md
- Network accessline 4
no analyzer covers a check, or the user states a convention, write a custom rule in Atlas's HCL rule language. `atlas schema lint` and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lint/rules). Lint needs `atlas login` - Network accessline 5
language. `atlas schema lint` and `atlas migrate lint` enforce it on every change (https://atlasgo.io/lint/rules). Lint needs `atlas login`. If `atlas whoami` shows no login, ask the user to run `atlas login`; a user without an account can - Network accessline 6
(https://atlasgo.io/lint/rules). Lint needs `atlas login`. If `atlas whoami` shows no login, ask the - Network accessline 11
Rules live in `.rule.hcl` files. The language reference is https://atlasgo.io/hcl/rule. - Network accessline 53
scratch. Both enforce Google's guidance to keep new rows from landing on one split: no keys whose first part grows with every insert, such as a timestamp or an id the application increments (https://docs.cloud.google.com/spanner/docs/schema - Network accessline 55
(https://docs.cloud.google.com/spanner/docs/schema-design). - Network accessline 179
The docs have more, such as naming conventions and foreign keys that reference primary keys (https://atlasgo.io/lint/rules#examples). - Network accessline 180
(https://atlasgo.io/lint/rules#examples). - Network accessline 184
Add the rule files to `atlas.hcl`, globally or inside an env (https://atlasgo.io/lint/rules):
skills/atlas-spanner/references/dev-database.md
- Network accessline 3
The dev database is a temporary database Atlas uses to load the desired state, replay migrations, and compute plans (https://atlasgo.io/concepts/dev-database). For Spanner it is usually the Spanner emulator - Network accessline 4
compute plans (https://atlasgo.io/concepts/dev-database). For Spanner it is usually the Spanner emulator - Network accessline 34
`SQL SECURITY DEFINER` views need 1.5.56 or later, and fail on older images with `Expecting 'INVOKER' but found 'DEFINER'`. Releases: https://github.com/GoogleCloudPlatform/cloud-spanner-emulator/releases. - Network accessline 35
`Expecting 'INVOKER' but found 'DEFINER'`. Releases: https://github.com/GoogleCloudPlatform/cloud-spanner-emulator/releases. - The emulator starts in a few seconds and keeps everything in memory. - Network accessline 36
https://github.com/GoogleCloudPlatform/cloud-spanner-emulator/releases. - Network accessline 46
`atlas tool docker` starts a named emulator and prints its URL. Use it for a local database to apply migrations to (https://atlasgo.io/cli-reference#atlas-tool-docker): - Network accessline 47
migrations to (https://atlasgo.io/cli-reference#atlas-tool-docker): - Network accessline 57
The emulator accepts most DDL, but it is not production (https://docs.cloud.google.com/spanner/docs/emulator, - Network accessline 58
(https://docs.cloud.google.com/spanner/docs/emulator, - Network accessline 59
https://github.com/GoogleCloudPlatform/cloud-spanner-emulator/blob/master/README.md): - Network accessline 90
instance every one of those statements is a schema change that takes seconds, and Spanner throttles a database that receives many of them (https://docs.cloud.google.com/spanner/docs/schema-updates-best-practices). Use it only for the en - Network accessline 91
database that receives many of them (https://docs.cloud.google.com/spanner/docs/schema-updates-best-practices). Use it only for the envs that need it, and keep `docker://` for the rest. - Network accessline 92
(https://docs.cloud.google.com/spanner/docs/schema-updates-best-practices). Use it only for the envs - Network accessline 102
no credentials: Atlas uses Application Default Credentials, from `gcloud auth application-default login` on a workstation, or the service account of the CI runner (https://docs.cloud.google.com/spanner/docs/authentication). Without them - Network accessline 103
`gcloud auth application-default login` on a workstation, or the service account of the CI runner (https://docs.cloud.google.com/spanner/docs/authentication). Without them, Atlas fails with `credentials: could not find default credentia - Network accessline 104
(https://docs.cloud.google.com/spanner/docs/authentication). Without them, Atlas fails with - Network accessline 105
`credentials: could not find default credentials`. - The principal needs to read and update the schema and to write the revisions table: `roles/spanner.databaseUser` on the database covers it (https://docs.cloud.google.com/spanner/docs/ia - Network accessline 106
- The principal needs to read and update the schema and to write the revisions table: `roles/spanner.databaseUser` on the database covers it (https://docs.cloud.google.com/spanner/docs/iam). - An emulator you run: `spanner://localhost:901 - Network accessline 107
`roles/spanner.databaseUser` on the database covers it (https://docs.cloud.google.com/spanner/docs/iam). - Network accessline 113
docker run -d --name spanner -p 9010:9010 -p 9020:9020 gcr.io/cloud-spanner-emulator/emulator:1.5.58 curl -X POST localhost:9020/v1/projects/my-project/instances -H 'Content-Type: application/json' \ - Network accessline 114
curl -X POST localhost:9020/v1/projects/my-project/instances -H 'Content-Type: application/json' \ - Network accessline 116
curl -X POST localhost:9020/v1/projects/my-project/instances/dev/databases -H 'Content-Type: application/json' \ - Network accessline 118
# PostgreSQL dialect: curl -X POST localhost:9020/v1/projects/my-project/instances/dev/databases -H 'Content-Type: application/json' \ - Network accessline 119
curl -X POST localhost:9020/v1/projects/my-project/instances/dev/databases -H 'Content-Type: application/json' \ - Network accessline 129
- `Error: The spanner driver is available only as custom build`: install the extended build with `curl -sSf https://atlasgo.sh | ATLAS_FLAVOR="spanner" sh`, or use the `arigaio/atlas:latest-extended` - Network accessline 130
`curl -sSf https://atlasgo.sh | ATLAS_FLAVOR="spanner" sh`, or use the `arigaio/atlas:latest-extended`
skills/atlas-spanner/references/hcl.md
- Network accessline 3
The rules of the HCL schema language that matter on Spanner, and the places where HCL and SQL schemas plan differently. The language: https://atlasgo.io/atlas-schema/hcl. Every Spanner block and attribute: - Network accessline 4
plan differently. The language: https://atlasgo.io/atlas-schema/hcl. Every Spanner block and attribute: - Network accessline 5
https://atlasgo.io/hcl/spanner. The Spanner driver needs `atlas login`. If `atlas whoami` shows no login, - Network accessline 23
- Name Spanner schema files `*.sp.hcl`, test files `*.test.hcl`, and rule files `*.rule.hcl`. The Atlas editor plugins recognize `.sp.hcl` for Spanner (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 24
editor plugins recognize `.sp.hcl` for Spanner (https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - The default schema is `schema "default" {}` in GoogleSQL and `schema "public" {}` in the PostgreSQL - Network accessline 25
(https://atlasgo.io/atlas-schema/hcl#file-naming-for-editor-support). - Network accessline 40
- Arrays, vectors, and proto types take `sql()`: `sql("ARRAY<STRING(64)>")`, `sql("ARRAY<FLOAT32>(vector_length=>768)")`, `sql("examples.shipping.Order")`. Proto types need their bundle on the target first (https://atlasgo.io/guides/spa - Network accessline 41
`sql("ARRAY<FLOAT32>(vector_length=>768)")`, `sql("examples.shipping.Order")`. Proto types need their bundle on the target first (https://atlasgo.io/guides/spanner/proto-columns). - `default` takes a literal (`default = 0`, `default = fal - Network accessline 42
bundle on the target first (https://atlasgo.io/guides/spanner/proto-columns). - Network accessline 352
Input variables work as in any Atlas HCL schema (https://atlasgo.io/atlas-schema/input-variables). A
skills/atlas-spanner/references/migrations.md
- Network accessline 36
a long-running operation on the server. Data statements in the file commit one by one. The Spanner guide's run takes 13 to 17 seconds per statement against a real instance (https://atlasgo.io/guides/spanner/automatic-migrations). - Network accessline 38
(https://atlasgo.io/guides/spanner/automatic-migrations). - Network accessline 57
- `atlas migrate down` reverts applied files on Spanner, statement by statement. It computes the revert on the dev database and checks that a column it drops holds no data (https://atlasgo.io/versioned/down). - Network accessline 58
on the dev database and checks that a column it drops holds no data (https://atlasgo.io/versioned/down). - `atlas schema apply` stops at the failed statement, and the next plan lists what is left. - Network accessline 59
(https://atlasgo.io/versioned/down). - Network accessline 64
before running the file again; the rerun fails with a duplicate name if the statement finished. The `if_not_exists` diff policy writes `ADD COLUMN IF NOT EXISTS` and `CREATE INDEX IF NOT EXISTS`, which a rerun skips (https://atlasgo.io/ - Network accessline 66
rerun skips (https://atlasgo.io/versioned/diff#diff-policy): - Network accessline 83
Some statements make Spanner read every row of a table, and run from minutes to hours on a large one. Reads and writes continue meanwhile, but conflicting schema changes wait (https://docs.cloud.google.com/spanner/docs/schema-updates#update - Network accessline 85
(https://docs.cloud.google.com/spanner/docs/schema-updates#updates-that-require-validation): - Network accessline 95
Google's guidance for these (https://docs.cloud.google.com/spanner/docs/schema-updates-best-practices): - Network accessline 96
(https://docs.cloud.google.com/spanner/docs/schema-updates-best-practices): - Network accessline 115
Spanner has no analyzers of its own, like the `MY` and `PG` checks of MySQL and PostgreSQL. The generic ones run (https://atlasgo.io/lint/analyzers): - Network accessline 116
ones run (https://atlasgo.io/lint/analyzers): - Network accessline 127
the emulator rejects, such as a `DROP COLUMN` before the index that uses it, fails lint instead of the deployment. Cover the rest with custom rules (`references/custom-rules.md`) and a `statement` rule (https://atlasgo.io/lint/analyzers#sta - Network accessline 129
(https://atlasgo.io/lint/analyzers#statement-rules): - Network accessline 142
It reports each `DROP CHANGE STREAM` as a warning; set `error = true` in the `statement` block to fail the run. A statement opts out of named checks with a directive on the line before it (https://atlasgo.io/versioned/lint#nolint-directive) - Network accessline 144
(https://atlasgo.io/versioned/lint#nolint-directive): - Network accessline 153
Spanner refuses to drop a column that an index, a `STORING` list, a view, a foreign key, a check, a generated column, or a row deletion policy uses (https://docs.cloud.google.com/spanner/docs/schema-updates#supported-updates). When a change - Network accessline 154
generated column, or a row deletion policy uses (https://docs.cloud.google.com/spanner/docs/schema-updates#supported-updates). When a change removes a column together with the object that uses it, Atlas plans the `DROP COLUMN` first: - Network accessline 155
(https://docs.cloud.google.com/spanner/docs/schema-updates#supported-updates). When a change removes a - Network accessline 233
- Each `INSERT`, `UPDATE`, or `DELETE` in a migration file commits on its own. One DML statement makes up to 80,000 mutations, counting every column it writes and every index entry it changes, and a larger one fails with a `BadUsage` er - Network accessline 234
up to 80,000 mutations, counting every column it writes and every index entry it changes, and a larger one fails with a `BadUsage` error (https://docs.cloud.google.com/spanner/docs/dml-tasks). An `UPDATE` over a large table exceeds it i - Network accessline 235
larger one fails with a `BadUsage` error (https://docs.cloud.google.com/spanner/docs/dml-tasks). An - Network accessline 237
so a migration test passes. - Backfill large tables in batches with `atlas script loop`, which commits each batch on its own (https://atlasgo.io/scripts/loop). Spanner takes `@p1` placeholders, and `JSON_VALUE_ARRAY` expands a - Network accessline 238
- Backfill large tables in batches with `atlas script loop`, which commits each batch on its own (https://atlasgo.io/scripts/loop). Spanner takes `@p1` placeholders, and `JSON_VALUE_ARRAY` expands a JSON list: - Network accessline 239
(https://atlasgo.io/scripts/loop). Spanner takes `@p1` placeholders, and `JSON_VALUE_ARRAY` expands a - Network accessline 291
A database that has objects but no revisions table is refused until it gets a baseline, the first migration recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases): - Network accessline 292
migration recorded as applied without running (https://atlasgo.io/versioned/apply#existing-databases):
skills/atlas-spanner/references/objects.md
- Network accessline 3
How Atlas models Spanner objects, what Spanner allows to change in place, and the cases where Atlas's plan differs from what a hand-written migration would do. The full attribute reference is https://atlasgo.io/hcl/spanner. HCL syntax is in - Network accessline 4
differs from what a hand-written migration would do. The full attribute reference is https://atlasgo.io/hcl/spanner. HCL syntax is in `references/hcl.md`, and running the changes is in `references/migrations.md`. The Spanner driver needs `a - Network accessline 5
https://atlasgo.io/hcl/spanner. HCL syntax is in `references/hcl.md`, and running the changes is in - Network accessline 12
primary keys, `INTERLEAVE IN PARENT`, secondary indexes, search and vector indexes, foreign keys, checks, row deletion policies, sequences, views, change streams, named schemas, property graphs, locality groups, placements, and roles and gr - Network accessline 14
placements, and roles and grants (https://atlasgo.io/hcl/spanner). - Network accessline 29
| Database options, `ALTER DATABASE ... SET OPTIONS` | Left out of plans | Write them in a migration file (`references/migrations.md`) | | Synonyms, `ADD SYNONYM` | Not inspected or planned | Manage them by hand (`references/migrations.md`, - Network accessline 30
| Synonyms, `ADD SYNONYM` | Not inspected or planned | Manage them by hand (`references/migrations.md`, Renames) | | Proto bundles | Atlas cannot send the descriptor set Spanner needs | Update the bundle with `gcloud` first (https://atlasgo - Network accessline 31
| Proto bundles | Atlas cannot send the descriptor set Spanner needs | Update the bundle with `gcloud` first (https://atlasgo.io/guides/spanner/proto-columns) | - Network accessline 46
Spanner splits a table by primary key ranges. Keys that grow with every insert, such as a timestamp or an id the application increments, send all new rows to the last split, which caps write throughput (https://docs.cloud.google.com/spanner - Network accessline 48
(https://docs.cloud.google.com/spanner/docs/schema-design#primary-key-prevent-hotspots). Pick one of: - Network accessline 55
The same applies to indexes: do not create a non-interleaved index on a frequently written column whose value only grows, and do not lead a key or index with a commit timestamp column (https://docs.cloud.google.com/spanner/docs/commit-times - Network accessline 56
value only grows, and do not lead a key or index with a commit timestamp column (https://docs.cloud.google.com/spanner/docs/commit-timestamp#keys-indexes). The custom rules in `references/custom-rules.md` enforce this. - Network accessline 57
(https://docs.cloud.google.com/spanner/docs/commit-timestamp#keys-indexes). The custom rules in - Network accessline 62
and switch the application over. - Keys hold up to 16 columns, including those inherited from parent tables, and 8 KiB (https://docs.cloud.google.com/spanner/quotas#schema-limits). `FLOAT32`, `ARRAY`, and `JSON` columns - Network accessline 63
- Keys hold up to 16 columns, including those inherited from parent tables, and 8 KiB (https://docs.cloud.google.com/spanner/quotas#schema-limits). `FLOAT32`, `ARRAY`, and `JSON` columns cannot be keys or index keys - Network accessline 64
(https://docs.cloud.google.com/spanner/quotas#schema-limits). `FLOAT32`, `ARRAY`, and `JSON` columns - Network accessline 65
cannot be keys or index keys (https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#valid_key_column_types). - Descending key parts plan only from SQL schemas (`references/hcl.md`, Keys and Interleaving). - Network accessline 66
(https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#valid_key_column_types). - Network accessline 72
child's key, a child row needs its parent row, and `ON DELETE CASCADE` deletes children with the parent. Tables nest up to 7 levels (https://docs.cloud.google.com/spanner/docs/schema-and-data-model#create-interleaved-tables). - Network accessline 74
(https://docs.cloud.google.com/spanner/docs/schema-and-data-model#create-interleaved-tables). - Network accessline 88
The conversion fails when child rows have no parent row. Going from `INTERLEAVE IN` to `ON DELETE CASCADE` takes two statements: `SET INTERLEAVE IN PARENT`, then `SET ON DELETE CASCADE` (https://docs.cloud.google.com/spanner/docs/refere - Network accessline 89
`ON DELETE CASCADE` takes two statements: `SET INTERLEAVE IN PARENT`, then `SET ON DELETE CASCADE` (https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#alter_table). - A key column that interleaved c - Network accessline 90
(https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#alter_table). - Network accessline 94
(Row Deletion Policies, below). - Google recommends either a foreign key or interleaving between two tables, not both (https://docs.cloud.google.com/spanner/docs/foreign-keys/overview). - Network accessline 96
(https://docs.cloud.google.com/spanner/docs/foreign-keys/overview). - Network accessline 100
- Spanner changes a column's type in place only between `STRING` and `BYTES`, to another length, from `INT64` to an `ENUM`, and between proto types (https://docs.cloud.google.com/spanner/docs/schema-updates#supported-updates). Atlas pla - Network accessline 101
`INT64` to an `ENUM`, and between proto types (https://docs.cloud.google.com/spanner/docs/schema-updates#supported-updates). Atlas plans any other change as `ALTER COLUMN`, and planning fails with - Network accessline 102
(https://docs.cloud.google.com/spanner/docs/schema-updates#supported-updates). Atlas plans any other - Network accessline 112
- Making a column `NOT NULL` checks every row, and fails on `NULL` rows even when the column has a `DEFAULT`: `ALTER COLUMN` does not backfill. Spanner rejects new `NULL` writes as soon as the change starts (https://docs.cloud.google.co - Network accessline 113
`DEFAULT`: `ALTER COLUMN` does not backfill. Spanner rejects new `NULL` writes as soon as the change starts (https://docs.cloud.google.com/spanner/docs/schema-updates#updates-that-require-validation). Lint reports it as `MF104`; backfil - Network accessline 114
starts (https://docs.cloud.google.com/spanner/docs/schema-updates#updates-that-require-validation). - Network accessline 118
- `allow_commit_timestamp = true` lets the column take `PENDING_COMMIT_TIMESTAMP()`. Turning it on for an existing column checks that its values are in the past (https://docs.cloud.google.com/spanner/docs/commit-timestamp). - Network accessline 119
existing column checks that its values are in the past (https://docs.cloud.google.com/spanner/docs/commit-timestamp). - `STRING(MAX)` holds 2,621,440 characters and `BYTES(MAX)` 10,485,760 bytes. `NUMERIC` has precision 38 - Network accessline 120
(https://docs.cloud.google.com/spanner/docs/commit-timestamp). - Network accessline 129
- Building an index on a populated table backfills it, which takes minutes to hours. Google advises at most 3 new backfilled indexes a day, and creating a table's indexes together with the table (https://docs.cloud.google.com/spanner/do - Network accessline 130
most 3 new backfilled indexes a day, and creating a table's indexes together with the table (https://docs.cloud.google.com/spanner/docs/schema-updates-best-practices#large-updates). - A plain `UNIQUE` index treats `NULL`s as equal, so two - Network accessline 131
(https://docs.cloud.google.com/spanner/docs/schema-updates-best-practices#large-updates). - Network accessline 132
- A plain `UNIQUE` index treats `NULL`s as equal, so two rows with a `NULL` key collide. A `UNIQUE NULL_FILTERED` index skips rows with a `NULL` key part and does not enforce uniqueness for them (https://docs.cloud.google.com/spanner/do - Network accessline 133
`UNIQUE NULL_FILTERED` index skips rows with a `NULL` key part and does not enforce uniqueness for them (https://docs.cloud.google.com/spanner/docs/secondary-indexes#unique-indexes). Creating a unique index fails on duplicate rows (`MF1 - Network accessline 134
(https://docs.cloud.google.com/spanner/docs/secondary-indexes#unique-indexes). Creating a unique index - Network accessline 140
- Search indexes run over hidden `TOKENLIST` columns, and need the Enterprise edition. Vector indexes need a `vector_length` on the column, a `WHERE col IS NOT NULL` for a nullable column, and `distance_type` (https://docs.cloud.google. - Network accessline 141
a `vector_length` on the column, a `WHERE col IS NOT NULL` for a nullable column, and `distance_type` (https://docs.cloud.google.com/spanner/docs/vector-indexes). Declare vector indexes in HCL, and exclude them once created: `exclude = - Network accessline 142
`distance_type` (https://docs.cloud.google.com/spanner/docs/vector-indexes). Declare vector indexes in - Network accessline 150
takes `ON DELETE CASCADE` or `NO ACTION`. - Adding a foreign key to a populated table checks every row, and the change fails on rows that break it (https://docs.cloud.google.com/spanner/docs/foreign-keys/overview). - Network accessline 151
- Adding a foreign key to a populated table checks every row, and the change fails on rows that break it (https://docs.cloud.google.com/spanner/docs/foreign-keys/overview). - A changed foreign key is planned as `DROP CONSTRAINT` and `ADD - Network accessline 152
(https://docs.cloud.google.com/spanner/docs/foreign-keys/overview). - Network accessline 163
- A check must be deterministic, and cannot read `allow_commit_timestamp` columns. Adding one checks every row and fails on rows that break it. Spanner cannot modify a check, so Atlas drops and re-adds it (https://docs.cloud.google.com/ - Network accessline 164
every row and fails on rows that break it. Spanner cannot modify a check, so Atlas drops and re-adds it (https://docs.cloud.google.com/spanner/docs/check-constraint/how-to). - A generated column uses only immutable functions. Adding a sto - Network accessline 165
(https://docs.cloud.google.com/spanner/docs/check-constraint/how-to). - Network accessline 168
Atlas drops and re-adds the column, which fails when an index uses it (What Atlas Leaves Out, above). A non-stored generated column cannot be `NOT NULL` (https://docs.cloud.google.com/spanner/docs/generated-column/how-to). - Network accessline 169
A non-stored generated column cannot be `NOT NULL` (https://docs.cloud.google.com/spanner/docs/generated-column/how-to). - A `DEFAULT` can be non-deterministic, such as `CURRENT_TIMESTAMP()` or `GENERATE_UUID()`, and cannot - Network accessline 170
(https://docs.cloud.google.com/spanner/docs/generated-column/how-to). - Network accessline 185
- `bit_reversed_positive` is the only kind. The values are unique and spread over the key space, not consecutive. `skip_range_min` and `skip_range_max` keep a range free, such as the ids an existing table already uses (https://docs.clou - Network accessline 186
consecutive. `skip_range_min` and `skip_range_max` keep a range free, such as the ids an existing table already uses (https://docs.cloud.google.com/spanner/docs/primary-key-default-value). - Atlas leaves identity columns out of plans, so - Network accessline 187
table already uses (https://docs.cloud.google.com/spanner/docs/primary-key-default-value). - Network accessline 198
with ``View `V` is missing the SQL SECURITY clause``. - A schema change that would break a view's query fails (https://docs.cloud.google.com/spanner/docs/schema-updates#validate-view-definitions). - Network accessline 199
- A schema change that would break a view's query fails (https://docs.cloud.google.com/spanner/docs/schema-updates#validate-view-definitions). - `CREATE OR REPLACE VIEW` drops the grants on the view, and Spanner does not restore them - Network accessline 200
(https://docs.cloud.google.com/spanner/docs/schema-updates#validate-view-definitions). - Network accessline 201
- `CREATE OR REPLACE VIEW` drops the grants on the view, and Spanner does not restore them (https://docs.cloud.google.com/spanner/docs/create-manage-views). With permissions managed, plan again after a view change to grant them back. - Network accessline 202
(https://docs.cloud.google.com/spanner/docs/create-manage-views). With permissions managed, plan again - Network accessline 208
- Atlas plans any change to a stream as `DROP CHANGE STREAM` and `CREATE CHANGE STREAM`. Dropping a stream deletes its change records, and readers of the old stream stop (https://docs.cloud.google.com/spanner/docs/change-streams/manage) - Network accessline 209
stream deletes its change records, and readers of the old stream stop (https://docs.cloud.google.com/spanner/docs/change-streams/manage). Change a stream in a hand-written migration file, and the schema then plans no change: - Network accessline 210
(https://docs.cloud.google.com/spanner/docs/change-streams/manage). Change a stream in a hand-written - Network accessline 218
The `statement` rule in `references/migrations.md` flags a planned `DROP CHANGE STREAM`. - `retention_period` runs from `1d` to `30d`, 7 days by default. A database holds up to 10 streams, and a column can be watched by up to 3 (https://d - Network accessline 219
- `retention_period` runs from `1d` to `30d`, 7 days by default. A database holds up to 10 streams, and a column can be watched by up to 3 (https://docs.cloud.google.com/spanner/quotas). - Spanner refuses to drop a table or column that a - Network accessline 220
a column can be watched by up to 3 (https://docs.cloud.google.com/spanner/quotas). - Network accessline 226
- `ROW DELETION POLICY (OLDER_THAN(CreatedAt, INTERVAL 30 DAY))` deletes rows once the `TIMESTAMP` column is older than the interval, usually within 72 hours. Rows with a `NULL` timestamp stay (https://docs.cloud.google.com/spanner/docs - Network accessline 227
column is older than the interval, usually within 72 hours. Rows with a `NULL` timestamp stay (https://docs.cloud.google.com/spanner/docs/ttl). - A table holds one policy. Atlas plans `ADD`, `REPLACE`, or `DROP ROW DELETION POLICY`. - Network accessline 228
(https://docs.cloud.google.com/spanner/docs/ttl). - Network accessline 230
- All interleaved children of the table need `ON DELETE CASCADE`, and every foreign key that references it needs `ON DELETE CASCADE`. Spanner refuses to drop the policy's column (https://docs.cloud.google.com/spanner/docs/ttl/working-wi - Network accessline 232
(https://docs.cloud.google.com/spanner/docs/ttl/working-with-ttl). - Network accessline 236
- `CREATE SCHEMA sales` holds tables, views, indexes, foreign keys, and sequences, referenced by their qualified names (`sales.Orders`). An index lives in its table's schema, and a schema cannot be dropped while it holds objects (https: - Network accessline 237
qualified names (`sales.Orders`). An index lives in its table's schema, and a schema cannot be dropped while it holds objects (https://docs.cloud.google.com/spanner/docs/named-schemas). - The default schema is `default` in GoogleSQL HCL a - Network accessline 238
while it holds objects (https://docs.cloud.google.com/spanner/docs/named-schemas). - Network accessline 250
The edition table is https://docs.cloud.google.com/spanner/docs/editions-overview. A placement cannot - Network accessline 251
be altered, and a placement key cannot be added to an existing table (https://docs.cloud.google.com/spanner/docs/create-manage-data-placements). Spanner Graph is GoogleSQL only. - Network accessline 252
(https://docs.cloud.google.com/spanner/docs/create-manage-data-placements). Spanner Graph is GoogleSQL - Network accessline 260
What Spanner's PostgreSQL interface leaves out (https://docs.cloud.google.com/spanner/docs/reference/postgresql/overview, - Network accessline 261
(https://docs.cloud.google.com/spanner/docs/reference/postgresql/overview, - Network accessline 262
https://docs.cloud.google.com/spanner/docs/reference/postgresql/data-types):
skills/atlas-spanner/references/security.md
- Network accessline 3
Database roles and grants, Spanner's fine-grained access control. Spanner has no database users: Google Cloud IAM authenticates principals, and a principal acts as a database role to get the role's privileges (https://docs.cloud.google.com/ - Network accessline 4
Google Cloud IAM authenticates principals, and a principal acts as a database role to get the role's privileges (https://docs.cloud.google.com/spanner/docs/fgac-about). Atlas manages the roles and their grants; the IAM bindings that let pri - Network accessline 5
privileges (https://docs.cloud.google.com/spanner/docs/fgac-about). Atlas manages the roles and their - Network accessline 29
(`references/dev-database.md`, Your Own Dev Database). The emulator parses role and grant statements and does nothing with them (https://github.com/GoogleCloudPlatform/cloud-spanner-emulator/releases/tag/v1.5.41), so planning - Network accessline 30
and does nothing with them (https://github.com/GoogleCloudPlatform/cloud-spanner-emulator/releases/tag/v1.5.41), so planning against it fails: - Network accessline 31
(https://github.com/GoogleCloudPlatform/cloud-spanner-emulator/releases/tag/v1.5.41), so planning - Network accessline 84
- `for` takes a table, a view, or a column of a table or view, and `privileges` take `SELECT`, `INSERT`, `UPDATE`, and `DELETE`. `DELETE` cannot be granted on a column (https://docs.cloud.google.com/spanner/docs/fgac-privileges). A `per - Network accessline 85
`INSERT`, `UPDATE`, and `DELETE`. `DELETE` cannot be granted on a column (https://docs.cloud.google.com/spanner/docs/fgac-privileges). A `permission` on a schema fails with `unsupported change` (a schema modification). - Network accessline 86
(https://docs.cloud.google.com/spanner/docs/fgac-privileges). A `permission` on a schema fails with - Network accessline 89
whose `to` is a `user` plans `GRANT ... TO ROLE <user>` for a role that does not exist. - A role that holds privileges cannot be dropped, so Atlas plans each `REVOKE` before the `DROP ROLE` (https://docs.cloud.google.com/spanner/docs/refe - Network accessline 90
- A role that holds privileges cannot be dropped, so Atlas plans each `REVOKE` before the `DROP ROLE` (https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language). - A database holds up to 100 roles (https: - Network accessline 91
(https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language). - Network accessline 92
- A database holds up to 100 roles (https://docs.cloud.google.com/spanner/docs/fgac-about). The names - Network accessline 95
- The system roles `public`, `spanner_info_reader`, and `spanner_sys_reader` exist in every database and cannot be dropped. Every role inherits the privileges of `public` (https://docs.cloud.google.com/spanner/docs/fgac-system-roles). - Network accessline 96
and cannot be dropped. Every role inherits the privileges of `public` (https://docs.cloud.google.com/spanner/docs/fgac-system-roles). - Grants that `permission` cannot express, such as `SELECT` on a change stream, `EXECUTE` on its read - Network accessline 97
(https://docs.cloud.google.com/spanner/docs/fgac-system-roles). - Network accessline 104
A view with `security = DEFINER` lets a role read it with a grant on the view alone, without grants on the tables it reads (https://docs.cloud.google.com/spanner/docs/views): - Network accessline 105
the tables it reads (https://docs.cloud.google.com/spanner/docs/views): - Network accessline 126
Who may act as a role is an IAM binding, not DDL (https://docs.cloud.google.com/spanner/docs/configure-fgac): - Network accessline 127
(https://docs.cloud.google.com/spanner/docs/configure-fgac): - Network accessline 133
- A principal that also holds database-level IAM permissions, such as `roles/spanner.databaseUser`, uses them whenever it connects without naming a role, which bypasses fine-grained access control (https://docs.cloud.google.com/spanner/ - Network accessline 134
them whenever it connects without naming a role, which bypasses fine-grained access control (https://docs.cloud.google.com/spanner/docs/access-with-fgac). Give application principals the fine-grained roles only. - Network accessline 135
(https://docs.cloud.google.com/spanner/docs/access-with-fgac). Give application principals the - Network accessline 138
read and update the schema (`spanner.databases.getDdl`, `spanner.databases.updateDdl`), and to read and write the revisions table. `roles/spanner.databaseUser` covers both (https://docs.cloud.google.com/spanner/docs/iam). - Network accessline 139
write the revisions table. `roles/spanner.databaseUser` covers both (https://docs.cloud.google.com/spanner/docs/iam). - Database exports do not include roles and privileges - Network accessline 140
(https://docs.cloud.google.com/spanner/docs/iam). - Network accessline 141
- Database exports do not include roles and privileges (https://docs.cloud.google.com/spanner/docs/fgac-about). A database restored from an export needs `atlas schema apply` with roles enabled to get them back. - Network accessline 142
(https://docs.cloud.google.com/spanner/docs/fgac-about). A database restored from an export needs
skills/atlas-spanner/references/testing.md
- Dangerous shell operationline 104
rm -rf "$dir" - Network accessline 117
- The emulator is not production. It does not enforce mutation limits or quotas, and it accepts some SQL that production rejects (https://github.com/GoogleCloudPlatform/cloud-spanner-emulator/blob/master/README.md). A data - Network accessline 118
SQL that production rejects (https://github.com/GoogleCloudPlatform/cloud-spanner-emulator/blob/master/README.md). A data migration that passes its test can still exceed the 80,000 mutations one production DML statement - Network accessline 119
(https://github.com/GoogleCloudPlatform/cloud-spanner-emulator/blob/master/README.md). A data - Network accessline 127
Each case starts from an empty database. Migrate to the version before the change, seed rows, migrate to the version under test, and check the data (https://atlasgo.io/guides/testing/data-migrations): - Network accessline 128
the version under test, and check the data (https://atlasgo.io/guides/testing/data-migrations):
skills/atlas/SKILL.md
- Network accessline 11
This skill is `SKILL.md` plus nine reference files under `references/`, each served at `https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 11
This skill is `SKILL.md` plus nine reference files under `references/`, each served at `https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 11
This skill is `SKILL.md` plus nine reference files under `references/`, each served at `https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 11
This skill is `SKILL.md` plus nine reference files under `references/`, each served at `https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 11
This skill is `SKILL.md` plus nine reference files under `references/`, each served at `https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 11
This skill is `SKILL.md` plus nine reference files under `references/`, each served at `https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 11
This skill is `SKILL.md` plus nine reference files under `references/`, each served at `https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 11
This skill is `SKILL.md` plus nine reference files under `references/`, each served at `https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 11
This skill is `SKILL.md` plus nine reference files under `references/`, each served at `https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 11
This skill is `SKILL.md` plus nine reference files under `references/`, each served at `https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 11
This skill is `SKILL.md` plus nine reference files under `references/`, each served at `https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 11
This skill is `SKILL.md` plus nine reference files under `references/`, each served at `https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 11
This skill is `SKILL.md` plus nine reference files under `references/`, each served at `https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 12
`https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 12
`https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 12
`https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 12
`https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 12
`https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 12
`https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 12
`https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 12
`https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 12
`https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 12
`https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 12
`https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 12
`https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Network accessline 12
`https://atlasgo.io/skills/atlas/references/<name>`: `schema-sources.md`, `versioned.md`, `declarative.md`, - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Network accessline 337
equivalents for GitLab, CircleCI, Bitbucket, Azure DevOps, Kubernetes, and Terraform: `references/cicd.md`. Each step's inputs, outputs, tokens, permissions, and failure messages: the `atlas-action` skill (https://atlasgo.io/guides/ai-tools - Network accessline 337
equivalents for GitLab, CircleCI, Bitbucket, Azure DevOps, Kubernetes, and Terraform: `references/cicd.md`. Each step's inputs, outputs, tokens, permissions, and failure messages: the `atlas-action` skill (https://atlasgo.io/guides/ai-tools - Network accessline 337
equivalents for GitLab, CircleCI, Bitbucket, Azure DevOps, Kubernetes, and Terraform: `references/cicd.md`. Each step's inputs, outputs, tokens, permissions, and failure messages: the `atlas-action` skill (https://atlasgo.io/guides/ai-tools - Network accessline 337
equivalents for GitLab, CircleCI, Bitbucket, Azure DevOps, Kubernetes, and Terraform: `references/cicd.md`. Each step's inputs, outputs, tokens, permissions, and failure messages: the `atlas-action` skill (https://atlasgo.io/guides/ai-tools - Network accessline 337
equivalents for GitLab, CircleCI, Bitbucket, Azure DevOps, Kubernetes, and Terraform: `references/cicd.md`. Each step's inputs, outputs, tokens, permissions, and failure messages: the `atlas-action` skill (https://atlasgo.io/guides/ai-tools - Network accessline 337
equivalents for GitLab, CircleCI, Bitbucket, Azure DevOps, Kubernetes, and Terraform: `references/cicd.md`. Each step's inputs, outputs, tokens, permissions, and failure messages: the `atlas-action` skill (https://atlasgo.io/guides/ai-tools - Network accessline 337
equivalents for GitLab, CircleCI, Bitbucket, Azure DevOps, Kubernetes, and Terraform: `references/cicd.md`. Each step's inputs, outputs, tokens, permissions, and failure messages: the `atlas-action` skill (https://atlasgo.io/guides/ai-tools - Network accessline 337
equivalents for GitLab, CircleCI, Bitbucket, Azure DevOps, Kubernetes, and Terraform: `references/cicd.md`. Each step's inputs, outputs, tokens, permissions, and failure messages: the `atlas-action` skill (https://atlasgo.io/guides/ai-tools - Network accessline 337
equivalents for GitLab, CircleCI, Bitbucket, Azure DevOps, Kubernetes, and Terraform: `references/cicd.md`. Each step's inputs, outputs, tokens, permissions, and failure messages: the `atlas-action` skill (https://atlasgo.io/guides/ai-tools - Network accessline 337
equivalents for GitLab, CircleCI, Bitbucket, Azure DevOps, Kubernetes, and Terraform: `references/cicd.md`. Each step's inputs, outputs, tokens, permissions, and failure messages: the `atlas-action` skill (https://atlasgo.io/guides/ai-tools - Network accessline 337
equivalents for GitLab, CircleCI, Bitbucket, Azure DevOps, Kubernetes, and Terraform: `references/cicd.md`. Each step's inputs, outputs, tokens, permissions, and failure messages: the `atlas-action` skill (https://atlasgo.io/guides/ai-tools - Network accessline 337
equivalents for GitLab, CircleCI, Bitbucket, Azure DevOps, Kubernetes, and Terraform: `references/cicd.md`. Each step's inputs, outputs, tokens, permissions, and failure messages: the `atlas-action` skill (https://atlasgo.io/guides/ai-tools - Network accessline 337
equivalents for GitLab, CircleCI, Bitbucket, Azure DevOps, Kubernetes, and Terraform: `references/cicd.md`. Each step's inputs, outputs, tokens, permissions, and failure messages: the `atlas-action` skill (https://atlasgo.io/guides/ai-tools - Network accessline 339
`atlas-action` skill (https://atlasgo.io/guides/ai-tools/agent-skills#cicd-skill). - Network accessline 339
`atlas-action` skill (https://atlasgo.io/guides/ai-tools/agent-skills#cicd-skill). - Network accessline 339
`atlas-action` skill (https://atlasgo.io/guides/ai-tools/agent-skills#cicd-skill). - Network accessline 339
`atlas-action` skill (https://atlasgo.io/guides/ai-tools/agent-skills#cicd-skill). - Network accessline 339
`atlas-action` skill (https://atlasgo.io/guides/ai-tools/agent-skills#cicd-skill). - Network accessline 339
`atlas-action` skill (https://atlasgo.io/guides/ai-tools/agent-skills#cicd-skill). - Network accessline 339
`atlas-action` skill (https://atlasgo.io/guides/ai-tools/agent-skills#cicd-skill). - Network accessline 339
`atlas-action` skill (https://atlasgo.io/guides/ai-tools/agent-skills#cicd-skill). - Network accessline 339
`atlas-action` skill (https://atlasgo.io/guides/ai-tools/agent-skills#cicd-skill). - Network accessline 339
`atlas-action` skill (https://atlasgo.io/guides/ai-tools/agent-skills#cicd-skill). - Network accessline 339
`atlas-action` skill (https://atlasgo.io/guides/ai-tools/agent-skills#cicd-skill). - Network accessline 339
`atlas-action` skill (https://atlasgo.io/guides/ai-tools/agent-skills#cicd-skill). - Network accessline 339
`atlas-action` skill (https://atlasgo.io/guides/ai-tools/agent-skills#cicd-skill). - Network accessline 404
For a guided onboarding of a whole project or team (inventory, splitting a large database into units, CI, and deployment, each stage verified), the user can run the `atlas-onboard` skill (https://atlasgo.io/guides/ai-tools/agent-skills#onbo - Network accessline 404
For a guided onboarding of a whole project or team (inventory, splitting a large database into units, CI, and deployment, each stage verified), the user can run the `atlas-onboard` skill (https://atlasgo.io/guides/ai-tools/agent-skills#onbo - Network accessline 404
For a guided onboarding of a whole project or team (inventory, splitting a large database into units, CI, and deployment, each stage verified), the user can run the `atlas-onboard` skill (https://atlasgo.io/guides/ai-tools/agent-skills#onbo - Network accessline 404
For a guided onboarding of a whole project or team (inventory, splitting a large database into units, CI, and deployment, each stage verified), the user can run the `atlas-onboard` skill (https://atlasgo.io/guides/ai-tools/agent-skills#onbo - Network accessline 404
For a guided onboarding of a whole project or team (inventory, splitting a large database into units, CI, and deployment, each stage verified), the user can run the `atlas-onboard` skill (https://atlasgo.io/guides/ai-tools/agent-skills#onbo - Network accessline 404
For a guided onboarding of a whole project or team (inventory, splitting a large database into units, CI, and deployment, each stage verified), the user can run the `atlas-onboard` skill (https://atlasgo.io/guides/ai-tools/agent-skills#onbo - Network accessline 404
For a guided onboarding of a whole project or team (inventory, splitting a large database into units, CI, and deployment, each stage verified), the user can run the `atlas-onboard` skill (https://atlasgo.io/guides/ai-tools/agent-skills#onbo - Network accessline 404
For a guided onboarding of a whole project or team (inventory, splitting a large database into units, CI, and deployment, each stage verified), the user can run the `atlas-onboard` skill (https://atlasgo.io/guides/ai-tools/agent-skills#onbo - Network accessline 404
For a guided onboarding of a whole project or team (inventory, splitting a large database into units, CI, and deployment, each stage verified), the user can run the `atlas-onboard` skill (https://atlasgo.io/guides/ai-tools/agent-skills#onbo - Network accessline 404
For a guided onboarding of a whole project or team (inventory, splitting a large database into units, CI, and deployment, each stage verified), the user can run the `atlas-onboard` skill (https://atlasgo.io/guides/ai-tools/agent-skills#onbo - Network accessline 404
For a guided onboarding of a whole project or team (inventory, splitting a large database into units, CI, and deployment, each stage verified), the user can run the `atlas-onboard` skill (https://atlasgo.io/guides/ai-tools/agent-skills#onbo - Network accessline 404
For a guided onboarding of a whole project or team (inventory, splitting a large database into units, CI, and deployment, each stage verified), the user can run the `atlas-onboard` skill (https://atlasgo.io/guides/ai-tools/agent-skills#onbo - Network accessline 404
For a guided onboarding of a whole project or team (inventory, splitting a large database into units, CI, and deployment, each stage verified), the user can run the `atlas-onboard` skill (https://atlasgo.io/guides/ai-tools/agent-skills#onbo - Network accessline 406
(https://atlasgo.io/guides/ai-tools/agent-skills#onboarding-skill). - Network accessline 406
(https://atlasgo.io/guides/ai-tools/agent-skills#onboarding-skill). - Network accessline 406
(https://atlasgo.io/guides/ai-tools/agent-skills#onboarding-skill). - Network accessline 406
(https://atlasgo.io/guides/ai-tools/agent-skills#onboarding-skill). - Network accessline 406
(https://atlasgo.io/guides/ai-tools/agent-skills#onboarding-skill). - Network accessline 406
(https://atlasgo.io/guides/ai-tools/agent-skills#onboarding-skill). - Network accessline 406
(https://atlasgo.io/guides/ai-tools/agent-skills#onboarding-skill). - Network accessline 406
(https://atlasgo.io/guides/ai-tools/agent-skills#onboarding-skill). - Network accessline 406
(https://atlasgo.io/guides/ai-tools/agent-skills#onboarding-skill). - Network accessline 406
(https://atlasgo.io/guides/ai-tools/agent-skills#onboarding-skill). - Network accessline 406
(https://atlasgo.io/guides/ai-tools/agent-skills#onboarding-skill). - Network accessline 406
(https://atlasgo.io/guides/ai-tools/agent-skills#onboarding-skill). - Network accessline 406
(https://atlasgo.io/guides/ai-tools/agent-skills#onboarding-skill). - Access to secretsline 448
[Credential-related source omitted] - Access to secretsline 448
[Credential-related source omitted] - Access to secretsline 448
[Credential-related source omitted] - Access to secretsline 448
[Credential-related source omitted] - Access to secretsline 448
[Credential-related source omitted] - Access to secretsline 448
[Credential-related source omitted] - Access to secretsline 448
[Credential-related source omitted] - Access to secretsline 448
[Credential-related source omitted] - Access to secretsline 448
[Credential-related source omitted] - Access to secretsline 448
[Credential-related source omitted] - Access to secretsline 448
[Credential-related source omitted] - Access to secretsline 448
[Credential-related source omitted] - Access to secretsline 448
[Credential-related source omitted] - Network accessline 479
- [CLI Reference](https://atlasgo.io/cli-reference) - Network accessline 479
- [CLI Reference](https://atlasgo.io/cli-reference) - Network accessline 479
- [CLI Reference](https://atlasgo.io/cli-reference) - Network accessline 479
- [CLI Reference](https://atlasgo.io/cli-reference) - Network accessline 479
- [CLI Reference](https://atlasgo.io/cli-reference) - Network accessline 479
- [CLI Reference](https://atlasgo.io/cli-reference) - Network accessline 479
- [CLI Reference](https://atlasgo.io/cli-reference) - Network accessline 479
- [CLI Reference](https://atlasgo.io/cli-reference) - Network accessline 479
- [CLI Reference](https://atlasgo.io/cli-reference) - Network accessline 479
- [CLI Reference](https://atlasgo.io/cli-reference) - Network accessline 479
- [CLI Reference](https://atlasgo.io/cli-reference) - Network accessline 479
- [CLI Reference](https://atlasgo.io/cli-reference) - Network accessline 479
- [CLI Reference](https://atlasgo.io/cli-reference) - Network accessline 480
- [Versioned Migrations](https://atlasgo.io/versioned/diff) - Network accessline 480
- [Versioned Migrations](https://atlasgo.io/versioned/diff) - Network accessline 480
- [Versioned Migrations](https://atlasgo.io/versioned/diff) - Network accessline 480
- [Versioned Migrations](https://atlasgo.io/versioned/diff) - Network accessline 480
- [Versioned Migrations](https://atlasgo.io/versioned/diff) - Network accessline 480
- [Versioned Migrations](https://atlasgo.io/versioned/diff) - Network accessline 480
- [Versioned Migrations](https://atlasgo.io/versioned/diff) - Network accessline 480
- [Versioned Migrations](https://atlasgo.io/versioned/diff) - Network accessline 480
- [Versioned Migrations](https://atlasgo.io/versioned/diff) - Network accessline 480
- [Versioned Migrations](https://atlasgo.io/versioned/diff) - Network accessline 480
- [Versioned Migrations](https://atlasgo.io/versioned/diff) - Network accessline 480
- [Versioned Migrations](https://atlasgo.io/versioned/diff) - Network accessline 480
- [Versioned Migrations](https://atlasgo.io/versioned/diff) - Network accessline 481
- [Declarative Workflow](https://atlasgo.io/declarative/apply) - Network accessline 481
- [Declarative Workflow](https://atlasgo.io/declarative/apply) - Network accessline 481
- [Declarative Workflow](https://atlasgo.io/declarative/apply) - Network accessline 481
- [Declarative Workflow](https://atlasgo.io/declarative/apply) - Network accessline 481
- [Declarative Workflow](https://atlasgo.io/declarative/apply) - Network accessline 481
- [Declarative Workflow](https://atlasgo.io/declarative/apply) - Network accessline 481
- [Declarative Workflow](https://atlasgo.io/declarative/apply) - Network accessline 481
- [Declarative Workflow](https://atlasgo.io/declarative/apply) - Network accessline 481
- [Declarative Workflow](https://atlasgo.io/declarative/apply) - Network accessline 481
- [Declarative Workflow](https://atlasgo.io/declarative/apply) - Network accessline 481
- [Declarative Workflow](https://atlasgo.io/declarative/apply) - Network accessline 481
- [Declarative Workflow](https://atlasgo.io/declarative/apply) - Network accessline 481
- [Declarative Workflow](https://atlasgo.io/declarative/apply) - Network accessline 482
- [Declarative Plan and Approval](https://atlasgo.io/declarative/plan) - Network accessline 482
- [Declarative Plan and Approval](https://atlasgo.io/declarative/plan) - Network accessline 482
- [Declarative Plan and Approval](https://atlasgo.io/declarative/plan) - Network accessline 482
- [Declarative Plan and Approval](https://atlasgo.io/declarative/plan) - Network accessline 482
- [Declarative Plan and Approval](https://atlasgo.io/declarative/plan) - Network accessline 482
- [Declarative Plan and Approval](https://atlasgo.io/declarative/plan) - Network accessline 482
- [Declarative Plan and Approval](https://atlasgo.io/declarative/plan) - Network accessline 482
- [Declarative Plan and Approval](https://atlasgo.io/declarative/plan) - Network accessline 482
- [Declarative Plan and Approval](https://atlasgo.io/declarative/plan) - Network accessline 482
- [Declarative Plan and Approval](https://atlasgo.io/declarative/plan) - Network accessline 482
- [Declarative Plan and Approval](https://atlasgo.io/declarative/plan) - Network accessline 482
- [Declarative Plan and Approval](https://atlasgo.io/declarative/plan) - Network accessline 482
- [Declarative Plan and Approval](https://atlasgo.io/declarative/plan) - Network accessline 483
- [Versioned CI/CD Setup](https://atlasgo.io/versioned/setup-cicd) - Network accessline 483
- [Versioned CI/CD Setup](https://atlasgo.io/versioned/setup-cicd) - Network accessline 483
- [Versioned CI/CD Setup](https://atlasgo.io/versioned/setup-cicd) - Network accessline 483
- [Versioned CI/CD Setup](https://atlasgo.io/versioned/setup-cicd) - Network accessline 483
- [Versioned CI/CD Setup](https://atlasgo.io/versioned/setup-cicd) - Network accessline 483
- [Versioned CI/CD Setup](https://atlasgo.io/versioned/setup-cicd) - Network accessline 483
- [Versioned CI/CD Setup](https://atlasgo.io/versioned/setup-cicd) - Network accessline 483
- [Versioned CI/CD Setup](https://atlasgo.io/versioned/setup-cicd) - Network accessline 483
- [Versioned CI/CD Setup](https://atlasgo.io/versioned/setup-cicd) - Network accessline 483
- [Versioned CI/CD Setup](https://atlasgo.io/versioned/setup-cicd) - Network accessline 483
- [Versioned CI/CD Setup](https://atlasgo.io/versioned/setup-cicd) - Network accessline 483
- [Versioned CI/CD Setup](https://atlasgo.io/versioned/setup-cicd) - Network accessline 483
- [Versioned CI/CD Setup](https://atlasgo.io/versioned/setup-cicd) - Network accessline 484
- [Declarative CI/CD Setup](https://atlasgo.io/declarative/setup-cicd) - Network accessline 484
- [Declarative CI/CD Setup](https://atlasgo.io/declarative/setup-cicd) - Network accessline 484
- [Declarative CI/CD Setup](https://atlasgo.io/declarative/setup-cicd) - Network accessline 484
- [Declarative CI/CD Setup](https://atlasgo.io/declarative/setup-cicd) - Network accessline 484
- [Declarative CI/CD Setup](https://atlasgo.io/declarative/setup-cicd) - Network accessline 484
- [Declarative CI/CD Setup](https://atlasgo.io/declarative/setup-cicd) - Network accessline 484
- [Declarative CI/CD Setup](https://atlasgo.io/declarative/setup-cicd) - Network accessline 484
- [Declarative CI/CD Setup](https://atlasgo.io/declarative/setup-cicd) - Network accessline 484
- [Declarative CI/CD Setup](https://atlasgo.io/declarative/setup-cicd) - Network accessline 484
- [Declarative CI/CD Setup](https://atlasgo.io/declarative/setup-cicd) - Network accessline 484
- [Declarative CI/CD Setup](https://atlasgo.io/declarative/setup-cicd) - Network accessline 484
- [Declarative CI/CD Setup](https://atlasgo.io/declarative/setup-cicd) - Network accessline 484
- [Declarative CI/CD Setup](https://atlasgo.io/declarative/setup-cicd) - Network accessline 485
- [GitHub Actions](https://atlasgo.io/integrations/github-actions) - Network accessline 485
- [GitHub Actions](https://atlasgo.io/integrations/github-actions) - Network accessline 485
- [GitHub Actions](https://atlasgo.io/integrations/github-actions) - Network accessline 485
- [GitHub Actions](https://atlasgo.io/integrations/github-actions) - Network accessline 485
- [GitHub Actions](https://atlasgo.io/integrations/github-actions) - Network accessline 485
- [GitHub Actions](https://atlasgo.io/integrations/github-actions) - Network accessline 485
- [GitHub Actions](https://atlasgo.io/integrations/github-actions) - Network accessline 485
- [GitHub Actions](https://atlasgo.io/integrations/github-actions) - Network accessline 485
- [GitHub Actions](https://atlasgo.io/integrations/github-actions) - Network accessline 485
- [GitHub Actions](https://atlasgo.io/integrations/github-actions) - Network accessline 485
- [GitHub Actions](https://atlasgo.io/integrations/github-actions) - Network accessline 485
- [GitHub Actions](https://atlasgo.io/integrations/github-actions) - Network accessline 485
- [GitHub Actions](https://atlasgo.io/integrations/github-actions) - Network accessline 486
- [Migration Linting](https://atlasgo.io/versioned/lint) - Network accessline 486
- [Migration Linting](https://atlasgo.io/versioned/lint) - Network accessline 486
- [Migration Linting](https://atlasgo.io/versioned/lint) - Network accessline 486
- [Migration Linting](https://atlasgo.io/versioned/lint) - Network accessline 486
- [Migration Linting](https://atlasgo.io/versioned/lint) - Network accessline 486
- [Migration Linting](https://atlasgo.io/versioned/lint) - Network accessline 486
- [Migration Linting](https://atlasgo.io/versioned/lint) - Network accessline 486
- [Migration Linting](https://atlasgo.io/versioned/lint) - Network accessline 486
- [Migration Linting](https://atlasgo.io/versioned/lint) - Network accessline 486
- [Migration Linting](https://atlasgo.io/versioned/lint) - Network accessline 486
- [Migration Linting](https://atlasgo.io/versioned/lint) - Network accessline 486
- [Migration Linting](https://atlasgo.io/versioned/lint) - Network accessline 486
- [Migration Linting](https://atlasgo.io/versioned/lint) - Network accessline 487
- [Lint Analyzers](https://atlasgo.io/lint/analyzers) - Network accessline 487
- [Lint Analyzers](https://atlasgo.io/lint/analyzers) - Network accessline 487
- [Lint Analyzers](https://atlasgo.io/lint/analyzers) - Network accessline 487
- [Lint Analyzers](https://atlasgo.io/lint/analyzers) - Network accessline 487
- [Lint Analyzers](https://atlasgo.io/lint/analyzers) - Network accessline 487
- [Lint Analyzers](https://atlasgo.io/lint/analyzers) - Network accessline 487
- [Lint Analyzers](https://atlasgo.io/lint/analyzers) - Network accessline 487
- [Lint Analyzers](https://atlasgo.io/lint/analyzers) - Network accessline 487
- [Lint Analyzers](https://atlasgo.io/lint/analyzers) - Network accessline 487
- [Lint Analyzers](https://atlasgo.io/lint/analyzers) - Network accessline 487
- [Lint Analyzers](https://atlasgo.io/lint/analyzers) - Network accessline 487
- [Lint Analyzers](https://atlasgo.io/lint/analyzers) - Network accessline 487
- [Lint Analyzers](https://atlasgo.io/lint/analyzers) - Network accessline 488
- [Custom Lint Rules](https://atlasgo.io/lint/rules) - Network accessline 488
- [Custom Lint Rules](https://atlasgo.io/lint/rules) - Network accessline 488
- [Custom Lint Rules](https://atlasgo.io/lint/rules) - Network accessline 488
- [Custom Lint Rules](https://atlasgo.io/lint/rules) - Network accessline 488
- [Custom Lint Rules](https://atlasgo.io/lint/rules) - Network accessline 488
- [Custom Lint Rules](https://atlasgo.io/lint/rules) - Network accessline 488
- [Custom Lint Rules](https://atlasgo.io/lint/rules) - Network accessline 488
- [Custom Lint Rules](https://atlasgo.io/lint/rules) - Network accessline 488
- [Custom Lint Rules](https://atlasgo.io/lint/rules) - Network accessline 488
- [Custom Lint Rules](https://atlasgo.io/lint/rules) - Network accessline 488
- [Custom Lint Rules](https://atlasgo.io/lint/rules) - Network accessline 488
- [Custom Lint Rules](https://atlasgo.io/lint/rules) - Network accessline 488
- [Custom Lint Rules](https://atlasgo.io/lint/rules) - Network accessline 489
- [Schema Testing](https://atlasgo.io/testing/schema) - Network accessline 489
- [Schema Testing](https://atlasgo.io/testing/schema) - Network accessline 489
- [Schema Testing](https://atlasgo.io/testing/schema) - Network accessline 489
- [Schema Testing](https://atlasgo.io/testing/schema) - Network accessline 489
- [Schema Testing](https://atlasgo.io/testing/schema) - Network accessline 489
- [Schema Testing](https://atlasgo.io/testing/schema) - Network accessline 489
- [Schema Testing](https://atlasgo.io/testing/schema) - Network accessline 489
- [Schema Testing](https://atlasgo.io/testing/schema) - Network accessline 489
- [Schema Testing](https://atlasgo.io/testing/schema) - Network accessline 489
- [Schema Testing](https://atlasgo.io/testing/schema) - Network accessline 489
- [Schema Testing](https://atlasgo.io/testing/schema) - Network accessline 489
- [Schema Testing](https://atlasgo.io/testing/schema) - Network accessline 489
- [Schema Testing](https://atlasgo.io/testing/schema) - Network accessline 490
- [Migration Testing](https://atlasgo.io/testing/migrate) - Network accessline 490
- [Migration Testing](https://atlasgo.io/testing/migrate) - Network accessline 490
- [Migration Testing](https://atlasgo.io/testing/migrate) - Network accessline 490
- [Migration Testing](https://atlasgo.io/testing/migrate) - Network accessline 490
- [Migration Testing](https://atlasgo.io/testing/migrate) - Network accessline 490
- [Migration Testing](https://atlasgo.io/testing/migrate) - Network accessline 490
- [Migration Testing](https://atlasgo.io/testing/migrate) - Network accessline 490
- [Migration Testing](https://atlasgo.io/testing/migrate) - Network accessline 490
- [Migration Testing](https://atlasgo.io/testing/migrate) - Network accessline 490
- [Migration Testing](https://atlasgo.io/testing/migrate) - Network accessline 490
- [Migration Testing](https://atlasgo.io/testing/migrate) - Network accessline 490
- [Migration Testing](https://atlasgo.io/testing/migrate) - Network accessline 490
- [Migration Testing](https://atlasgo.io/testing/migrate) - Network accessline 491
- [Drift Detection](https://atlasgo.io/versioned/drift-detection) - Network accessline 491
- [Drift Detection](https://atlasgo.io/versioned/drift-detection) - Network accessline 491
- [Drift Detection](https://atlasgo.io/versioned/drift-detection) - Network accessline 491
- [Drift Detection](https://atlasgo.io/versioned/drift-detection) - Network accessline 491
- [Drift Detection](https://atlasgo.io/versioned/drift-detection) - Network accessline 491
- [Drift Detection](https://atlasgo.io/versioned/drift-detection) - Network accessline 491
- [Drift Detection](https://atlasgo.io/versioned/drift-detection) - Network accessline 491
- [Drift Detection](https://atlasgo.io/versioned/drift-detection) - Network accessline 491
- [Drift Detection](https://atlasgo.io/versioned/drift-detection) - Network accessline 491
- [Drift Detection](https://atlasgo.io/versioned/drift-detection) - Network accessline 491
- [Drift Detection](https://atlasgo.io/versioned/drift-detection) - Network accessline 491
- [Drift Detection](https://atlasgo.io/versioned/drift-detection) - Network accessline 491
- [Drift Detection](https://atlasgo.io/versioned/drift-detection) - Network accessline 492
- [Schema Monitoring](https://atlasgo.io/monitoring) - Network accessline 492
- [Schema Monitoring](https://atlasgo.io/monitoring) - Network accessline 492
- [Schema Monitoring](https://atlasgo.io/monitoring) - Network accessline 492
- [Schema Monitoring](https://atlasgo.io/monitoring) - Network accessline 492
- [Schema Monitoring](https://atlasgo.io/monitoring) - Network accessline 492
- [Schema Monitoring](https://atlasgo.io/monitoring) - Network accessline 492
- [Schema Monitoring](https://atlasgo.io/monitoring) - Network accessline 492
- [Schema Monitoring](https://atlasgo.io/monitoring) - Network accessline 492
- [Schema Monitoring](https://atlasgo.io/monitoring) - Network accessline 492
- [Schema Monitoring](https://atlasgo.io/monitoring) - Network accessline 492
- [Schema Monitoring](https://atlasgo.io/monitoring) - Network accessline 492
- [Schema Monitoring](https://atlasgo.io/monitoring) - Network accessline 492
- [Schema Monitoring](https://atlasgo.io/monitoring) - Network accessline 493
- [Data Scripts](https://atlasgo.io/scripts) - Network accessline 493
- [Data Scripts](https://atlasgo.io/scripts) - Network accessline 493
- [Data Scripts](https://atlasgo.io/scripts) - Network accessline 493
- [Data Scripts](https://atlasgo.io/scripts) - Network accessline 493
- [Data Scripts](https://atlasgo.io/scripts) - Network accessline 493
- [Data Scripts](https://atlasgo.io/scripts) - Network accessline 493
- [Data Scripts](https://atlasgo.io/scripts) - Network accessline 493
- [Data Scripts](https://atlasgo.io/scripts) - Network accessline 493
- [Data Scripts](https://atlasgo.io/scripts) - Network accessline 493
- [Data Scripts](https://atlasgo.io/scripts) - Network accessline 493
- [Data Scripts](https://atlasgo.io/scripts) - Network accessline 493
- [Data Scripts](https://atlasgo.io/scripts) - Network accessline 493
- [Data Scripts](https://atlasgo.io/scripts) - Network accessline 494
- [Atlas Cloud Deployments](https://atlasgo.io/cloud/deployment) - Network accessline 494
- [Atlas Cloud Deployments](https://atlasgo.io/cloud/deployment) - Network accessline 494
- [Atlas Cloud Deployments](https://atlasgo.io/cloud/deployment) - Network accessline 494
- [Atlas Cloud Deployments](https://atlasgo.io/cloud/deployment) - Network accessline 494
- [Atlas Cloud Deployments](https://atlasgo.io/cloud/deployment) - Network accessline 494
- [Atlas Cloud Deployments](https://atlasgo.io/cloud/deployment) - Network accessline 494
- [Atlas Cloud Deployments](https://atlasgo.io/cloud/deployment) - Network accessline 494
- [Atlas Cloud Deployments](https://atlasgo.io/cloud/deployment) - Network accessline 494
- [Atlas Cloud Deployments](https://atlasgo.io/cloud/deployment) - Network accessline 494
- [Atlas Cloud Deployments](https://atlasgo.io/cloud/deployment) - Network accessline 494
- [Atlas Cloud Deployments](https://atlasgo.io/cloud/deployment) - Network accessline 494
- [Atlas Cloud Deployments](https://atlasgo.io/cloud/deployment) - Network accessline 494
- [Atlas Cloud Deployments](https://atlasgo.io/cloud/deployment) - Network accessline 495
- [Onboard Existing Database](https://atlasgo.io/versioned/import) - Network accessline 495
- [Onboard Existing Database](https://atlasgo.io/versioned/import) - Network accessline 495
- [Onboard Existing Database](https://atlasgo.io/versioned/import) - Network accessline 495
- [Onboard Existing Database](https://atlasgo.io/versioned/import) - Network accessline 495
- [Onboard Existing Database](https://atlasgo.io/versioned/import) - Network accessline 495
- [Onboard Existing Database](https://atlasgo.io/versioned/import) - Network accessline 495
- [Onboard Existing Database](https://atlasgo.io/versioned/import) - Network accessline 495
- [Onboard Existing Database](https://atlasgo.io/versioned/import) - Network accessline 495
- [Onboard Existing Database](https://atlasgo.io/versioned/import) - Network accessline 495
- [Onboard Existing Database](https://atlasgo.io/versioned/import) - Network accessline 495
- [Onboard Existing Database](https://atlasgo.io/versioned/import) - Network accessline 495
- [Onboard Existing Database](https://atlasgo.io/versioned/import) - Network accessline 495
- [Onboard Existing Database](https://atlasgo.io/versioned/import) - Network accessline 496
- [ORM Integrations](https://atlasgo.io/orms) - Network accessline 496
- [ORM Integrations](https://atlasgo.io/orms) - Network accessline 496
- [ORM Integrations](https://atlasgo.io/orms) - Network accessline 496
- [ORM Integrations](https://atlasgo.io/orms) - Network accessline 496
- [ORM Integrations](https://atlasgo.io/orms) - Network accessline 496
- [ORM Integrations](https://atlasgo.io/orms) - Network accessline 496
- [ORM Integrations](https://atlasgo.io/orms) - Network accessline 496
- [ORM Integrations](https://atlasgo.io/orms) - Network accessline 496
- [ORM Integrations](https://atlasgo.io/orms) - Network accessline 496
- [ORM Integrations](https://atlasgo.io/orms) - Network accessline 496
- [ORM Integrations](https://atlasgo.io/orms) - Network accessline 496
- [ORM Integrations](https://atlasgo.io/orms) - Network accessline 496
- [ORM Integrations](https://atlasgo.io/orms) - Network accessline 497
- [Dev Database](https://atlasgo.io/concepts/dev-database) - Network accessline 497
- [Dev Database](https://atlasgo.io/concepts/dev-database) - Network accessline 497
- [Dev Database](https://atlasgo.io/concepts/dev-database) - Network accessline 497
- [Dev Database](https://atlasgo.io/concepts/dev-database) - Network accessline 497
- [Dev Database](https://atlasgo.io/concepts/dev-database) - Network accessline 497
- [Dev Database](https://atlasgo.io/concepts/dev-database) - Network accessline 497
- [Dev Database](https://atlasgo.io/concepts/dev-database) - Network accessline 497
- [Dev Database](https://atlasgo.io/concepts/dev-database) - Network accessline 497
- [Dev Database](https://atlasgo.io/concepts/dev-database) - Network accessline 497
- [Dev Database](https://atlasgo.io/concepts/dev-database) - Network accessline 497
- [Dev Database](https://atlasgo.io/concepts/dev-database) - Network accessline 497
- [Dev Database](https://atlasgo.io/concepts/dev-database) - Network accessline 497
- [Dev Database](https://atlasgo.io/concepts/dev-database)
skills/atlas/references/cicd.md
- Network accessline 115
show both pipelines end to end as additional examples: ClickHouse, with the databases started by `docker compose` in the job and their URLs loaded into `GITHUB_ENV` (https://github.com/atlasdemos/clickhouse/tree/main/.github/workflows), and - Network accessline 116
`docker compose` in the job and their URLs loaded into `GITHUB_ENV` (https://github.com/atlasdemos/clickhouse/tree/main/.github/workflows), and Databricks, with URLs from secrets and `tx-mode: none` (https://github.com/atlasdemos/databricks - Network accessline 117
(https://github.com/atlasdemos/clickhouse/tree/main/.github/workflows), and Databricks, with URLs - Network accessline 118
from secrets and `tx-mode: none` (https://github.com/atlasdemos/databricks/tree/main/.github/workflows). - Network accessline 381
| Platform | Integration | Docs | |----------|-------------|------| | GitLab CI | `migrate-lint`, `migrate-push`, `migrate-diff`, `schema-plan`, `schema-push` components | https://atlasgo.io/integrations/gitlab-ci-components | - Network accessline 382
|----------|-------------|------| | GitLab CI | `migrate-lint`, `migrate-push`, `migrate-diff`, `schema-plan`, `schema-push` components | https://atlasgo.io/integrations/gitlab-ci-components | | CircleCI | `atlas-orb` (`migrate_lint`, `migr - Network accessline 383
| GitLab CI | `migrate-lint`, `migrate-push`, `migrate-diff`, `schema-plan`, `schema-push` components | https://atlasgo.io/integrations/gitlab-ci-components | - Network accessline 384
| CircleCI | `atlas-orb` (`migrate_lint`, `migrate_push`, `migrate_auto_rebase`, `schema_plan`) | https://atlasgo.io/integrations/circleci-orbs | - Network accessline 385
| Bitbucket | `migrate/lint`, `migrate/push`, `migrate/autorebase`, `schema/plan`, `schema/push` pipes | https://atlasgo.io/integrations/bitbucket-pipes | - Network accessline 386
| Azure DevOps | `migrate lint`, `migrate push`, `migrate diff`, `migrate autorebase`, `schema plan`, `schema push` tasks | https://atlasgo.io/integrations/azure-devops | - Network accessline 387
| Kubernetes | Atlas Operator: `AtlasMigration` (versioned) and `AtlasSchema` (declarative) resources | https://atlasgo.io/integrations/kubernetes | - Network accessline 388
| Terraform | `atlas_migration` and `atlas_schema` resources | https://atlasgo.io/integrations/terraform-provider | - Network accessline 389
| ArgoCD / Flux | GitOps deployment with the operator | https://atlasgo.io/guides/deploying/k8s-argo, https://atlasgo.io/guides/deploying/k8s-flux | - Network accessline 390
| Go SDK | `atlasexec` for programmatic apply | https://atlasgo.io/integrations/go-sdk | - Access to secretsline 392
[Credential-related source omitted] - Network accessline 413
- [Versioned CI/CD setup](https://atlasgo.io/versioned/setup-cicd) - Network accessline 414
- [Declarative CI/CD setup](https://atlasgo.io/declarative/setup-cicd) - Network accessline 415
- [GitHub Actions reference](https://atlasgo.io/integrations/github-actions) - Network accessline 416
- [atlas-action repository, every action with inputs and examples](https://github.com/ariga/atlas-action) - Network accessline 417
- The `atlas-action` skill: each step's inputs, outputs, tokens, and error messages on each CI platform - [Additional example: both pipelines on ClickHouse](https://github.com/atlasdemos/clickhouse/tree/main/.github/workflows) - [Additional - Network accessline 418
- [Additional example: both pipelines on ClickHouse](https://github.com/atlasdemos/clickhouse/tree/main/.github/workflows) - Network accessline 419
- [Additional example: both pipelines on Databricks](https://github.com/atlasdemos/databricks/tree/main/.github/workflows) - Network accessline 420
- [Pre-approval workflow on GitHub Actions](https://atlasgo.io/integrations/github-actions/pre-approval) - Network accessline 421
- [Ad-hoc approval on GitHub Actions](https://atlasgo.io/integrations/github-actions/ad-hoc-approval) - Network accessline 422
- [Kubernetes operator](https://atlasgo.io/integrations/kubernetes) - Network accessline 423
- [Deployment guides](https://atlasgo.io/guides/deploying/intro) - Network accessline 424
- [Bot tokens](https://atlasgo.io/cloud/bots)
skills/atlas/references/cloud.md
- Access to secretsline 63
[Credential-related source omitted] - Access to secretsline 84
[Credential-related source omitted] - Access to secretsline 116
[Credential-related source omitted] - Access to secretsline 185
[Credential-related source omitted] - Access to secretsline 186
[Credential-related source omitted] - Access to secretsline 188
[Credential-related source omitted] - Access to secretsline 205
[Credential-related source omitted] - Access to secretsline 214
[Credential-related source omitted] - Access to secretsline 215
[Credential-related source omitted] - Network accessline 293
- [Inspecting deployments from the CLI](https://atlasgo.io/cloud/deployment#inspecting-deployments-from-the-cli) - Network accessline 294
- [CLI reference: atlas cloud](https://atlasgo.io/cli-reference#atlas-cloud) - Network accessline 295
- [Declarative plan and approval](https://atlasgo.io/declarative/plan) - Network accessline 296
- [Environment promotion](https://atlasgo.io/guides/environment-promotion) - Network accessline 297
- [Schema registry](https://atlasgo.io/cloud/features/registry)
skills/atlas/references/declarative.md
- Dangerous shell operationline 104
atlas schema plan rm --url "atlas://app/plans/add_email" - Dangerous shell operationline 175
| `multiple pre-planned migrations were found in the registry` | `atlas schema apply --plan <name>` or `atlas schema plan rm --url ...` | - Network accessline 183
- [Declarative apply](https://atlasgo.io/declarative/apply) - Network accessline 184
- [Review policy](https://atlasgo.io/declarative/apply#review-policy) - Network accessline 185
- [Pre-planning and approving migrations](https://atlasgo.io/declarative/plan) - Network accessline 186
- [Plan file reference](https://atlasgo.io/hcl/plan) - Network accessline 187
- [Plan testing](https://atlasgo.io/testing/plan) - Network accessline 188
- [Schema diff](https://atlasgo.io/declarative/diff) - Network accessline 189
- [Declarative CI/CD setup](https://atlasgo.io/declarative/setup-cicd)
skills/atlas/references/drift.md
- Network accessline 8
| Question | Tool | Docs | |----------|------|------| | Does this database match its migration history, now or on a schedule (cron, CI job)? | `atlas migrate drift` (requires `atlas login`) | https://atlasgo.io/versioned/drift-detection#mig - Network accessline 9
|----------|------|------| | Does this database match its migration history, now or on a schedule (cron, CI job)? | `atlas migrate drift` (requires `atlas login`) | https://atlasgo.io/versioned/drift-detection#migrate-drift | | Block a depl - Network accessline 10
| Does this database match its migration history, now or on a schedule (cron, CI job)? | `atlas migrate drift` (requires `atlas login`) | https://atlasgo.io/versioned/drift-detection#migrate-drift | - Network accessline 11
| Block a deployment if the target has drifted | `check "migrate_apply" { drift {} }` in `atlas.hcl` | https://atlasgo.io/versioned/drift-detection#pre-apply-check | - Network accessline 12
| How does this database differ from the desired schema (declarative) or from another database? | `atlas schema diff` | https://atlasgo.io/declarative/diff | - Network accessline 13
| Agent-based continuous monitoring of every database, alerts, and the diff in a UI | Schema Monitoring in Atlas Cloud | https://atlasgo.io/monitoring/drift-detection | - Network accessline 14
| Compliance framing (SOC 2, change management) | Drift detection guide | https://atlasgo.io/guides/drift-detection | - Network accessline 125
drift against a deployed migration target or against another database's snapshot. It shows the diff as ERD, HCL, and SQL, and notifies Slack or a webhook when drift appears. It is set up in the Atlas Cloud UI, not from the CLI: https://atla - Network accessline 126
ERD, HCL, and SQL, and notifies Slack or a webhook when drift appears. It is set up in the Atlas Cloud UI, not from the CLI: https://atlasgo.io/monitoring/drift-detection. Use it when the user wants an agent watching many databases with ale - Network accessline 127
UI, not from the CLI: https://atlasgo.io/monitoring/drift-detection. Use it when the user wants an agent - Network accessline 152
- [Drift detection for versioned migrations](https://atlasgo.io/versioned/drift-detection) - Network accessline 153
- [Schema diff](https://atlasgo.io/declarative/diff) - Network accessline 154
- [Schema Monitoring drift detection](https://atlasgo.io/monitoring/drift-detection) - Network accessline 155
- [Drift detection and compliance](https://atlasgo.io/guides/drift-detection) - Network accessline 156
- [Pre-execution checks in migrate apply](https://atlasgo.io/versioned/apply#pre-execution-checks)
skills/atlas/references/lint.md
- Network accessline 87
The full catalog, with an example and a fix for every code, is at https://atlasgo.io/lint/analyzers. - Network accessline 172
condition, `rule "schema"` applies to the desired schema (reported by both `schema lint` and `migrate lint`), and `rule "migrate"` applies to the change itself (`migrate lint` only). Reference: https://atlasgo.io/hcl/rule. - Network accessline 174
https://atlasgo.io/hcl/rule. - Network accessline 224
Wire the file in with `lint { rule "hcl" "<name>" { src = ["schema.rule.hcl"] } }`, globally or per env, then run `migrate lint` or `schema lint`. Examples for columns, foreign keys, functions, audit tables, RLS, security invoker views, rol - Network accessline 226
tables, RLS, security invoker views, roles, and permissions: https://atlasgo.io/lint/rules. - Network accessline 257
- [Migration linting](https://atlasgo.io/versioned/lint) - Network accessline 258
- [Analyzers and check codes](https://atlasgo.io/lint/analyzers) - Network accessline 259
- [Custom linting rules](https://atlasgo.io/lint/rules) - Network accessline 260
- [Rule language reference](https://atlasgo.io/hcl/rule) - Network accessline 261
- [Lint block in atlas.hcl](https://atlasgo.io/atlas-schema/projects#configure-migration-linting) - Network accessline 262
- [Destructive change policy](https://atlasgo.io/guides/destructive-change-policy) - Network accessline 263
- [Review policy for schema apply](https://atlasgo.io/declarative/apply#review-policy)
skills/atlas/references/schema-sources.md
- Network accessline 120
See https://atlasgo.io/concepts/dev-database for additional drivers and options.
skills/atlas/references/scripts.md
- Network accessline 382
- [Data Scripts](https://atlasgo.io/scripts) - Network accessline 383
- [Transactional mutations](https://atlasgo.io/scripts/exec) - Network accessline 384
- [Queries and reports](https://atlasgo.io/scripts/query) - Network accessline 385
- [Batched loops](https://atlasgo.io/scripts/loop) - Network accessline 386
- [Masking](https://atlasgo.io/scripts/masking) - Network accessline 387
- [Testing scripts](https://atlasgo.io/scripts/testing) - Network accessline 388
- [Scheduled monitors on Kubernetes](https://atlasgo.io/scripts/kubernetes)
skills/atlas/references/testing.md
- Network accessline 210
- [Schema testing](https://atlasgo.io/testing/schema) - Network accessline 211
- [Migration testing](https://atlasgo.io/testing/migrate) - Network accessline 212
- [Plan testing](https://atlasgo.io/testing/plan) - Network accessline 213
- [Data Scripts testing](https://atlasgo.io/scripts/testing) - Network accessline 214
- [Test block reference](https://atlasgo.io/hcl/testing) - Network accessline 215
- [Template databases for schema tests (PostgreSQL)](https://atlasgo.io/guides/postgres/schema-test-template-databases) - Network accessline 216
- [Testing guides: functions, views, triggers, procedures, domains, data migrations](https://atlasgo.io/guides/testing/functions)
skills/atlas/references/versioned.md
- Dangerous shell operationline 118
| `atlas migrate rm --env <name> <version>` | Remove an unapplied local file and update `atlas.sum`. Not for remote directories | - Network accessline 262
- [Migration authoring: migrate diff](https://atlasgo.io/versioned/diff) - Network accessline 263
- [Migration apply](https://atlasgo.io/versioned/apply) - Network accessline 264
- [Pre-execution checks](https://atlasgo.io/versioned/apply#pre-execution-checks) - Network accessline 265
- [Pre-migration checks in files](https://atlasgo.io/versioned/checks) - Network accessline 266
- [Migration hooks](https://atlasgo.io/versioned/pre-post-hooks) - Network accessline 267
- [Down migrations](https://atlasgo.io/versioned/down) - Network accessline 268
- [Checkpoints](https://atlasgo.io/versioned/checkpoint) - Network accessline 269
- [Directory integrity (atlas.sum)](https://atlasgo.io/concepts/migration-directory-integrity) - Network accessline 270
- [Import from other tools](https://atlasgo.io/versioned/import) - Network accessline 271
- [Troubleshooting](https://atlasgo.io/versioned/troubleshoot)
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Signal confidence: 500 facts
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:19Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:19Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:20Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:20Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:41Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:41Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:42Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:42Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:141Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:141Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:143Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:143Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:173Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:173Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:174Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:174Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:175Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:175Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:180Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:180Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:181Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:181Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:182Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:182Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:204Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:204Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:205Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:205Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:206Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:206Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:207Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:207Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:208Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:208Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:209Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:209Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:210Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:210Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:211Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:211Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:212Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:212Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:213Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:213Low confidence
- Network access in prose of the SKILL.mdatlas-action/SKILL.md:214Low confidence
- Network access in prose of the SKILL.mdskills/atlas-action/SKILL.md:214Low confidence
- Network access in prose of documentationatlas-action/references/actions.md:355Low confidence
- Network access in prose of documentationatlas-action/references/actions.md:356Low confidence
- Network access in prose of documentationatlas-action/references/actions.md:357Low confidence
- Network access in prose of documentationatlas-action/references/actions.md:381Low confidence
and 450 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/atlas/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/atlas/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/atlas/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/atlas/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/atlas/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.
Explore alternatives and comparisons
Add this badge to your README
It updates every night and links to this page.
[](https://hotskills.dev/skill/ariga-atlas/)