README ¶
Google Cloud Spanner
Usage
The DSN must be given in the following format.
spanner://projects/{projectId}/instances/{instanceId}/databases/{databaseName}
See Google Spanner Documentation for details.
Param | WithInstance Config | Description |
---|---|---|
x-migrations-table |
MigrationsTable |
Name of the migrations table |
url |
DatabaseName |
The full path to the Spanner database resource. If provided as part of Config it must not contain a scheme or query string to match the format projects/{projectId}/instances/{instanceId}/databases/{databaseName} |
projectId |
The Google Cloud Platform project id | |
instanceId |
The id of the instance running Spanner | |
databaseName |
The name of the Spanner database |
Note: Google Cloud Spanner migrations can take a considerable amount of time. The migrations provided as part of the example take about 6 minutes to run on a small instance.
1481574547/u create_users_table (21.354507597s) 1496539702/u add_city_to_users (41.647359754s) 1496601752/u add_index_on_user_emails (2m12.155787369s) 1496602638/u create_books_table (2m30.77299181s)
Testing
To unit test the spanner
driver, SPANNER_DATABASE
needs to be set. You'll
need to sign-up to Google Cloud Platform (GCP) and have a running Spanner
instance since it is not possible to run Google Spanner outside GCP.
Documentation ¶
Index ¶
- Constants
- Variables
- func WithInstance(instance *DB, config *Config) (database.Driver, error)
- type Config
- type DB
- type Spanner
- func (s *Spanner) Close() error
- func (s *Spanner) Drop() error
- func (s *Spanner) Lock() error
- func (s *Spanner) Open(url string) (database.Driver, error)
- func (s *Spanner) Run(migration io.Reader) error
- func (s *Spanner) SetVersion(version int, dirty bool) error
- func (s *Spanner) Unlock() error
- func (s *Spanner) Version() (version int, dirty bool, err error)
Constants ¶
const DefaultMigrationsTable = "SchemaMigrations"
DefaultMigrationsTable is used if no custom table is specified
Variables ¶
var ( ErrNilConfig = fmt.Errorf("no config") ErrNoDatabaseName = fmt.Errorf("no database name") ErrNoSchema = fmt.Errorf("no schema") ErrDatabaseDirty = fmt.Errorf("database is dirty") )
Driver errors
Functions ¶
Types ¶
type Spanner ¶
type Spanner struct {
// contains filtered or unexported fields
}
Spanner implements database.Driver for Google Cloud Spanner
func (*Spanner) Drop ¶
Drop implements database.Driver. Retrieves the database schema first and creates statements to drop the indexes and tables accordingly. Note: The drop statements are created in reverse order to how they're provided in the schema. Assuming the schema describes how the database can be "build up", it seems logical to "unbuild" the database simply by going the opposite direction. More testing
func (*Spanner) Lock ¶
Lock implements database.Driver but doesn't do anything because Spanner only enqueues the UpdateDatabaseDdlRequest.
func (*Spanner) SetVersion ¶
SetVersion implements database.Driver