Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/daichirata/hammer
🛠hammer is a command-line tool to schema management for Google Cloud Spanner.
https://github.com/daichirata/hammer
google-cloud-spanner schema spanner
Last synced: 3 months ago
JSON representation
🛠hammer is a command-line tool to schema management for Google Cloud Spanner.
- Host: GitHub
- URL: https://github.com/daichirata/hammer
- Owner: daichirata
- License: mit
- Created: 2019-12-10T04:43:21.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2024-06-20T02:35:43.000Z (5 months ago)
- Last Synced: 2024-07-15T19:55:08.908Z (4 months ago)
- Topics: google-cloud-spanner, schema, spanner
- Language: Go
- Homepage:
- Size: 222 KB
- Stars: 78
- Watchers: 5
- Forks: 22
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-spanner - hammer - Schema management tool for Spanner. (Tools / ORM)
README
# hammer
hammer is a command-line tool to schema management for Google Cloud Spanner.
![](https://github.com/daichirata/hammer/workflows/Test/badge.svg)
## Installation
Download the single-binary executable from:
https://github.com/daichirata/hammer/releases
or
``` shell
$ go install github.com/daichirata/hammer@latest
```## Usage
```
$ hammer -h
hammer is a command-line tool to schema management for Google Cloud Spanner.Usage:
hammer [command]Examples:
* Export spanner schema
hammer export spanner://projects/projectId/instances/instanceId/databases/databaseName > schema.sql* Apply local schema file
hammer apply spanner://projects/projectId/instances/instanceId/databases/databaseName /path/to/file* Create database and apply local schema (faster than running database creation and schema apply separately)
hammer create spanner://projects/projectId/instances/instanceId/databases/databaseName /path/to/file* Copy database
hammer create spanner://projects/projectId/instances/instanceId/databases/databaseName1 spanner://projects/projectId/instances/instanceId/databases/databaseName2* Compare local files
hammer diff /path/to/file /another/path/to/file* Compare local file against spanner schema
hammer diff /path/to/file spanner://projects/projectId/instances/instanceId/databases/databaseName* Compare spanner schema against spanner schema
hammer diff spanner://projects/projectId/instances/instanceId/databases/databaseName1 spanner://projects/projectId/instances/instanceId/databases/databaseName2Available Commands:
apply Apply schema
create Create database and apply schema
diff Diff schema
export Export schema
help Help about any commandFlags:
-h, --help help for hammerUse "hammer [command] --help" for more information about a command.
```The DSN must be given in the following format.
```
spanner://projects/{projectId}/instances/{instanceId}/databases/{databaseName}?credentials=/path/to/file.json
```| Param | Required | Description |
| -------------- | -------- | ---------------------------------------------------------------------------------------------- |
| `projectId` | true | The Google Cloud Platform project id |
| `instanceId` | true | The id of the instance running Spanner |
| `databaseName` | true | The name of the Spanner database |
| `credentials` | false | The path to the keyfile. If not present, client will use your default application credentials. |### Flags
apply, create, diff and export can accept the flags defined below
```
--ignore-alter-database ignore alter database statements
--ignore-change-streams ignore change streams statements
```### Examples
Suppose you have an existing SQL schema like the following:
``` sql
CREATE TABLE users (
user_id STRING(36) NOT NULL,
email STRING(MAX),
) PRIMARY KEY(user_id);
```And you want "upgrade" your schema to the following:
``` sql
CREATE TABLE users (
user_id STRING(36) NOT NULL,
email STRING(MAX) NOT NULL,
age INT64,
name STRING(MAX) NOT NULL,
) PRIMARY KEY(user_id);
CREATE INDEX idx_users_name ON users (name);
```Hammer changes the schema by applying the following SQL to the spanner:
``` sql
hammer diff old.sql new.sqlUPDATE users SET email = '' WHERE email IS NULL;
ALTER TABLE users ALTER COLUMN email STRING(MAX) NOT NULL;
ALTER TABLE users ADD COLUMN age INT64;
ALTER TABLE users ADD COLUMN name STRING(MAX) NOT NULL DEFAULT ("");
ALTER TABLE users ALTER COLUMN name DROP DEFAULT;
CREATE INDEX idx_users_name ON users(name);
```- When altering a nullable column to add the NOT NULL attribute, hammer update the column with the default value, and then add the NOT NULL attribute. (e.g. email)
- When adding a column with the NOT NULL attribute without the DEFAULT attribute, hammer add a default value to the column implicitly, and then drop the DEFAULT attribute. (e.g. name)## LICENSE
Unless otherwise noted, the hammer source files are distributed under the MIT License found in the LICENSE file.