【问题标题】:Cloud Function to import data into CloudSQL from cloud storage bucket but getting already schema exist errorCloud Function 将数据从云存储桶导入 CloudSQL 但获取模式已存在错误
【发布时间】:2022-10-02 21:18:28
【问题描述】:

我正在尝试使用云功能将数据从云存储桶导入 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\"
  }
}

标签: google-cloud-platform google-cloud-functions google-cloud-storage google-cloud-sql


【解决方案1】:

错误似乎是由于先前中止的导入设法传输“schema_name”模式而发生的,然后在没有首先重新初始化数据库的情况下完成了后续导入,请查看Cloud SQL import 上的有用文档 防止此问题的一种方法是将 SQL 文件中的 create 语句从以下位置更改:

CREATE SCHEMA schema_name;CREATE SCHEMA IF NOT EXISTS schema_name;

到目前为止,默认情况下会考虑删除当前创建的架构,只有具有 Cloud SQL Admin (roles/cloudsql.admin) 或 Owner (roles/owner) 角色的用户或服务帐户才有权删除 Cloud SQL 实例,请检查cloudsql.instances.delete 上的有用文档可帮助您了解后续步骤。您还可以为包含 cloudsql.instances.delete 权限的用户或服务帐户定义 IAM 自定义角色。 IAM 自定义角色支持此权限。

作为best practice for import export operations,我们建议您采用最小权限原则,在这种情况下,这意味着创建一个自定义角色并添加该特定权限并将其分配给您的服务帐户。或者,可以为服务帐户授予“Cloud SQL Admin”角色或“Cloud Composer API 服务代理”角色,其中包括此权限,因此允许您执行此命令。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-17
    • 2020-10-18
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    相关资源
    最近更新 更多