{"id":42482644,"url":"https://github.com/cloudspannerecosystem/liquibase-spanner","last_synced_at":"2026-01-28T11:15:57.127Z","repository":{"id":39970892,"uuid":"284898385","full_name":"cloudspannerecosystem/liquibase-spanner","owner":"cloudspannerecosystem","description":null,"archived":false,"fork":false,"pushed_at":"2025-10-28T10:13:38.000Z","size":1098,"stargazers_count":23,"open_issues_count":19,"forks_count":17,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-28T10:13:46.544Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cloudspannerecosystem.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing.md","funding":null,"license":"LICENSE","code_of_conduct":"docs/code-of-conduct.md","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":null,"dco":null,"cla":null}},"created_at":"2020-08-04T06:39:43.000Z","updated_at":"2025-10-28T08:41:26.000Z","dependencies_parsed_at":"2023-02-19T05:00:49.625Z","dependency_job_id":"0a0c6ab0-f086-4066-974d-bc9b90f3e919","html_url":"https://github.com/cloudspannerecosystem/liquibase-spanner","commit_stats":null,"previous_names":[],"tags_count":52,"template":false,"template_full_name":null,"purl":"pkg:github/cloudspannerecosystem/liquibase-spanner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudspannerecosystem%2Fliquibase-spanner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudspannerecosystem%2Fliquibase-spanner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudspannerecosystem%2Fliquibase-spanner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudspannerecosystem%2Fliquibase-spanner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudspannerecosystem","download_url":"https://codeload.github.com/cloudspannerecosystem/liquibase-spanner/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudspannerecosystem%2Fliquibase-spanner/sbom","scorecard":{"id":293282,"data":{"date":"2025-08-11","repo":{"name":"github.com/cloudspannerecosystem/liquibase-spanner","commit":"d2f7f062160f53a08d64129a8cf13ab3de6a3a9f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"checks":[{"name":"Maintained","score":10,"reason":"29 commit(s) and 1 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":"Code-Review","score":8,"reason":"Found 20/25 approved changesets -- score normalized to 8","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":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"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":"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":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1"],"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/gradle.yaml:1","Warn: no topLevel permission defined: .github/workflows/harness.yaml:1","Warn: no topLevel permission defined: .github/workflows/integration.yaml:1","Warn: no topLevel permission defined: .github/workflows/units.yaml: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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gradle.yaml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudspannerecosystem/liquibase-spanner/gradle.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gradle.yaml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudspannerecosystem/liquibase-spanner/gradle.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/harness.yaml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudspannerecosystem/liquibase-spanner/harness.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/harness.yaml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudspannerecosystem/liquibase-spanner/harness.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/integration.yaml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudspannerecosystem/liquibase-spanner/integration.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/integration.yaml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudspannerecosystem/liquibase-spanner/integration.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/integration.yaml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudspannerecosystem/liquibase-spanner/integration.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/integration.yaml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudspannerecosystem/liquibase-spanner/integration.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/units.yaml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudspannerecosystem/liquibase-spanner/units.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/units.yaml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudspannerecosystem/liquibase-spanner/units.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/units.yaml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudspannerecosystem/liquibase-spanner/units.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/units.yaml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudspannerecosystem/liquibase-spanner/units.yaml/master?enable=pin","Info:   0 out of  10 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction 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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 4.32.0 not signed: https://api.github.com/repos/cloudspannerecosystem/liquibase-spanner/releases/221252620","Warn: release artifact 4.31.1.1 not signed: https://api.github.com/repos/cloudspannerecosystem/liquibase-spanner/releases/219138845","Warn: release artifact 4.31.1 not signed: https://api.github.com/repos/cloudspannerecosystem/liquibase-spanner/releases/202970244","Warn: release artifact 4.31.0 not signed: https://api.github.com/repos/cloudspannerecosystem/liquibase-spanner/releases/202839803","Warn: release artifact 4.30.0.1 not signed: https://api.github.com/repos/cloudspannerecosystem/liquibase-spanner/releases/184361041","Warn: release artifact 4.32.0 does not have provenance: https://api.github.com/repos/cloudspannerecosystem/liquibase-spanner/releases/221252620","Warn: release artifact 4.31.1.1 does not have provenance: https://api.github.com/repos/cloudspannerecosystem/liquibase-spanner/releases/219138845","Warn: release artifact 4.31.1 does not have provenance: https://api.github.com/repos/cloudspannerecosystem/liquibase-spanner/releases/202970244","Warn: release artifact 4.31.0 does not have provenance: https://api.github.com/repos/cloudspannerecosystem/liquibase-spanner/releases/202839803","Warn: release artifact 4.30.0.1 does not have provenance: https://api.github.com/repos/cloudspannerecosystem/liquibase-spanner/releases/184361041"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 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":0,"reason":"11 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-j288-q9x7-2f5v","Warn: Project is vulnerable to: GHSA-vmq6-5m68-f53m","Warn: Project is vulnerable to: GHSA-6v67-2wr5-gvf4","Warn: Project is vulnerable to: GHSA-gm62-rw4g-vrc4","Warn: Project is vulnerable to: GHSA-pr98-23f8-jwxv","Warn: Project is vulnerable to: GHSA-4265-ccf5-phj5","Warn: Project is vulnerable to: GHSA-4g9r-vxhx-9pgx","Warn: Project is vulnerable to: GHSA-rc42-6c7j-7h5r","Warn: Project is vulnerable to: GHSA-4gc7-5j7h-4qph","Warn: Project is vulnerable to: GHSA-4wp7-92pw-q264","Warn: Project is vulnerable to: GHSA-9cmq-m9j5-mvww"],"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-17T18:51:30.503Z","repository_id":39970892,"created_at":"2025-08-17T18:51:30.504Z","updated_at":"2025-08-17T18:51:30.504Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28844870,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T10:53:21.605Z","status":"ssl_error","status_checked_at":"2026-01-28T10:53:20.789Z","response_time":57,"last_error":"SSL_read: 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":[],"created_at":"2026-01-28T11:15:56.374Z","updated_at":"2026-01-28T11:15:57.114Z","avatar_url":"https://github.com/cloudspannerecosystem.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Liquibase Spanner Extension\n\nA Liquibase extension adding support for Google Spanner. Include this in your\napplication project to run Liquibase database migration scripts against a Google\nSpanner database.\n\n## Performance Recommendations\nExecuting multiple small DDL statements on Spanner can take a very long time. This means that\nthe standard recommendation to use as small changesets as possible with Liquibase is not always the\nbest choice when working with Spanner. Instead, it is recommended to create changesets that\ngroup multiple DDL statements into one DDL batch. Use [SQL change](https://docs.liquibase.com/change-types/community/sql.html)\nand batch the DDL using [batch statements](https://cloud.google.com/spanner/docs/jdbc-session-mgmt-commands#batch_statements).\n\nYou can also create a single change set that contains multiple Liquibase changes (e.g. `createTable`)\nand create these in a batch by adding a SQL command before and after the changes. See\n[create-multiple-tables.spanner.yaml](src/test/resources/create-multiple-tables.spanner.yaml) for\nan example.\n\n## Release Notes\n\n#### 4.33.0.2\n* Requires Liquibase 4.33.0\n* Liquibase Spanner now also supports Spanner PostgreSQL-dialect databases.\n\n#### 4.33.0.1\n* Requires Liquibase 4.33.0\n* Updated Google Cloud dependencies to latest version (26.71.0)\n\n#### 4.33.0\n* Requires Liquibase 4.33.0\n\n#### 4.32.0\n* Requires Liquibase 4.32.0\n\n#### 4.31.1\n* Requires Liquibase 4.31.1\n\n#### 4.31.0\n* Requires Liquibase 4.31.0\n* Updated Google Cloud dependencies to latest version (26.55.0)\n\n#### 4.30.0\n* Requires Liquibase 4.30.0\n* Updated Google Cloud dependencies to latest version (26.50.0)\n\n#### 4.29.2.1\n* Fixes an error when executing the `clear-checksums` command (https://github.com/cloudspannerecosystem/liquibase-spanner/pull/354)\n* Requires Liquibase 4.29.2\n\n#### 4.29.2\n* Requires Liquibase 4.29.2\n\n#### 4.29.1\n* Requires Liquibase 4.29.1\n\n#### 4.29.0\n* Requires Liquibase 4.29.0\n* Updated Google Cloud dependencies to latest version (26.45.0)\n\n#### 4.28.0\n* Requires Liquibase 4.28.0\n\n#### 4.27.0\n* Requires Liquibase 4.27.0\n* Updated Google Cloud dependencies to latest version (26.42.0)\n\n#### 4.26.0\n* Requires Liquibase 4.26.0\n* Updated Google Cloud dependencies to latest version (26.41.0)\n* Adds support for creating bit-reversed sequences using the `createSequence` change type\n* Fixes #230\n\n#### 4.25.1\n* Requires Liquibase 4.25.1\n\n#### 4.25.0\n* Requires Liquibase 4.25.0\n\n#### 4.24.0\n* Requires Liquibase 4.24.0\n\n#### 4.23.2\n* Requires Liquibase 4.23.2\n\n#### 4.23.1\n* Requires Liquibase 4.23.1\n\n#### 4.23.0\n* Requires Liquibase 4.23.0\n* NOTE: Liquibase removed version 4.22.0. There will therefore be no release 4.22.0 for this library.\n\n#### 4.21.1\n* Requires SnakeYAML 2.0 (fixes CVE-2022-1471)\n* Requires Liquibase 4.21.1 (uses SnakeYAML 2.0 API)\n\n#### 4.21.0\n* Requires Liquibase 4.21.0\n \n#### 4.20.0\n* Requires Liquibase 4.20.0\n\n#### 4.19.1\n* Requires Liquibase 4.19.1\n\n#### 4.19.0\n* Requires Liquibase 4.19.0\n\n#### 4.18.0\n* Requires Liquibase 4.18.0\n* Updated Google Cloud dependencies to latest version (26.16.0)\n\n#### 4.17.2\n* Requires Liquibase 4.17.2\n\n#### 4.17.1\n* Requires Liquibase 4.17.1\n* Updated Google Cloud dependencies to latest version (26.9.0)\n* Fixed #159: NullPointerException caused by index\n\n#### 4.17.0\n* Requires Liquibase 4.17.0\n\n#### 4.16.1\n* Requires Liquibase 4.16.1\n\n#### 4.16.0\n* Requires Liquibase 4.16.0\n\n#### 4.15.0\n* Requires Liquibase 4.15.0\n\n#### 4.14.0\n* Requires Liquibase 4.14.0\n\n#### 4.13.0\n* Requires Liquibase 4.13.0\n\n#### 4.12.0\n* Requires Liquibase 4.12.0\n\n#### 4.11.0\n* Requires Liquibase 4.11.0\n\n#### 4.10.1\n* #121 Added support for configured databasechangelog/lock table names. by @cbuschka in #122\n* Requires Liquibase 4.10.0\n\n#### 4.10.0\n* Requires Liquibase 4.10.0\n\n#### 4.9.1\n* Requires Liquibase 4.9.1\n\n#### 4.9.0\n* Requires Liquibase 4.9.0\n\n#### 4.8.0\n* Requires Liquibase 4.8.0\n\n#### 4.7.1\n* Requires Liquibase 4.7.1\n\n#### 4.7.0\n* Requires Liquibase 4.7.0\n\n#### 4.6.2\n* Requires Liquibase 4.6.2\n\n#### 4.6.1\n* Requires Liquibase 4.6.1\n* Fixes a bug where statements could be generated in the Spanner dialect when multiple different databases had been configured, and\n  the Spanner library was included in the build. See also [#102](https://github.com/cloudspannerecosystem/liquibase-spanner/pull/102)\n\n#### 4.5.0\n* Requires Liquibase 4.5.0\n* Adds support for `CREATE [OR REPLACE] VIEW` and `DROP VIEW` [statements](https://cloud.google.com/spanner/docs/data-definition-language#view_statements)\n\n#### 4.4.3\n* Requires Liquibase 4.4.3.\n* The version of this library now mirrors the version number of the Liquibase version that it requires.\n\n#### 1.0.5\n\n* Added sample for Spring Boot integration\n* Bug fix ([#94](https://github.com/cloudspannerecosystem/liquibase-spanner/issues/94)): loadData change did not escape single quotes correctly\n\n#### 1.0.4\n\n* Extension is no longer beta.\n* deps: update to jdbc driver version 2.0 and set user agent\n\n#### 1.0.3\n\n* Bug fix ([#83](https://github.com/cloudspannerecosystem/liquibase-spanner/issues/83)): Columns in the primary key were always generated as not nullable, even when they were marked as nullable.\n* Bug fix ([#78](https://github.com/cloudspannerecosystem/liquibase-spanner/issues/78)): INTERLEAVED table was generated as FOREIGN KEY in snapshots\n* Bug fix ([#75](https://github.com/cloudspannerecosystem/liquibase-spanner/issues/75), [#76](https://github.com/cloudspannerecosystem/liquibase-spanner/issues/76), [#77](https://github.com/cloudspannerecosystem/liquibase-spanner/issues/77)): Wrong type names were generated in snapshots\n* Bug fix: Removed logback configuration from build.\n\n#### 1.0.2\n\n * Bug fix: Fixed a potential `ClassNotFoundException` for `com.google.spanner.admin.database.v1.DatabaseAdminGrpc`\n\n#### 1.0\n\n * Initial beta release.\n\n## Getting Started\n\n### Installing and setting up Liquibase\n\nInstall Liquibase Community CLI from [here](https://www.liquibase.org/). Alternatively, there are many other ways to install (e.g. brew on Mac OS/X).\nThese examples were run with Liquibase 4.2.0.\n\nOnce Liquibase is installed, use the [latest release](https://github.com/cloudspannerecosystem/liquibase-spanner/releases) or build your own\nliquibase-spanner-SNAPSHOT-all.jar and copy it into the Liquibase lib directory.\n\n### Starting a Spanner database\n\nYou can create a Spanner instance in the [GCP console](https://console.cloud.google.com/spanner/instances/new)\nor use an [emulator](https://cloud.google.com/spanner/docs/emulator) (with [JDBC](https://cloud.google.com/spanner/docs/use-oss-jdbc)).\nYou will also need to create a database for Liquibase to use.\n\nSpanner CLI is a convenient way to access Spanner. It can be installed from [here](https://github.com/cloudspannerecosystem/spanner-cli#install).\n\nConfigure the connection in the file liquibase.properties:\n```\n  url: jdbc:cloudspanner:/projects/\u003cproject\u003e/instances/\u003cinstance\u003e/databases/\u003cdatabase\u003e\n```\n\n### Running Examples\n\nUsing the [Liquibase CLI](https://docs.liquibase.com/tools-integrations/cli/home.html) the following ChangeLogs are examples of using Spanner.\nReview [Liquibase best practices](https://www.liquibase.org/get-started/best-practices). In this example, [changelog.yaml](example/changelog.yaml)\nis used as the master changelog.\n\nRun:\n```liquibase --changeLog example/changelog.yaml```\n\n| Example                                                                                    | Description                                                               |\n|--------------------------------------------------------------------------------------------|---------------------------------------------------------------------------|\n| [create-schema.yaml](example/create-schema.yaml)                                           | Create schema, including interleaved tables, column options, and indexes  |\n| [load-data-singers.yaml](example/load-data-singers.yaml)                                   | Load data into Singers table from CSV                                     | \n| [load-update-data-singers.yaml](example/load-update-data-singers.yaml)                     | Insert or update data in Singers table from CSV                           |\n| [add-lookup-table-singers-countries.yaml](example/add-lookup-table-singers-countries.yaml) | Create countries table as a foreign key from Country field in Singers     |\n| [modify-data-type-singers-lastname.yaml](example/modify-data-type-singers-lastname.yaml)   | Alter STRING datatype in Singers LastName column                          |\n| [insert.yaml](example/insert.yaml)                                                         | Insert rows into Singers table                                            |\n| [delete.yaml](example/delete.yaml)                                                         | Delete rows from Singers                                                  |\n| [update.yaml](example/update.yaml)                                                         | Update rows in Singers                                                    |\n\n### Other Samples\nSee the samples directory for specific integrations with other frameworks, such as Spring Boot.\n\n## Supported Features\n\nThe following Liquibase [ChangeTypes](https://docs.liquibase.com/change-types/home.html) are supported:\u003cbr/\u003e\ncreateTable, dropTable, addColumn, modifyDataType, addNotNullConstraint, dropColumn, createIndex, dropIndex, addForeignKeyConstraint, dropForeignKeyConstraint, dropAllForeignKeyConstraints, addLookupTable, createView, dropView\n\nThe following Liquibase [ChangeTypes](https://docs.liquibase.com/change-types/home.html) are not allowed with Spanner:\u003cbr/\u003e\naddAutoIncrement, addPrimaryKey, addUniqueConstraint, dropUniqueConstraint, createProcedure, dropNotNullConstraint, dropPrimaryKey, dropProcedure, renameColumn, renameSequence, renameView, setColumnRemarks, setTableRemarks, alterSequence\n\nThe following data DML [ChangeTypes](https://docs.liquibase.com/change-types/home.html) are supported:\u003cbr/\u003e\ninsert, update, loadData, loadUpdateData\n\nNote:\n * Column OPTIONS and table INTERLEAVE must be applied using modifySql.\n * Instead of unique constraints use unique indexes.\n\n## Limitations\n\nSee [limitations.md](limitations.md) for a full list of limitations and unsupported features.\n\n### Spanner-specific SQL\n\nSome Spanner specific SQL, such as INTERLEAVE'd tables or column OPTIONS, require using\nLiquibase's modifySql. See [create-schema.yml](example/create-schema.yaml) for an example\nof doing this.\n\n### DDL Limits\n\nIn order to [limit the number of schema updates in a 7-day period](https://cloud.google.com/spanner/docs/schema-updates#week-window), run\nLiquibase with small changeSets. Alternatively, use [SQL change](https://docs.liquibase.com/change-types/community/sql.html) and batch the DDL\nusing [batch statements](https://cloud.google.com/spanner/docs/jdbc-session-mgmt-commands#batch_statements).\n\n### DML Limits\n\nThere are [DML limits](https://cloud.google.com/spanner/quotas#limits_for_creating_reading_updating_and_deleting_data)\nfor the number of rows affected during DML. The recommendation is to use\n[partitioned DML](https://cloud.google.com/spanner/docs/dml-partitioned#dml_and_partitioned_dml).\nUsing Spanner JDBC driver this can be configured using the\n[AUTOCOMMIT_DML_MODE](https://cloud.google.com/spanner/docs/use-oss-jdbc#set_autocommit_dml_mode).\n\nThis has been implemented in some of the changeSet types such as mergeColumns, but not in all changeSet types such as\ndelete.\n\n### Unsupported Spanner Features\n\nThere are a number of features that Spanner does not have such as stored procedures. The Liquibase extension will\nthrow an exception during analysis of the changeSet in most cases, but not all. For example, a DELETE without a WHERE clause\nwill fail in Spanner but not in the Liquibase extension.\n\n## Building\n\n### Building\n\n| Gradle target      | Description                                     |\n|--------------------|-------------------------------------------------|\n| test               | Run mock and Spanner emulator tests             |\n| build              | Build extension and run above tests             |\n| integrationTest    | Run Spanner in GCP tests                        |\n| jibDocker          | Build a local runnable docker container         |\n\nTesting requirements:\n * Emulator requires [testcontainers](https://www.testcontainers.org/) and its [requirements](https://www.testcontainers.org/supported_docker_environment/) installed.\n * Spanner in GCP requires SPANNER_PROJECT and SPANNER_INSTANCE environment variables set to an active instance\n * Spanner in GCP requires application default credentials set or GOOGLE_APPLICATION_CREDENTIALS environment set\n\n### Deploying\n\nThere are two JARs built:\n * build/libs/liquibase-spanner-VERSION.jar\n * build/libs/liquibase-spanner-VERSION-all.jar\n\nThe first JAR is just the extension itself, while the second one includes all of the dependencies needed to run with Liquibase. Install the second one into the Liquibase lib directory.\n\n## Contributing\n\nFor contributions please see [contributing](docs/contributing.md) and our [code of conduct](docs/code-of-conduct.md).\n\n## Raising Issues\n\nIf you have any questions, find a bug, or have a feature request please [open an issue](https://github.com/cloudspannerecosystem/liquibase-spanner/issues/new).\nPlease note that this extension is not officially supported as part of the Cloud Spanner product.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudspannerecosystem%2Fliquibase-spanner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudspannerecosystem%2Fliquibase-spanner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudspannerecosystem%2Fliquibase-spanner/lists"}