Google cloud platform 如何在google cloud sql上下载postgres数据库的模式?

Google cloud platform 如何在google cloud sql上下载postgres数据库的模式?,google-cloud-platform,google-cloud-sql,pg-dump,Google Cloud Platform,Google Cloud Sql,Pg Dump,我正在尝试使用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 我如何为谷歌sql云找到这些数据 一次尝试: pg_dump -s -h=IPADD

我正在尝试使用
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
我如何为谷歌sql云找到这些数据

一次尝试:

pg_dump -s -h=IPADDRESS -d=postgres
导致此错误的原因:

pg_dump: [archiver (db)] connection to database "" failed: invalid connection option ""
您可以找到如何从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]
如果要手动对由云SQL管理的而不是的数据库执行此操作,可以使用pg_dump命令执行此操作:

pg\U dump-U[USERNAME]--格式=普通--无所有者--无acl[数据库\U名称]\
|sed-E的/(DROP | CREATE | COMMENT ON)EXTENSION/-\1 EXTENSION/g'>[SQL\u FILE].SQL

请注意,此命令在云SQL实例上不起作用,因为对于某些标志,您需要超级用户角色

编辑

也可以使用卷曲导出数据。如果只需要模式,则应在请求正文中添加属性
“schemaOnly”:true
。您可以找到有关如何生成请求的更多详细信息

您可以找到如何从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]
如果要手动对由云SQL管理的而不是的数据库执行此操作,可以使用pg_dump命令执行此操作:

pg\U dump-U[USERNAME]--格式=普通--无所有者--无acl[数据库\U名称]\
|sed-E的/(DROP | CREATE | COMMENT ON)EXTENSION/-\1 EXTENSION/g'>[SQL\u FILE].SQL

请注意,此命令在云SQL实例上不起作用,因为对于某些标志,您需要超级用户角色

编辑

也可以使用卷曲导出数据。如果只需要模式,则应在请求正文中添加属性
“schemaOnly”:true
。您可以找到有关如何生成请求的更多详细信息

我就是这样做的:

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\u sql\u export\u 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 bucket)

查找绑定到db实例id的服务帐户:

$ gcloud sql instances describe my-postgres-db | grep serviceAccountEmailAddress
serviceAccountEmailAddress: xxx123456789-xxxxxx@gcp-sa-cloud-sql.iam.gserviceaccount.com
我就是这样做的:

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\u sql\u export\u 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 bucket)

查找绑定到db实例id的服务帐户:

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

gcloud指南没有解释如何仅获取架构,pg_dump命令没有包括连接选项。我已使用仅导出架构的备选方案编辑了答案。gcloud指南没有解释如何仅获取架构,pg_dump命令不包括连接选项。我已使用仅导出架构的替代选项编辑了答案。