FAQ
Short answers to what to use, what not to expect, and which guide to open next.
Choosing a workflow
Section titled “Choosing a workflow”My application is not written in Go. Is Ptah for me?
Section titled “My application is not written in Go. Is Ptah for me?”YesThe CLI does not care what language your application is written in, and a desired schema can be SQL, YAML, HCL, or DBML. Go annotations and the Go API are additional ways in, not a condition of use.
I want to describe the final schema instead of writing each ALTER TABLE. Which workflow do I pick?
Section titled “I want to describe the final schema instead of writing each ALTER TABLE. Which workflow do I pick?”Use the desired schema as the source of change. Ptah either generates versioned migrations from it for review and later deployment, or builds and applies a plan directly against the database. The choice turns on whether individual SQL migrations have to stay part of the project history.
I prefer writing migrations by hand. Do I have to declare a schema at all?
Section titled “I prefer writing migrations by hand. Do I have to declare a schema at all?”Noptah migrations create writes empty migration files you fill with your own
SQL. Generated and hand-written migrations share one apply mechanism and can sit
in the same directory.
I already run a database in production. How do I adopt it without recreating tables?
Section titled “I already run a database in production. How do I adopt it without recreating tables?”Start by inspecting the live schema and checking the description you get back.
For the versioned workflow, ptah migrations baseline records the matching
history as already applied without running its SQL against the existing
database.
I want to generate migrations in CI without giving CI access to production. Is that possible?
Section titled “I want to generate migrations in CI without giving CI access to production. Is that possible?”YesIn replay mode Ptah rebuilds the source schema from migration history in a separate disposable database and compares that with the desired schema, so generation needs no production access.
Project, license, support
Section titled “Project, license, support”I have a question the documentation does not answer. Where do I ask?
Section titled “I have a question the documentation does not answer. Where do I ask?”In GitHub Discussions. An answer there stays findable for the next reader, and the reply that solved the question is marked as the answer. Keep the issue tracker for bugs and feature requests; a question that turns out to be a bug moves there.
I want to contribute. Where do I start?
Section titled “I want to contribute. Where do I start?”Start with CONTRIBUTING.md, which covers what makes a report actionable and what a change has to pass. AGENTS.md beside it is the authority on the working rules the CI gates enforce. Open an issue before a change that alters behavior, so the design is settled before the diff exists.
I found a bug. What makes the report actionable?
Section titled “I found a bug. What makes the report actionable?”The exact command, the ptah version output, the engine and server version, and
the smallest schema or migration that reproduces it. Say which binary you ran:
ptah and ptah-compat differ on purpose, so the surface is part of the
report.
I have a feature suggestion. How should I frame it?
Section titled “I have a feature suggestion. How should I frame it?”Describe the task and the outcome you need rather than the flag you have in mind, because the need often already has a spelling. Ptah is pre-GA and the surface still moves, so a suggestion that names a workflow is easier to place than one that names an option. An idea that is still taking shape can start in Ideas and move to an issue once the need is concrete.
What license is Ptah under?
Section titled “What license is Ptah under?”MIT, copyright Denis Voytyuk. ptah license prints the license, the copyright,
the source location, and the Atlas-compatibility attribution notice.
Can I use Ptah in a closed-source commercial product?
Section titled “Can I use Ptah in a closed-source commercial product?”YesMIT permits use, modification, and redistribution, including inside proprietary software, as long as the copyright notice and the license text travel with copies you distribute. Nothing in Ptah asks you to publish your schema or your application.
Does the Atlas compatibility work put anything non-MIT in the source tree?
Section titled “Does the Atlas compatibility work put anything non-MIT in the source tree?”NoThe Ptah tree is implementation-clean and MIT. Atlas-derived Apache-2.0
fixture material lives in the separate ptah-atlas-conformance repository,
which tests Ptah without Ptah importing it.
Is commercial support available?
Section titled “Is commercial support available?”Commercial enquiries go to askstokaro.com. Keep bug reports and feature requests on the issue tracker instead, where they stay public and get labeled.
Two binaries: ptah and ptah-compat
Section titled “Two binaries: ptah and ptah-compat”One question behind three symptoms: the Atlas-shaped surface and the native surface are separate on purpose.
--allow-dirty did not do what I read about. Why?
Section titled “--allow-dirty did not do what I read about. Why?”One spelling covers two unrelated safety questions. On ptah migrations up it
asks for a verified retry of a migration body that failed part-way; on
ptah-compat migrate apply it asks to adopt a database that already holds
objects this history did not create. Neither implies the other, so read the flag
against the command it was typed after. See
Apply migrations.
Why does ptah reject a command that works in ptah-compat, and the other way round?
Section titled “Why does ptah reject a command that works in ptah-compat, and the other way round?”They are different command surfaces, on purpose. Atlas spellings live only in
ptah-compat, and native namespaces (ptah schema, ptah db, ptah migrations) live only in ptah. Check which binary the documentation page you
are reading describes.
The command is in the documentation and my binary does not know it. What do I check?
Section titled “The command is in the documentation and my binary does not know it. What do I check?”Line up the binary version, the documentation version, and the command surface:
ptah and ptah-compat have different command paths. The edge documentation
does not describe any released version.
Coming from another tool
Section titled “Coming from another tool”I pointed ptah migrations up at my existing database and it failed on the first object. Why?
Section titled “I pointed ptah migrations up at my existing database and it failed on the first object. Why?”Native migrations up has no adoption gate, so nothing refuses a database it did
not create, and the first CREATE for an object that already exists fails. Adopt
the database with ptah migrations baseline first; --shadow-db checks that the
baselined history reproduces the schema it was pointed at.
We already have Goose, Flyway, Liquibase, dbmate, or golang-migrate migrations. Do we rewrite the history?
Section titled “We already have Goose, Flyway, Liquibase, dbmate, or golang-migrate migrations. Do we rewrite the history?”Use ptah migrations import for the supported formats. Converting the files and
putting an existing database under management are separate jobs; the second one
still needs a baseline step.
After importing from Flyway, a repeatable migration no longer re-runs when I edit the file. Why?
Section titled “After importing from Flyway, a repeatable migration no longer re-runs when I edit the file. Why?”Import converts it to an ordinary one-time migration on a reserved slot ordered after every versioned file, because the native format has no reapply semantics to convert it into. Make later changes as new migrations, or move that object to a desired-schema workflow.
My Liquibase changelog was rejected on import. What is supported?
Section titled “My Liquibase changelog was rejected on import. What is supported?”The file format is not what decides it. A changeset that carries SQL imports,
whether you wrote it as formatted SQL or as <sql> inside XML, YAML or JSON.
A changeset that carries a typed change such as <createTable> has no SQL to
convert, and one carrying context, contexts, labels or preConditions is
conditional in a way a migration directory cannot express; both are refused by
name rather than half-converted. Rewrite those changesets in Liquibase first,
or leave that history where it is and adopt the database with baseline instead.
Can I replace Atlas with Ptah without rewriting every command and config at once?
Section titled “Can I replace Atlas with Ptah without rewriting every command and config at once?”Partlyptah-compat presents an Atlas-compatible surface for a gradual move. Full
parity is not claimed: check the commands and configuration constructs you
actually use, and either replace an unsupported step with a native command or
leave it in the old workflow for now.
Schema sources and scope
Section titled “Schema sources and scope”I want to split the schema across several files and commands. Can I combine them?
Section titled “I want to split the schema across several files and commands. Can I combine them?”YesCommands that accept composite sources merge several sources into one desired schema, which lets you keep parts separate. Ownership of shared objects still has to be agreed between those parts.
I passed a second file to override the first and got a conflict instead. Why?
Section titled “I passed a second file to override the first and got a conflict instead. Why?”A composite schema is not a last-file-wins mechanism. Matching definitions merge, and contradicting definitions of the same object are refused. Remove the duplicated ownership, or prepare the final description for that environment before handing it to Ptah.
One database holds tables from several services. How do I manage only mine?
Section titled “One database holds tables from several services. How do I manage only mine?”Set an explicit management scope through the schema selection and object filters the command offers. Do not pass one service’s description as the full desired state of a shared database: objects outside the description can land in a drop plan.
I removed a table from the file so Ptah would stop managing it, and now it plans a DROP. Why?
Section titled “I removed a table from the file so Ptah would stop managing it, and now it plans a DROP. Why?”In a desired-schema workflow, an absent object can mean the object should not exist inside the managed scope. To leave the table in place and unmanaged, change the scope rather than deleting its description, and read the plan before applying it.
Can one schema description target both PostgreSQL and SQLite?
Section titled “Can one schema description target both PostgreSQL and SQLite?”Yes, for constructs both engines can express. A shared description does not make engine capabilities equal, so check the rendering and the capability profile for each target and keep engine-specific parts separate.
Ptah understands a construct but refuses to apply it to my database. Why not skip it?
Section titled “Ptah understands a construct but refuses to apply it to my database. Why not skip it?”Skipping can change the meaning of the schema without saying so, for example by dropping a constraint you rely on. Use a construct with the semantics you need that the target engine supports, or reconsider the engine.
My database is listed as supported. Does that mean all of its SQL is supported?
Section titled “My database is listed as supported. Does that mean all of its SQL is supported?”NoSupport depends on the server version, the object type, and the operation:
reading, comparing, generating, or applying. Check the specific capability in the
support matrix and with ptah db capabilities, not the presence of an engine
name in a list.
A statement runs fine in my database, but Ptah will not take it as a desired-schema file. What now?
Section titled “A statement runs fine in my database, but Ptah will not take it as a desired-schema file. What now?”A desired-schema file is read as a description of structure, not as an arbitrary SQL script. Express a change the schema model cannot carry as a hand-written versioned migration and test it against the target engine.
I configured one connection and the command used another. Where do I look?
Section titled “I configured one connection and the command used another. Where do I look?”Check the selected environment, the environment variables, and the explicit CLI
flags, which take precedence. Diagnose the connection with a read-only command
using the same parameters before repeating a schema change. ptah project reports what Ptah makes of a project
file.
Migration history
Section titled “Migration history”There are too many migrations and a fresh database takes too long to build. Can I squash them?
Section titled “There are too many migrations and a fresh database takes too long to build. Can I squash them?”Yes, with ptah migrations checkpoint. A checkpoint carries the resulting
schema, so a new database starts from it and continues with later migrations
instead of replaying the whole chain.
I added a checkpoint and it is not applied on an existing database. Is that a bug?
Section titled “I added a checkpoint and it is not applied on an existing database. Is that a bug?”NoA checkpoint is for the initial build of a database that has no applied history. A database that has been through migrations skips the checkpoint and continues on its normal chain.
After creating a checkpoint, can I delete the earlier migrations?
Section titled “After creating a checkpoint, can I delete the earlier migrations?”NoDo not read a checkpoint as permission to delete history. Existing databases may still need old migrations they have not run, applied history is tied to revision metadata, and speeding up new databases does not require removing the old files.
A database started from a checkpoint has the tables but not the initial data from the old migrations. Why?
Section titled “A database started from a checkpoint has the tables but not the initial data from the old migrations. Why?”NoA checkpoint captures the resulting schema, not table contents. Data a new database needs has to have its own initialization path, such as seed files or managed reference data.
I fixed an already-applied migration and Ptah will not run it again. How do I ship the fix?
Section titled “I fixed an already-applied migration and Ptah will not run it again. How do I ship the fix?”Write a new corrective migration. Editing an applied file does not turn it into a new operation, and it makes the published history mean different things in different environments.
Two branches each added a migration and the order broke after the merge. What now?
Section titled “Two branches each added a migration and the order broke after the merge. What now?”For a migration that is neither published nor applied, ptah migrations rebase
moves it to the end; check the resulting sequence afterwards. For history that
has already been distributed, establish what each environment has first, because
renaming files can give one operation two identities.
Rebase was allowed against my database. Does that make it safe?
Section titled “Rebase was allowed against my database. Does that make it safe?”PartlyThe check speaks for the database you named; it does not prove that nobody applied the migration or pulled it from a registry. Treat published history as shared even when your local database has not seen it yet. See Maintain migration history.
Seed and reference data
Section titled “Seed and reference data”I want test data locally without managing it like a production catalog. What do I use?
Section titled “I want test data locally without managing it like a production catalog. What do I use?”Use environment-scoped seed files for initial filling. Declarative reference data answers a different question: keeping the contents of tables Ptah genuinely manages at a declared state.
I want countries, statuses, or similar lookup tables in Git, updated by migrations. Is that supported?
Section titled “I want countries, statuses, or similar lookup tables in Git, updated by migrations. Is that supported?”YesManaged reference data compares declared rows with the database and generates a migration for the difference. Check the supported way to declare the rows and the gates around updates and deletes in Reference data.
I removed a row from reference data and Ptah wants to delete it from the database. Why?
Section titled “I removed a row from reference data and Ptah wants to delete it from the database. Why?”For a managed lookup table the declaration is the desired contents, so an absent row can mean a deleted row. Do not put user data, or tables the application also writes, under that mode.
I need to fill a new column in a large existing table. Will schema generation do it?
Section titled “I need to fill a new column in a large existing table. Will schema generation do it?”Changing structure and transforming data are separate jobs. A small backfill fits in a hand-written SQL migration; a large, long-running one belongs in a separate process with batching and resumption, sequenced against the schema and application changes.
Rollback and failures
Section titled “Rollback and failures”Can I roll a checkpoint-built database back to a point inside the old history?
Section titled “Can I roll a checkpoint-built database back to a point inside the old history?”PartlyNot by rolling that history back: those individual migrations never ran on this database. Reaching a state before the checkpoint boundary means restoring or rebuilding through the matching history. The supported rollback boundary is in Checkpoints.
The import produced down files. Are all my migrations reversible now?
Section titled “The import produced down files. Are all my migrations reversible now?”NoWhere the source tool carried no rollback SQL, import can leave a placeholder
file. Review those versions and prepare a real recovery path before you rely on
down.
If a down migration exists, can I skip the backup?
Section titled “If a down migration exists, can I skip the backup?”NoDown SQL can restore structure, but it cannot bring back data that earlier operations destroyed. Treat rollback as a transition you designed in advance, not as a general undo.
I rolled back the application, or a Git commit. Does the database follow?
Section titled “I rolled back the application, or a Git commit. Does the database follow?”NoSource state and database state move independently. Decide whether you need a database rollback or a corrective migration forward, and check the remaining schema against the application version you are running.
A migration failed and part of its changes stayed. Why did the transaction not save me?
Section titled “A migration failed and part of its changes stayed. Why did the transaction not save me?”The outcome depends on the transaction mode and on what the engine can carry transactionally for those statements. Do not assume every migration is atomic: check the execution mode and the actual state of the database first.
After a failure Ptah reports a dirty state and refuses the next migrations. What do I do?
Section titled “After a failure Ptah reports a dirty state and refuses the next migrations. What do I do?”Look at the failing version, the statements that ran, and the actual state of the database through the migration diagnostics. Then choose the fix and the intended repair or resume path: clearing the dirty flag does not undo a partial execution.
The process was killed and Ptah will not continue the migration on its own. Why not re-run the SQL?
Section titled “The process was killed and Ptah will not continue the migration on its own. Why not re-run the SQL?”In some non-transactional failures it is unknown whether the last statement committed, so a re-run can perform the operation twice. Establish the result in the database first, then reconcile the metadata with it.
I ran repair or set and the database structure did not change. Why?
Section titled “I ran repair or set and the database structure did not change. Why?”set moves the recorded history boundary without running SQL, and repair
without a resume reconciles the record of the failing migration. Neither replaces
fixing the database itself; both should record a state you have already
established.
Safety gates and CI
Section titled “Safety gates and CI”I set --tx-mode all and a statement still committed on its own. Why?
Section titled “I set --tx-mode all and a statement still committed on its own. Why?”Some statements cannot run inside a transaction on the target engine, and some engines do not carry DDL transactionally at all. The mode asks for one transaction; it cannot grant the engine a capability it lacks.
How do I stop an accidental table or column drop in CI?
Section titled “How do I stop an accidental table or column drop in CI?”Use the destructive-change check at plan or generation time, plus the separate checks at apply time. A warning or a safety report is not a refusal: turn the blocking policy on explicitly.
Ptah marked a change safe. Does that mean no locking and no broken application?
Section titled “Ptah marked a change safe. Does that mean no locking and no broken application?”NoThe classification is not a promise of zero downtime or of compatibility with every reader and writer. For live systems, judge locking, data volume, and rollout order separately, and stage the application and schema change when they are not compatible.
Before adding a constraint I want to know the data satisfies it. Can I stop the migration early?
Section titled “Before adding a constraint I want to know the data satisfies it. Can I stop the migration early?”YesUse pre-migration assertions for conditions you can check in the data. They complement SQL analysis: a statement can be correct and still fail because existing rows do not allow it.
The dry run passed. Why test migrations against a separate database as well?
Section titled “The dry run passed. Why test migrations against a separate database as well?”A dry run shows the intended actions; it does not execute the whole sequence or reach the intermediate states. Replay or shadow verification runs the real execution, and that needs a disposable database.
Can I use my working dev database as the shadow database and save myself one server?
Section titled “Can I use my working dev database as the shadow database and save myself one server?”Partly, only if its contents can genuinely be destroyed. The shadow and replay workflows clear the database to get a reproducible run of the history, which rules out a shared dev, staging, or production database.
I want one person to approve the SQL and another to apply exactly what was approved. How?
Section titled “I want one person to approve the SQL and another to apply exactly what was approved. How?”Save the plan, review it, and use the signed approval at apply time. That separates agreeing to a specific piece of SQL from permission to run whatever plan the tool builds later.
The plan is approved and Ptah says it is stale. Why?
Section titled “The plan is approved and Ptah says it is stale. Why?”A plan is bound to the source state it was built from. If the database moved after that, the earlier approval no longer describes the current conditions, so build and review a new plan.
Two deployment jobs can run migrations at the same time. How do I avoid the race?
Section titled “Two deployment jobs can run migrations at the same time. How do I avoid the race?”Use one agreed migration workflow and a shared lock for a given target. Ptah’s migration lock serializes clients that use the same lock name; it cannot stop other SQL from a client that ignores it.
Reading a check result
Section titled “Reading a check result”Status, compare and drift answer three different questions; exit codes 1 and 2 separate a finding from a failure.
I already changed my local database, and now migrations generate produces nothing. Why?
Section titled “I already changed my local database, and now migrations generate produces nothing. Why?”Generation compares the desired schema with a chosen source state. If the local database already matches it, there is no difference to record. Generate against a database at the previous version, or restore the source state by replaying history.
migrations status says everything is applied, but someone dropped a column by hand. Why did it not notice?
Section titled “migrations status says everything is applied, but someone dropped a column by hand. Why did it not notice?”NoMigration status answers a question about recorded history, not about whether the
live schema matches an expectation. For the second question use ptah schema drift with the desired state.
schema compare shows differences and CI still passes. Why?
Section titled “schema compare shows differences and CI still passes. Why?”compare succeeds by default even when the diff is non-empty. Use compare --exit-code, or schema drift, which fails on drift by default, and keep found
drift and a failed check separate when you read the result.
My check returns 1 and I cannot tell a finding from a failure. What do the codes mean?
Section titled “My check returns 1 and I cannot tell a finding from a failure. What do the codes mean?”1 is an expected negative result, such as drift, lint findings, or pending
migrations. 2 is a command or usage error: bad flags, a connection failure, a
parse failure. Treat them differently in CI.
I turned on object ignores and drift disappeared. Does the database match the schema now?
Section titled “I turned on object ignores and drift disappeared. Does the database match the schema now?”PartlyIt matches within the check you selected, not across the database. Review the filters and the severity threshold: they can keep differences out of a blocking result without removing the differences.
Ptah sees a difference but prints no SQL to fix it. Is it drift or not?
Section titled “Ptah sees a difference but prints no SQL to fix it. Is it drift or not?”Yes, it is drift. A difference does not stop existing because no supported planning operation covers it. Check the reported category and the engine capabilities; a hand-written migration or a change to the desired schema may be needed. See Compare and drift.
A merge, or an edited comment, broke the checksum. Do I run hash and move on?
Section titled “A merge, or an edited comment, broke the checksum. Do I run hash and move on?”Read the diff first: the checksum covers file contents, not only the meaning of the SQL. Restore accidental changes, and re-hash only for edits you decided to keep. Do not use it to paper over a change to shared history.
Why did Ptah apply migrations with no ptah.sum at all? I expected a mandatory check.
Section titled “Why did Ptah apply migrations with no ptah.sum at all? I expected a mandatory check.”NoOn the native surface a missing integrity file is allowed, while a file that
exists is verified. Use --verify-sum where the file has to be present and
checked.
Delivery and registries
Section titled “Delivery and registries”I want to ship migrations without checking out the whole repository. Can I?
Section titled “I want to ship migrations without checking out the whole repository. Can I?”YesPublish the migration directory as an OCI artifact and hand the reference to a supported apply or check command. Pin a digest for a reproducible deployment.
The artifacts are in a private registry. Do I need a Ptah account?
Section titled “The artifacts are in a private registry. Do I need a Ptah account?”NoPtah uses your registry’s credentials, through a Docker credential store or
ptah oci login. Credentials do not belong in the OCI reference itself.
Docker is not installed. Does that rule out a private OCI registry?
Section titled “Docker is not installed. Does that rule out a private OCI registry?”Noptah oci login is a separate authentication path that does not need Docker
installed. Which registry you use and whether a Docker daemon runs are different
questions.
Staging and production point at the same tag and got different migrations. How?
Section titled “Staging and production point at the same tag and got different migrations. How?”NoA tag is a mutable pointer. Promote one verified digest between environments rather than expecting a tag to hold the same contents across two deployments. See OCI registry artifacts.
The digest and the checksum match. Does that mean a trusted publisher produced the artifact?
Section titled “The digest and the checksum match. Does that mean a trusted publisher produced the artifact?”NoThey establish identity and internal consistency, not who published the
bytes. ptah oci verify enforces a policy before an artifact is consumed, and
its require_signature checks that a signature is attached without running any
cryptography. Keep signing and cryptographic verification with cosign or
Notation, and use registry access controls.
Can I use Ptah without a cloud service and without sending my schema to someone else’s registry?
Section titled “Can I use Ptah without a cloud service and without sending my schema to someone else’s registry?”YesThe schema and migration workflows work against local files and your own database, and OCI is an optional delivery route through a registry you choose. AI features and inference need their own review, because they can call external services you configure.
Extend and automate
Section titled “Extend and automate”I want an ER diagram and SVG output asks for Graphviz. Can I avoid installing it?
Section titled “I want an ER diagram and SVG output asks for Graphviz. Can I avoid installing it?”YesChoose Mermaid or DOT output and use a viewer that reads it. Graphviz is needed for the SVG rendering path, not for visualization in general. See Troubleshooting.
I want to embed schema work in my own Go tool instead of shelling out to the CLI. Is that supported?
Section titled “I want to embed schema work in my own Go tool instead of shelling out to the CLI. Is that supported?”Yes, for part of the surface. Use the documented public API: being able to import a package does not make it a stable public contract.
I want an AI agent to prepare migrations without letting it touch production. How do I split the rights?
Section titled “I want an AI agent to prepare migrations without letting it touch production. How do I split the rights?”In MCP and Assist, configure file access and the permitted write classes
separately. On the agent surface, inspecting a database classified production
is denied and no flag on that surface widens it; give the agent verified schema
artifacts for analysis and run production changes through the normal review and
deploy path.
I granted write access and in CI the agent still asks for approval and stops. Why?
Section titled “I granted write access and in CI the agent still asks for approval and stops. Why?”Granting a class of operations and allowing it without a prompt are separate
settings. For a trusted non-interactive job, add --auto-approve for the class
you need; it grants no database access and lifts none of the other gates. See
Configure agent permissions.
Inference migrations
Section titled “Inference migrations”I want to change embedding model without rewriting every live vector at once. Can Ptah help?
Section titled “I want to change embedding model without rewriting every live vector at once. Can Ptah help?”YesFor PostgreSQL with pgvector, use inference migrations: a new generation is built beside the active one, verified, and activated as a separate step. Supported endpoint APIs and limitations are in Inference migrations.
I need a model server, or inference on a GPU. Is that Ptah’s job?
Section titled “I need a model server, or inference on a GPU. Is that Ptah’s job?”NoPtah manages the persisted result of inference; it does not run or host models. Stand up an embedding service with a supported API and connect it as a provider.
The embedding backfill finished and the application still reads the old generation. Why?
Section titled “The embedding backfill finished and the application still reads the old generation. Why?”Finishing a backfill does not verify or switch anything. Verification, cutover, and retiring the old generation are separate decisions; continue the lifecycle rather than deleting the old data by hand.
Kubernetes
Section titled “Kubernetes”I want to manage the schema through Kubernetes and GitOps. Is there an operator?
Section titled “I want to manage the schema through Kubernetes and GitOps. Is there an operator?”YesPtah Operator takes a desired schema from an OCI artifact, plans the change, and manages applying and re-checking it. It is a separate project with its own documentation, releases, and support matrix.
We use versioned migrations. Can the operator run up for us?
Section titled “We use versioned migrations. Can the operator run up for us?”NoPtahSchema reconciles a desired schema, and no resource applies a
migration directory. Deploy a versioned workflow with ptah migrations up
against a pinned artifact from your pipeline or a Job of your own. See
Kubernetes operator.