【问题标题】:How to download the schema of a postgres database on google cloud sql?如何在谷歌云 sql 上下载 postgres 数据库的架构?
【发布时间】:2020-03-16 02:23:57
【问题描述】:

我正在尝试使用pg_dump -s,但我不知道如何连接。

手册页提供了这些连接选项:

  -d, --dbname=DBNAME      database to dump
  -h, --host=HOSTNAME      database server host or socket directory
  -p, --port=PORT          database server port number

我如何为 google sql cloud 找出这些数据?

一次尝试:

pg_dump -s -h=IPADDRESS -d=postgres

导致此错误:

pg_dump: [archiver (db)] connection to database "" failed: invalid connection option ""

【问题讨论】:

    标签: google-cloud-platform google-cloud-sql pg-dump


    【解决方案1】:

    Here 您可以找到有关如何从 GCP 控制台用户界面导出数据的指南。此操作在后端执行“pg_dump”命令,您无需担心设置任何参数。

    您还可以使用 gcloud 命令导出到 GCS 存储桶:

      gsutil mb -p [PROJECT_NAME] -l [LOCATION_NAME] gs://[BUCKET_NAME]
    
    
      gcloud sql instances describe [INSTANCE_NAME]
    
    
      gsutil acl ch -u [SERVICE_ACCOUNT_ADDRESS]:W gs://[BUCKET_NAME]
    
    
      gcloud sql export sql [INSTANCE_NAME] gs://[BUCKET_NAME]/sqldumpfile.gz \
                              --database=[DATABASE_NAME]
    
    
      gsutil acl ch -d [SERVICE_ACCOUNT_ADDRESS] gs://[BUCKET_NAME]
    

    如果您想为不由 Cloud SQL 管理的数据库手动执行此操作,您可以使用 pg_dump 命令执行此操作:

    pg_dump -U [USERNAME] --format=plain --no-owner --no-acl [DATABASE_NAME] \ | sed -E 's/(DROP|CREATE|COMMENT ON) EXTENSION/-- \1 EXTENSION/g' > [SQL_FILE].sql

    请注意,此命令不适用于 Cloud SQL 实例,因为对于某些标志,您需要 SUPERUSER 角色。

    编辑:

    您还可以使用 the Cloud SQL API 使用 curl 导出数据。如果您只需要架构,则应在请求正文中添加属性"schemaOnly": true。 Here 您可以找到有关如何构建请求的更多详细信息。

    【讨论】:

    • gcloud 指南没有解释如何只获取架构,pg_dump 命令不包括连接选项。
    • 我已经编辑了答案,并使用了仅导出架构的替代方法。
    【解决方案2】:

    我就是这样做的:

    curl -X POST \
    -H "Authorization: Bearer "$(gcloud auth print-access-token) \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @/home/donn/tmp/gcp_sql_export_request.json \
    https://www.googleapis.com/sql/v1beta4/projects/my-project-id/instances/my-postgres-db/export
    

    文件gcp_sql_export_request.json 包含的位置:

    {
     "exportContext":
       {
          "fileType": "SQL",
          "uri": "gs://my-bucket/tmp/donn_syslogdb_dump.sql",
          "databases": ["mydatabase"],
          "sqlExportOptions": {
            "schemaOnly": true
          },
          "offload": true
        }
    }
    

    offload=true 可能不是必需的,但我这样做只是为了安全(以防操作出错并运行很长时间)。

    确保将storage.objectAdmin 权限(GCS 存储桶)授予与数据库绑定的服务帐户。

    找到绑定到 db instance-id 的服务帐号:

    $ gcloud sql instances describe my-postgres-db | grep serviceAccountEmailAddress
    serviceAccountEmailAddress: xxx123456789-xxxxxx@gcp-sa-cloud-sql.iam.gserviceaccount.com
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 2020-06-24
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 2014-09-04
      相关资源
      最近更新 更多