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命令不包括连接选项。我已使用仅导出架构的替代选项编辑了答案。