【问题标题】:How to find Google Spanner table creation date and time?如何查找 Google Spanner 表创建日期和时间?
【发布时间】:2026-01-29 21:30:01
【问题描述】:

我正在尝试在 Google Spanner 中创建表的日期和时间,但我没有看到任何选项存在。即使在 information.schema 中没有可用的信息

【问题讨论】:

  • 您是否要记录新表创建时间的时间戳?
  • 是的。像在 oracle 中一样,您可以在 all_objects 中获取表创建日期。类似的方式,是否有任何系统表可以让我在 Google Spanner 中获取表创建日期?

标签: google-cloud-spanner


【解决方案1】:

在 Spanner 中,您无法获得表的 create_time,我相信这是由于 Spanner 表的设计方式和共享到多个区域的方式,因此您无法获得可靠的 create_time。一种解决方法是;创建表时,您可以记录该时间并将其保存到另一个表中。这样,您将拥有所有表创建时间的寄存器。代码如下:

// Imports the Google Cloud client library
const {Spanner} = require('@google-cloud/spanner');
             
// Creates a client
const projectId = "PROJECTID"
const instanceId = "INSTANCEID";
const databaseId = "DATABASEID";
const spanner = new Spanner({projectId});
 
// Gets a reference to a Cloud Spanner instance and database
const instance = spanner.instance(instanceId);
const database = instance.database(databaseId);

// create the table TablesMeta that will holds your tables creation time
const tableMetaschema = [
'CREATE TABLE TablesMeta (' +
'  tableId INT64 NOT NULL,' +
'  TableName STRING(1024),'+
'  TableCreateTime DATE' +
') PRIMARY KEY(tableId)'
];


database.updateSchema(TablesMeta)

// create a new table and add its creation time to the TablesMeta table
const singerSchema = [
'CREATE TABLE Singers (' +
'  SingerId INT64 NOT NULL,' +
'  FirstName STRING(1024),' +
'  LastName STRING(1024),' +
'  SingerInfo BYTES(MAX),' +
') PRIMARY KEY(SingerId)'
];

database.updateSchema(singerSchema).then(() => {

database.runTransaction(async (err, transaction) => {
if (err) {
  console.error(err);
  return;
}
try {
  const [rowCount] = await transaction.runUpdate({
    sql:
      'INSERT TablesMeta (tableId, TableName, TableCreateTime) VALUES (1, @TableName, @TableCreateTime)',
    params: {
      TableName: 'Singers',
      TableCreateTime: Spanner.date(),
    },
  });

  console.log(
    `Successfully inserted ${rowCount} record into the TablesMeta table.`
  );

  await transaction.commit();
} catch (err) {
  console.error('ERROR:', err);
} finally {
  // Close the database when finished.
  database.close();
}
});

})

【讨论】: