@@ -34,7 +34,8 @@ def create_backup(instance_id, database_id, backup_id):
3434
3535 # Create a backup
3636 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 )
3839 operation = backup .create ()
3940
4041 # Wait for backup operation to complete.
@@ -47,8 +48,8 @@ def create_backup(instance_id, database_id, backup_id):
4748 # Get the name, create time and backup size.
4849 backup .reload ()
4950 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
5253 )
5354 )
5455
@@ -63,7 +64,7 @@ def restore_database(instance_id, new_database_id, backup_id):
6364 instance = spanner_client .instance (instance_id )
6465 # Create a backup on database_id.
6566
66- # Start restoring backup to a new database.
67+ # Start restoring an existing backup to a new database.
6768 backup = instance .backup (backup_id )
6869 new_database = instance .database (new_database_id )
6970 operation = new_database .restore (backup )
@@ -75,10 +76,11 @@ def restore_database(instance_id, new_database_id, backup_id):
7576 new_database .reload ()
7677 restore_info = new_database .restore_info
7778 print (
78- "Database {} restored to {} from backup {}." .format (
79+ "Database {} restored to {} from backup {} with version time {} ." .format (
7980 restore_info .backup_info .source_database ,
8081 new_database_id ,
8182 restore_info .backup_info .backup ,
83+ restore_info .backup_info .version_time
8284 )
8385 )
8486
@@ -269,6 +271,45 @@ def update_backup(instance_id, backup_id):
269271# [END spanner_update_backup]
270272
271273
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+
272313if __name__ == "__main__" : # noqa: C901
273314 parser = argparse .ArgumentParser (
274315 description = __doc__ , formatter_class = argparse .RawDescriptionHelpFormatter
0 commit comments