Cloud函数将数据从云存储桶导入CloudSQL,但获取已存在架构错误



我正在尝试使用cloud函数将数据从云存储桶导入CloudSQL实例。

如何在使用单个云函数导入数据之前删除架构?

我在云函数中使用Node.js。

错误:

error: exit status 3 stdout(capped at 100k bytes): SET SET SET SET SET set_config ------------ (1 row) SET SET SET SET stderr: ERROR: schema "<  >" already exists

https://cloud.google.com/sql/docs/mysql/admin-api/rest/v1beta4/instances/import在下面的代码中,我需要将除public架构之外的所有现有架构删除到哪里?

入口点:importDatabase

index.js

const {google} = require('googleapis');
const {auth} = require("google-auth-library");
var sqlAdmin = google.sqladmin('v1beta4');

exports.importDatabase = (_req, res) => {
async function doIt() {
const authRes = await auth.getApplicationDefault();
let authClient = authRes.credential;
var request = {
project: 'my-project',  // TODO: Update placeholder value.

instance: 'my-instance',  // TODO: Update placeholder value.

resource: {
importContext: {
kind: "sql#importContext",
fileType: "SQL", // CSV

uri: <bucket path>,
database: <database-name>
// Options for importing data as SQL statements.
// sqlimportOptions: {
//   /**
},

auth: authClient,
};

sqladmin.instances.import(request, function(err, result) {
if (err) {
console.log(err);
} else {
console.log(result);
}
res.status(200).send("Command completed", err, result); 
});
}
doIt();

};

软件包.json

{
"name": "import-database",
"version": "0.0.1",
"dependencies": {
"googleapis": "^39.2.0",
"google-auth-library": "3.1.2"
}
}

该错误看起来是由于上一次中止的导入而发生的,该导入成功地将";schema_name";架构,然后在没有首先重新初始化数据库的情况下完成了后续导入,请查看有关Cloud SQL导入的有用文档防止此问题的一种方法是将SQL文件中的create语句更改为:

CREATE SCHEMA schema_name;CREATE SCHEMA IF NOT EXISTS schema_name;

由于默认情况下会考虑删除当前创建的架构,只有具有云SQL管理员(roles/cloudsql.Admin(或所有者(roles/Owner(角色的用户或服务帐户才有权删除云SQL实例,请查看cloudsql.instances.delete上的有用文档,以帮助您了解下一步操作。您还可以为包括cloudsql.instances.delete权限的用户或服务帐户定义IAM自定义角色。IAM自定义角色支持此权限。

作为导入导出操作的最佳实践,我们建议您采用最小权限原则,在这种情况下,这意味着创建一个自定义角色并添加该特定权限,然后将其分配给您的服务帐户。或者,服务帐户可以被授予"云SQL管理员"角色或"云生成器API服务代理"角色,这些角色包括此权限,因此允许您执行此命令。

注意:建议重新验证执行的任何删除操作,因为这可能会导致有用数据的丢失。

相关内容

  • 没有找到相关文章

最新更新