18
18
Spanner PostgreSql dialect.
19
19
For more information, see the README.rst under /spanner.
20
20
"""
21
- from google .cloud import spanner
21
+ from google .cloud import spanner , spanner_admin_database_v1
22
22
from google .cloud .spanner_admin_database_v1 .types .common import DatabaseDialect
23
23
24
24
OPERATION_TIMEOUT_SECONDS = 240
25
25
26
26
27
- # [START spanner_postgresql_create_database]
28
- def create_database (instance_id , database_id ):
29
- """Creates a PostgreSql database and tables for sample data."""
30
-
31
- from google .cloud .spanner_admin_database_v1 .types import spanner_database_admin
32
-
33
- spanner_client = spanner .Client ()
34
- instance = spanner_client .instance (instance_id )
35
-
36
- request = spanner_database_admin .CreateDatabaseRequest (
37
- parent = instance .name ,
38
- create_statement = f'CREATE DATABASE "{ database_id } "' ,
39
- database_dialect = DatabaseDialect .POSTGRESQL ,
40
- )
41
-
42
- operation = spanner_client .database_admin_api .create_database (request = request )
43
-
44
- print ("Waiting for operation to complete..." )
45
- database = operation .result (OPERATION_TIMEOUT_SECONDS )
46
-
47
- create_table_using_ddl (database .name )
48
- print ("Created database {} on instance {}" .format (database_id , instance_id ))
49
-
50
-
51
- def create_table_using_ddl (database_name ):
52
- from google .cloud .spanner_admin_database_v1 .types import spanner_database_admin
53
-
54
- spanner_client = spanner .Client ()
55
- request = spanner_database_admin .UpdateDatabaseDdlRequest (
56
- database = database_name ,
57
- statements = [
58
- """CREATE TABLE Singers (
59
- SingerId bigint NOT NULL,
60
- FirstName character varying(1024),
61
- LastName character varying(1024),
62
- SingerInfo bytea,
63
- FullName character varying(2048)
64
- GENERATED ALWAYS AS (FirstName || ' ' || LastName) STORED,
65
- PRIMARY KEY (SingerId)
66
- )""" ,
67
- """CREATE TABLE Albums (
68
- SingerId bigint NOT NULL,
69
- AlbumId bigint NOT NULL,
70
- AlbumTitle character varying(1024),
71
- PRIMARY KEY (SingerId, AlbumId)
72
- ) INTERLEAVE IN PARENT Singers ON DELETE CASCADE""" ,
73
- ],
74
- )
75
- operation = spanner_client .database_admin_api .update_database_ddl (request )
76
- operation .result (OPERATION_TIMEOUT_SECONDS )
77
-
78
-
79
- # [END spanner_postgresql_create_database]
80
-
81
-
82
- def create_table_with_datatypes (instance_id , database_id ):
83
- """Creates a table with supported datatypes."""
84
- # [START spanner_postgresql_create_table_with_datatypes]
85
- # instance_id = "your-spanner-instance"
86
- # database_id = "your-spanner-db-id"
87
-
88
- from google .cloud .spanner_admin_database_v1 .types import spanner_database_admin
89
-
90
- spanner_client = spanner .Client ()
91
- instance = spanner_client .instance (instance_id )
92
- database = instance .database (database_id )
93
-
94
- request = spanner_database_admin .UpdateDatabaseDdlRequest (
95
- database = database .name ,
96
- statements = [
97
- """CREATE TABLE Venues (
98
- VenueId BIGINT NOT NULL,
99
- VenueName character varying(100),
100
- VenueInfo BYTEA,
101
- Capacity BIGINT,
102
- OutdoorVenue BOOL,
103
- PopularityScore FLOAT8,
104
- Revenue NUMERIC,
105
- LastUpdateTime SPANNER.COMMIT_TIMESTAMP NOT NULL,
106
- PRIMARY KEY (VenueId))"""
107
- ],
108
- )
109
- operation = spanner_client .database_admin_api .update_database_ddl (request )
110
-
111
- print ("Waiting for operation to complete..." )
112
- operation .result (OPERATION_TIMEOUT_SECONDS )
113
-
114
- print (
115
- "Created Venues table on database {} on instance {}" .format (
116
- database_id , instance_id
117
- )
118
- )
119
- # [END spanner_postgresql_create_table_with_datatypes]
120
-
121
-
122
27
# [START spanner_postgresql_add_column]
123
28
def add_column (instance_id , database_id ):
124
29
"""Adds a new column to the Albums table in the example database."""
125
-
126
- from google .cloud .spanner_admin_database_v1 .types import spanner_database_admin
127
-
128
30
spanner_client = spanner .Client ()
129
31
instance = spanner_client .instance (instance_id )
130
32
database = instance .database (database_id )
131
33
132
- request = spanner_database_admin .UpdateDatabaseDdlRequest (
133
- database = database .name ,
134
- statements = ["ALTER TABLE Albums ADD COLUMN MarketingBudget BIGINT" ],
34
+ operation = database .update_ddl (
35
+ ["ALTER TABLE Albums ADD COLUMN MarketingBudget BIGINT" ]
135
36
)
136
- operation = spanner_client .database_admin_api .update_database_ddl (request )
137
37
138
38
print ("Waiting for operation to complete..." )
139
39
operation .result (OPERATION_TIMEOUT_SECONDS )
@@ -164,19 +64,14 @@ def add_jsonb_column(instance_id, database_id):
164
64
# instance_id = "your-spanner-instance"
165
65
# database_id = "your-spanner-db-id"
166
66
167
- from google .cloud .spanner_admin_database_v1 .types import spanner_database_admin
168
-
169
67
spanner_client = spanner .Client ()
170
68
instance = spanner_client .instance (instance_id )
171
69
database = instance .database (database_id )
172
70
173
- request = spanner_database_admin .UpdateDatabaseDdlRequest (
174
- database = database .name ,
175
- statements = ["ALTER TABLE Venues ADD COLUMN VenueDetails JSONB" ],
71
+ operation = database .update_ddl (
72
+ ["ALTER TABLE Venues ADD COLUMN VenueDetails JSONB" ]
176
73
)
177
74
178
- operation = spanner_client .database_admin_api .update_database_ddl (request )
179
-
180
75
print ("Waiting for operation to complete..." )
181
76
operation .result (OPERATION_TIMEOUT_SECONDS )
182
77
@@ -190,46 +85,103 @@ def add_jsonb_column(instance_id, database_id):
190
85
# [END spanner_postgresql_jsonb_add_column]
191
86
192
87
193
- # [START spanner_postgresql_create_storing_index]
194
- def add_storing_index (instance_id , database_id ):
195
- """Adds an storing index to the example database."""
88
+ # [START spanner_postgresql_alter_sequence]
89
+ def alter_sequence (instance_id , database_id ):
90
+ """Alters the Sequence and insert data"""
91
+ spanner_client = spanner .Client ()
92
+ instance = spanner_client .instance (instance_id )
93
+ database = instance .database (database_id )
94
+
95
+ operation = database .update_ddl (["ALTER SEQUENCE Seq SKIP RANGE 1000 5000000" ])
96
+
97
+ print ("Waiting for operation to complete..." )
98
+ operation .result (OPERATION_TIMEOUT_SECONDS )
99
+
100
+ print (
101
+ "Altered Seq sequence to skip an inclusive range between 1000 and 5000000 on database {} on instance {}" .format (
102
+ database_id , instance_id
103
+ )
104
+ )
105
+
106
+ def insert_customers (transaction ):
107
+ results = transaction .execute_sql (
108
+ "INSERT INTO Customers (CustomerName) VALUES "
109
+ "('Lea'), "
110
+ "('Cataline'), "
111
+ "('Smith') "
112
+ "RETURNING CustomerId"
113
+ )
114
+ for result in results :
115
+ print ("Inserted customer record with Customer Id: {}" .format (* result ))
116
+ print (
117
+ "Number of customer records inserted is {}" .format (
118
+ results .stats .row_count_exact
119
+ )
120
+ )
121
+
122
+ database .run_in_transaction (insert_customers )
123
+
124
+
125
+ # [END spanner_postgresql_alter_sequence]
196
126
197
- from google .cloud .spanner_admin_database_v1 .types import spanner_database_admin
198
127
128
+ # [START spanner_postgresql_create_database]
129
+ def create_database (instance_id , database_id ):
130
+ """Creates a PostgreSql database and tables for sample data."""
199
131
spanner_client = spanner .Client ()
200
132
instance = spanner_client .instance (instance_id )
201
- database = instance .database (database_id )
202
133
203
- request = spanner_database_admin .UpdateDatabaseDdlRequest (
204
- database = database .name ,
205
- statements = [
206
- "CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle)"
207
- "INCLUDE (MarketingBudget)"
208
- ],
134
+ database = instance .database (
135
+ database_id ,
136
+ database_dialect = DatabaseDialect .POSTGRESQL ,
209
137
)
210
138
211
- operation = spanner_client . database_admin_api . update_database_ddl ( request )
139
+ operation = database . create ( )
212
140
213
141
print ("Waiting for operation to complete..." )
214
142
operation .result (OPERATION_TIMEOUT_SECONDS )
215
143
216
- print ("Added the AlbumsByAlbumTitle2 index." )
144
+ create_table_using_ddl (database .name )
145
+ print ("Created database {} on instance {}" .format (database_id , instance_id ))
217
146
218
147
219
- # [END spanner_postgresql_create_storing_index]
148
+ def create_table_using_ddl (database_name ):
149
+ spanner_client = spanner .Client ()
150
+ request = spanner_admin_database_v1 .UpdateDatabaseDdlRequest (
151
+ database = database_name ,
152
+ statements = [
153
+ """CREATE TABLE Singers (
154
+ SingerId bigint NOT NULL,
155
+ FirstName character varying(1024),
156
+ LastName character varying(1024),
157
+ SingerInfo bytea,
158
+ FullName character varying(2048)
159
+ GENERATED ALWAYS AS (FirstName || ' ' || LastName) STORED,
160
+ PRIMARY KEY (SingerId)
161
+ )""" ,
162
+ """CREATE TABLE Albums (
163
+ SingerId bigint NOT NULL,
164
+ AlbumId bigint NOT NULL,
165
+ AlbumTitle character varying(1024),
166
+ PRIMARY KEY (SingerId, AlbumId)
167
+ ) INTERLEAVE IN PARENT Singers ON DELETE CASCADE""" ,
168
+ ],
169
+ )
170
+ operation = spanner_client .database_admin_api .update_database_ddl (request )
171
+ operation .result (OPERATION_TIMEOUT_SECONDS )
172
+
173
+
174
+ # [END spanner_postgresql_create_database]
220
175
221
176
222
177
# [START spanner_postgresql_create_sequence]
223
178
def create_sequence (instance_id , database_id ):
224
179
"""Creates the Sequence and insert data"""
225
-
226
- from google .cloud .spanner_admin_database_v1 .types import spanner_database_admin
227
-
228
180
spanner_client = spanner .Client ()
229
181
instance = spanner_client .instance (instance_id )
230
182
database = instance .database (database_id )
231
183
232
- request = spanner_database_admin .UpdateDatabaseDdlRequest (
184
+ request = spanner_admin_database_v1 .UpdateDatabaseDdlRequest (
233
185
database = database .name ,
234
186
statements = [
235
187
"CREATE SEQUENCE Seq BIT_REVERSED_POSITIVE" ,
@@ -272,68 +224,78 @@ def insert_customers(transaction):
272
224
# [END spanner_postgresql_create_sequence]
273
225
274
226
275
- # [START spanner_postgresql_alter_sequence]
276
- def alter_sequence (instance_id , database_id ):
277
- """Alters the Sequence and insert data"""
227
+ # [START spanner_postgresql_create_storing_index]
228
+ def add_storing_index (instance_id , database_id ):
229
+ """Adds an storing index to the example database."""
230
+ spanner_client = spanner .Client ()
231
+ instance = spanner_client .instance (instance_id )
232
+ database = instance .database (database_id )
233
+
234
+ operation = database .update_ddl (
235
+ [
236
+ "CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle)"
237
+ "INCLUDE (MarketingBudget)"
238
+ ]
239
+ )
278
240
279
- from google .cloud .spanner_admin_database_v1 .types import spanner_database_admin
241
+ print ("Waiting for operation to complete..." )
242
+ operation .result (OPERATION_TIMEOUT_SECONDS )
280
243
244
+ print ("Added the AlbumsByAlbumTitle2 index." )
245
+
246
+
247
+ # [END spanner_postgresql_create_storing_index]
248
+
249
+
250
+ # [START spanner_postgresql_drop_sequence]
251
+ def drop_sequence (instance_id , database_id ):
252
+ """Drops the Sequence"""
281
253
spanner_client = spanner .Client ()
282
254
instance = spanner_client .instance (instance_id )
283
255
database = instance .database (database_id )
284
256
285
- request = spanner_database_admin .UpdateDatabaseDdlRequest (
286
- database = database .name ,
287
- statements = ["ALTER SEQUENCE Seq SKIP RANGE 1000 5000000" ],
257
+ operation = database .update_ddl (
258
+ [
259
+ "ALTER TABLE Customers ALTER COLUMN CustomerId DROP DEFAULT" ,
260
+ "DROP SEQUENCE Seq" ,
261
+ ]
288
262
)
289
- operation = spanner_client .database_admin_api .update_database_ddl (request )
290
263
291
264
print ("Waiting for operation to complete..." )
292
265
operation .result (OPERATION_TIMEOUT_SECONDS )
293
266
294
267
print (
295
- "Altered Seq sequence to skip an inclusive range between 1000 and 5000000 on database {} on instance {}" .format (
268
+ "Altered Customers table to drop DEFAULT from CustomerId column and dropped the Seq sequence on database {} on instance {}" .format (
296
269
database_id , instance_id
297
270
)
298
271
)
299
272
300
- def insert_customers (transaction ):
301
- results = transaction .execute_sql (
302
- "INSERT INTO Customers (CustomerName) VALUES "
303
- "('Lea'), "
304
- "('Cataline'), "
305
- "('Smith') "
306
- "RETURNING CustomerId"
307
- )
308
- for result in results :
309
- print ("Inserted customer record with Customer Id: {}" .format (* result ))
310
- print (
311
- "Number of customer records inserted is {}" .format (
312
- results .stats .row_count_exact
313
- )
314
- )
315
-
316
- database .run_in_transaction (insert_customers )
317
273
274
+ # [END spanner_postgresql_drop_sequence]
318
275
319
- # [END spanner_postgresql_alter_sequence]
320
-
321
-
322
- # [START spanner_postgresql_drop_sequence]
323
- def drop_sequence (instance_id , database_id ):
324
- """Drops the Sequence"""
325
-
326
- from google .cloud .spanner_admin_database_v1 .types import spanner_database_admin
327
276
277
+ def create_table_with_datatypes (instance_id , database_id ):
278
+ """Creates a table with supported datatypes."""
279
+ # [START spanner_postgresql_create_table_with_datatypes]
280
+ # instance_id = "your-spanner-instance"
281
+ # database_id = "your-spanner-db-id"
328
282
spanner_client = spanner .Client ()
329
283
instance = spanner_client .instance (instance_id )
330
284
database = instance .database (database_id )
331
285
332
- request = spanner_database_admin .UpdateDatabaseDdlRequest (
286
+ request = spanner_admin_database_v1 .UpdateDatabaseDdlRequest (
333
287
database = database .name ,
334
288
statements = [
335
- "ALTER TABLE Customers ALTER COLUMN CustomerId DROP DEFAULT" ,
336
- "DROP SEQUENCE Seq" ,
289
+ """CREATE TABLE Venues (
290
+ VenueId BIGINT NOT NULL,
291
+ VenueName character varying(100),
292
+ VenueInfo BYTEA,
293
+ Capacity BIGINT,
294
+ OutdoorVenue BOOL,
295
+ PopularityScore FLOAT8,
296
+ Revenue NUMERIC,
297
+ LastUpdateTime SPANNER.COMMIT_TIMESTAMP NOT NULL,
298
+ PRIMARY KEY (VenueId))"""
337
299
],
338
300
)
339
301
operation = spanner_client .database_admin_api .update_database_ddl (request )
@@ -342,10 +304,8 @@ def drop_sequence(instance_id, database_id):
342
304
operation .result (OPERATION_TIMEOUT_SECONDS )
343
305
344
306
print (
345
- "Altered Customers table to drop DEFAULT from CustomerId column and dropped the Seq sequence on database {} on instance {}" .format (
307
+ "Created Venues table on database {} on instance {}" .format (
346
308
database_id , instance_id
347
309
)
348
310
)
349
-
350
-
351
- # [END spanner_postgresql_drop_sequence]
311
+ # [END spanner_postgresql_create_table_with_datatypes]
0 commit comments