@@ -34,7 +34,8 @@ def create_backup(instance_id, database_id, backup_id):
34
34
35
35
# Create a backup
36
36
expire_time = datetime .utcnow () + timedelta (days = 14 )
37
- backup = instance .backup (backup_id , database = database , expire_time = expire_time )
37
+ version_time = database .earliest_version_time
38
+ backup = instance .backup (backup_id , database = database , expire_time = expire_time , version_time = version_time )
38
39
operation = backup .create ()
39
40
40
41
# Wait for backup operation to complete.
@@ -47,8 +48,8 @@ def create_backup(instance_id, database_id, backup_id):
47
48
# Get the name, create time and backup size.
48
49
backup .reload ()
49
50
print (
50
- "Backup {} of size {} bytes was created at {}" .format (
51
- backup .name , backup .size_bytes , backup .create_time
51
+ "Backup {} of size {} bytes was created at {} for version of database at {} " .format (
52
+ backup .name , backup .size_bytes , backup .create_time , backup . version_time
52
53
)
53
54
)
54
55
@@ -63,7 +64,7 @@ def restore_database(instance_id, new_database_id, backup_id):
63
64
instance = spanner_client .instance (instance_id )
64
65
# Create a backup on database_id.
65
66
66
- # Start restoring backup to a new database.
67
+ # Start restoring an existing backup to a new database.
67
68
backup = instance .backup (backup_id )
68
69
new_database = instance .database (new_database_id )
69
70
operation = new_database .restore (backup )
@@ -75,10 +76,11 @@ def restore_database(instance_id, new_database_id, backup_id):
75
76
new_database .reload ()
76
77
restore_info = new_database .restore_info
77
78
print (
78
- "Database {} restored to {} from backup {}." .format (
79
+ "Database {} restored to {} from backup {} with version time {} ." .format (
79
80
restore_info .backup_info .source_database ,
80
81
new_database_id ,
81
82
restore_info .backup_info .backup ,
83
+ restore_info .backup_info .version_time
82
84
)
83
85
)
84
86
@@ -269,6 +271,45 @@ def update_backup(instance_id, backup_id):
269
271
# [END spanner_update_backup]
270
272
271
273
274
+ # [START spanner_create_database_with_version_retention_period]
275
+ def create_database_with_version_retention_period (instance_id , database_id , retention_period ):
276
+ """Creates a database with a version retention period."""
277
+ spanner_client = spanner .Client ()
278
+ instance = spanner_client .instance (instance_id )
279
+ ddl_statements = [
280
+ "CREATE TABLE Singers ("
281
+ + " SingerId INT64 NOT NULL,"
282
+ + " FirstName STRING(1024),"
283
+ + " LastName STRING(1024),"
284
+ + " SingerInfo BYTES(MAX)"
285
+ + ") PRIMARY KEY (SingerId)" ,
286
+ "CREATE TABLE Albums ("
287
+ + " SingerId INT64 NOT NULL,"
288
+ + " AlbumId INT64 NOT NULL,"
289
+ + " AlbumTitle STRING(MAX)"
290
+ + ") PRIMARY KEY (SingerId, AlbumId),"
291
+ + " INTERLEAVE IN PARENT Singers ON DELETE CASCADE" ,
292
+ "ALTER DATABASE `{}`"
293
+ " SET OPTIONS (version_retention_period = '{}')" .format (
294
+ database_id , retention_period
295
+ )
296
+ ]
297
+ db = instance .database (database_id , ddl_statements )
298
+ operation = db .create ()
299
+
300
+ operation .result (30 )
301
+
302
+ db .reload ()
303
+
304
+ print ("Database {} created with version retention period {} and earliest version time {}" .format (
305
+ db .database_id , db .version_retention_period , db .earliest_version_time
306
+ ))
307
+
308
+ db .drop ()
309
+
310
+ # [END spanner_create_database_with_version_retention_period]
311
+
312
+
272
313
if __name__ == "__main__" : # noqa: C901
273
314
parser = argparse .ArgumentParser (
274
315
description = __doc__ , formatter_class = argparse .RawDescriptionHelpFormatter
0 commit comments