{"id":13514060,"url":"https://github.com/sqldef/sqldef","last_synced_at":"2026-04-08T15:00:59.134Z","repository":{"id":37733959,"uuid":"146057993","full_name":"sqldef/sqldef","owner":"sqldef","description":"Idempotent schema management for MySQL, PostgreSQL, SQLite, and SQL Server","archived":false,"fork":false,"pushed_at":"2026-04-02T09:53:43.000Z","size":11929,"stargazers_count":3055,"open_issues_count":15,"forks_count":220,"subscribers_count":19,"default_branch":"master","last_synced_at":"2026-04-02T23:40:12.406Z","etag":null,"topics":["database-migrations","declarative-migrations","mariadb","mssql","mysql","postgresql","schema-changes","sqldef","sqlite3"],"latest_commit_sha":null,"homepage":"https://sqldef.github.io","language":"Go","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sqldef.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"k0kubun"}},"created_at":"2018-08-25T02:29:17.000Z","updated_at":"2026-04-02T16:33:18.000Z","dependencies_parsed_at":"2023-10-03T23:20:08.329Z","dependency_job_id":"55b168e9-1de4-4ec3-b585-3ea6e05d09dd","html_url":"https://github.com/sqldef/sqldef","commit_stats":{"total_commits":1286,"total_committers":80,"mean_commits":16.075,"dds":0.4253499222395023,"last_synced_commit":"f7001e768f975aa7bd26cb17fa5b1c1082ee8764"},"previous_names":["sqldef/sqldef","k0kubun/sqldef"],"tags_count":390,"template":false,"template_full_name":null,"purl":"pkg:github/sqldef/sqldef","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sqldef%2Fsqldef","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sqldef%2Fsqldef/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sqldef%2Fsqldef/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sqldef%2Fsqldef/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sqldef","download_url":"https://codeload.github.com/sqldef/sqldef/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sqldef%2Fsqldef/sbom","scorecard":{"id":546237,"data":{"date":"2025-08-11","repo":{"name":"github.com/sqldef/sqldef","commit":"5321b69a640a91ae238dc14be350205b6437c17b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.3,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":4,"reason":"Found 6/13 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":5,"reason":"dependency not pinned by hash detected -- score normalized to 5","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docker.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/docker.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docker.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/docker.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:66: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:69: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:76: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:90: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:93: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:99: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:112: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:114: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:115: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:116: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:117: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:119: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:120: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sqldef.yml:131: update your workflow using https://app.stepsecurity.io/secureworkflow/sqldef/sqldef/sqldef.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Info:   0 out of  19 GitHub-owned GitHubAction dependencies pinned","Info:   7 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'contents' permission set to 'read': .github/workflows/docker.yml:18","Warn: no topLevel permission defined: .github/workflows/dependabot.yml:1","Warn: no topLevel permission defined: .github/workflows/docker.yml:1","Warn: no topLevel permission defined: .github/workflows/sqldef.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v2.0.9 not signed: https://api.github.com/repos/sqldef/sqldef/releases/240428359","Warn: release artifact v2.0.8 not signed: https://api.github.com/repos/sqldef/sqldef/releases/237183997","Warn: release artifact v2.0.7 not signed: https://api.github.com/repos/sqldef/sqldef/releases/235082188","Warn: release artifact v2.0.6 not signed: https://api.github.com/repos/sqldef/sqldef/releases/234340873","Warn: release artifact v2.0.5 not signed: https://api.github.com/repos/sqldef/sqldef/releases/232734016","Warn: release artifact v2.0.9 does not have provenance: https://api.github.com/repos/sqldef/sqldef/releases/240428359","Warn: release artifact v2.0.8 does not have provenance: https://api.github.com/repos/sqldef/sqldef/releases/237183997","Warn: release artifact v2.0.7 does not have provenance: https://api.github.com/repos/sqldef/sqldef/releases/235082188","Warn: release artifact v2.0.6 does not have provenance: https://api.github.com/repos/sqldef/sqldef/releases/234340873","Warn: release artifact v2.0.5 does not have provenance: https://api.github.com/repos/sqldef/sqldef/releases/232734016"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/docker.yml:10"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 23 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T09:35:46.057Z","repository_id":37733959,"created_at":"2025-08-20T09:35:46.058Z","updated_at":"2025-08-20T09:35:46.058Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31349561,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T08:03:20.796Z","status":"ssl_error","status_checked_at":"2026-04-03T08:00:37.834Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database-migrations","declarative-migrations","mariadb","mssql","mysql","postgresql","schema-changes","sqldef","sqlite3"],"created_at":"2024-08-01T05:00:45.102Z","updated_at":"2026-04-08T15:00:59.104Z","avatar_url":"https://github.com/sqldef.png","language":"Go","readme":"# sqldef [![sqldef](https://github.com/sqldef/sqldef/actions/workflows/sqldef.yml/badge.svg)](https://github.com/sqldef/sqldef/actions/workflows/sqldef.yml) [![codecov](https://codecov.io/github/sqldef/sqldef/graph/badge.svg?token=FL4iBBbVUP)](https://codecov.io/github/sqldef/sqldef)\n\n**sqldef** is the easiest idempotent schema management tool for MySQL, PostgreSQL, SQLite3, and SQL Server that uses plain SQL DDLs. Define your desired schema in SQL, and sqldef generates and applies the migrations to update your database.\n\nWith sqldef, you maintain a single SQL file with your complete schema. To modify your schema - add columns, change constraints, or create indexes - simply edit this file. sqldef compares desired against current schema and generates the appropriate DDLs, ensuring your database reaches the desired state from any starting point.\n\nEach database gets its own command (`mysqldef`, `psqldef`, `sqlite3def`, `mssqldef`) that mimics the connection options of the native database client, making it familiar and easy to integrate into existing workflows. The tool comes as a single binary with no dependencies, and provides idempotent operations that are safe to run multiple times.\n\nThis is inspired by [Ridgepole](https://github.com/ridgepole/ridgepole), which uses Ruby DSL. However, sqldef uses plain SQL, so all you need to remember is SQL.\n\n![demo](./demo.gif)\n\n## Supported Databases\n\n- mysqldef - MySQL, MariaDB, and TiDB\n- psqldef - PostgreSQL\n- sqlite3def - SQLite3\n- mssqldef - SQL Server\n\nSee [CI workflow](.github/workflows/sqldef.yml) for tested versions.\n\n## Usage\n\n### Basic Workflow\n\nThis is the basic workflow, which is identical across all databases - only the connection options differ between commands.\n\n**Note:** Replace `$sqldef` with the appropriate command for your database:\n\n- `mysqldef` for MySQL\n- `psqldef` for PostgreSQL\n- `sqlite3def` for SQLite\n- `mssqldef` for SQL Server\n\n#### 1. Export Current Schema\n\n```shell\n$sqldef [connection-options] --export \u003e schema.sql\n```\n\nExport the existing database schema to review your starting point.\n\n#### 2. Modify the Schema\n\nEdit `schema.sql` to add, remove, or change columns/tables/indexes:\n\n```sql\nCREATE TABLE users (\n  id BIGINT PRIMARY KEY,\n  name VARCHAR(100),\n  age INTEGER,  -- Added new column\n  created_at TIMESTAMP\n);\n```\n\n#### 3. Preview Changes\n\n```shell\n$sqldef [connection-options] --dry-run \u003c schema.sql\n```\n\nShow the migrations that will be applied without executing them (e.g., `ALTER TABLE users ADD COLUMN age INTEGER`).\n\n#### 4. Apply Changes\n\n```shell\n$sqldef [connection-options] --apply \u003c schema.sql\n```\n\nApply the necessary DDLs to transform current schema to desired state.\n\nRunning again shows no changes needed - operations are idempotent.\n\n### Offline Mode\n\nsqldef can compare two SQL files without connecting to a database. This is useful for CI/CD pipelines, schema validation, and generating migration scripts.\n\nTo use offline mode, specify a `.sql` file as the database argument:\n\n```shell\n# Compare current.sql with desired.sql\n$sqldef current.sql \u003c desired.sql\n```\n\nSee the command documentation for more details on offline mode features.\n\n### Renaming Tables, Columns, and Indexes\n\nsqldef supports renaming tables, columns, and indexes using the `-- @renamed from=old_name` annotation.\n\nGiven the current schema:\n\n```sql\nCREATE TABLE user_accounts (\n  id INTEGER PRIMARY KEY,\n  username TEXT,\n  age INTEGER\n);\n```\n\nAnd the desired schema with `@renamed` annotation:\n\n```sql\nCREATE TABLE users ( -- @renamed from=user_accounts\n  id INTEGER PRIMARY KEY,\n  username TEXT,\n  age INTEGER\n);\n```\n\nThis generates the following migration:\n\n```sql\nALTER TABLE user_accounts RENAME TO users;\n```\n\nAlso `@renamed` works for columns, indexes, and ENUM values. See command documentation for more details.\n\n## Command Documentation\n\n* [mysqldef](./cmd-mysqldef.md)\n* [psqldef](./cmd-psqldef.md)\n* [sqlite3def](./cmd-sqlite3def.md)\n* [mssqldef](./cmd-mssqldef.md)\n\n## Examples\n\nSee practical examples in the [example](./example) directory:\n\n```shell\n# Database mode - apply schema changes to a running database\n./example/run.sh psqldef      # PostgreSQL\n./example/run.sh mysqldef     # MySQL/MariaDB\n./example/run.sh sqlite3def   # SQLite3\n./example/run.sh mssqldef     # SQL Server\n\n# Offline mode - compare schema files without database connection\n./example/run-offline.sh psqldef      # PostgreSQL\n./example/run-offline.sh mysqldef     # MySQL/MariaDB\n./example/run-offline.sh sqlite3def   # SQLite3\n./example/run-offline.sh mssqldef     # SQL Server\n```\n\n## Installation\n\n### Pre-built binaries\n\nDownload the single-binary executable for your favorite database from:\n\nhttps://github.com/sqldef/sqldef/releases\n\n### Docker images\n\nDocker images are available on Docker Hub:\n\nhttps://hub.docker.com/u/sqldef\n\n### Linux\n\nDebian packages are not currently available. Use the pre-built binaries or Docker images instead.\n\n```shell\n# mysqldef\nwget -O - https://github.com/sqldef/sqldef/releases/latest/download/mysqldef_linux_amd64.tar.gz \\\n  | tar xvz\n\n# psqldef\nwget -O - https://github.com/sqldef/sqldef/releases/latest/download/psqldef_linux_amd64.tar.gz \\\n  | tar xvz\n\n# sqlite3def\nwget -O - https://github.com/sqldef/sqldef/releases/latest/download/sqlite3def_linux_amd64.tar.gz \\\n  | tar xvz\n\n# mssqldef\nwget -O - https://github.com/sqldef/sqldef/releases/latest/download/mssqldef_linux_amd64.tar.gz \\\n  | tar xvz\n```\n\n### macOS\n\n[Homebrew tap](https://github.com/sqldef/homebrew-sqldef) is available.\n\n```shell\n# mysqldef\nbrew install sqldef/sqldef/mysqldef\n\n# psqldef\nbrew install sqldef/sqldef/psqldef\n\n# sqlite3def\nbrew install sqldef/sqldef/sqlite3def\n\n# mssqldef\nbrew install sqldef/sqldef/mssqldef\n```\n\n## Preview Changes with GitHub Actions\n\nThere's a GitHub Action that can preview changes to your database schema:\n\nhttps://github.com/sqldef/sqldef-preview-action\n\n## Development\n\nIf you update `parser/parser.y`, run:\n\n```shell\n$ make parser\n```\n\nUse the following commands to prepare command line tools and DB servers for running tests.\n\n```shell\n# Linux\n$ sudo apt install mysql-client postgresql-client sqlite3\n$ curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -\n$ curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list\n$ sudo apt-get update \u0026\u0026 sudo apt-get install mssql-tools # then add: export PATH=\"$PATH:/opt/mssql-tools/bin\"\n\n# macOS\n$ brew install libpq \u0026\u0026 brew link --force libpq\n$ brew install microsoft/mssql-release/mssql-tools\n\n# Start database\n$ docker compose up\n\n# Run all tests\n$ make test\n\n# Run *def tests\n$ go test ./cmd/*def\n\n# Run a single test\n$ go test ./cmd/mysqldef -run=TestApply/CreateTable\n```\n\n### Run example scripts\n\nTest all database mode examples:\n\n```sh\nmake test-example\n```\n\nThis runs `./example/run.sh` for all tools. You need to have the respective databases running:\n- `./example/run.sh psqldef` - requires PostgreSQL\n- `./example/run.sh mysqldef` - requires MySQL/MariaDB\n- `./example/run.sh sqlite3def` - requires SQLite3 (no server needed)\n- `./example/run.sh mssqldef` - requires SQL Server\n\nTest all offline mode examples (no database required):\n\n```sh\nmake test-example-offline\n```\n\nThis runs `./example/run-offline.sh` for all tools (psqldef, mysqldef, sqlite3def, mssqldef). These examples demonstrate offline mode (file-to-file comparison) without requiring database connections.\n\n\n## Contributing\n\nPlease file a pull request if you have a feature request.\n\nIf you're unsure what to do, you may file a \"Feature requests\" ticket on [Discussions](https://github.com/sqldef/sqldef/discussions)\nand discuss how to implement that with the community.\n\n## Releasing\n\nThe `tagpr` and `sqldef` workflows are used to release sqldef.\n\n1. (optional) A maintainer labels a pull request (PR) with `minor` or `major` to manage the next version.\n2. When a PR is merged to the default branch, `tagpr` creates a PR to bump the version and update the CHANGELOG.md (\"release PR\").\n3. **A maintainer reviews the release PR and merges it.**\n4. `tagpr` creates and pushes a release tag, which triggers the next workflow.\n5. `sqldef` workflows creates a GitHub release, build artifacts, upload them to the GitHub release.\n\nUnless it's a pretty big change that needs a discussion, we encourage sqldef maintainers to merge and release\ntheir own Pull Requests without asking/waiting for reviews.\n\nWe also expect them to release sqldef as frequently as possible.\nWhen there's a behavior change, sqldef should have at least one release on that day.\n\n## Maintainers\n\n* **@k0kubun**\n* **@knaka** (sqlite3def)\n* **@odz** (mssqldef)\n* **@hokaccha** (psqldef)\n* **@gfx** (psqldef)\n\nThese are the component they were contributing to when they became a maintainer,\nbut they're allowed to maintain every part of sqldef.\n\n### Alumni\n\n* **@ytakaya** (mssqldef)\n\n## License\n\nUnless otherwise noted, the sqldef source files are distributed under the MIT License found in the LICENSE file.\n\n[parser](./parser) is distributed under the Apache Version 2.0 license found in the [parser/LICENSE.md](./parser/LICENSE.md) file.\n","funding_links":["https://github.com/sponsors/k0kubun"],"categories":["Go"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsqldef%2Fsqldef","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsqldef%2Fsqldef","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsqldef%2Fsqldef/lists"}