ב-Cloud SQL אפשר ליצור, להציג ולמחוק מסדי נתונים של PostgreSQL במכונה. ניהול של מסדי נתונים נפרדים עוזר לאחסן ולארגן את נתוני האפליקציות, תוך בידוד של עומסי העבודה בשירותים השונים.
במכונה חדשה שנוצרה יש מסד נתונים של postgres.
למידע נוסף על מסדי נתונים של PostgreSQL, קראו את
המסמכים של PostgreSQL .
לפני שמתחילים
לפני שתבצעו את המשימות שבדף הזה, אתם צריכים:
יצרתם מכונה של Cloud SQL. מידע נוסף זמין במאמר יצירת מכונות .
אם אתם מתכננים להשתמש בלקוח psql כדי ליצור או לנהל את מסדי הנתונים, אתם צריכים:
יצירת מסד נתונים במכונה של Cloud SQL
הערה: מסד הנתונים postgres הוא מסד הנתונים שמתחברים אליו כברירת מחדל לפני שיוצרים מסדי נתונים אחרים. אחרי שיוצרים מסד נתונים אחר, עוברים אליו כדי ליצור טבלאות ולהוסיף נתונים. אל תשתמשו במסד הנתונים postgres לנתוני האפליקציה, כי מסד הנתונים הזה משמש בעיקר למטרות ניהוליות.
האורך המקסימלי של שם מסד הנתונים הוא 64 תווים. למידע נוסף על קריטריונים אחרים לשם הזה, ראו מזהים ומילות מפתח .
אם לא תציינו קבוצת תווים ואיסוף כשאתם יוצרים את מסד הנתונים,
למסד הנתונים יהיו ערכי ברירת המחדל הבאים:
קבוצת תווים: UTF8
איסוף: en_US.UTF8
המסוף
הערה: אי אפשר להשתמש במסוף Google Cloud כדי להגדיר ערכים לערכת התווים ול-collation. כדי להגדיר את הערכים האלה, צריך להשתמש בלקוח psql כדי ליצור את מסד הנתונים. מידע נוסף על השימוש בלקוח הזה ליצירת מסד הנתונים זמין בתוכן של הכרטיסייה psql Client .
נכנסים לדף Cloud SQL Instances במסוף Google Cloud .
כניסה לדף Cloud SQL Instances
כדי לפתוח את הדף Overview של מכונה, לוחצים על שם המכונה.
בתפריט הניווט של SQL, לוחצים על Databases .
לוחצים על Create database .
בתיבת הדו-שיח New database , מציינים את שם מסד הנתונים.
לוחצים על יצירה .
gcloud
הערה: אי אפשר להשתמש ב-gcloud כדי להגדיר ערכים לקבוצת התווים ול-collation. כדי להגדיר את הערכים האלה, צריך להשתמש בלקוח psql כדי ליצור את מסד הנתונים. מידע נוסף על השימוש בלקוח הזה ליצירת מסד הנתונים זמין בתוכן של הכרטיסייה psql Client .
למידע נוסף, ראו gcloud
sql databases create .
gcloud sql databases create DATABASE_NAME \
--instance= INSTANCE_NAME
הערה: אי אפשר להשתמש ב-Terraform כדי להגדיר ערכים לערכת התווים ול-collation. כדי להגדיר את הערכים האלה, צריך להשתמש בלקוח psql כדי ליצור את מסד הנתונים. למידע נוסף על השימוש בלקוח הזה כדי ליצור את מסד הנתונים, עיינו בתוכן בכרטיסייה psql Client .
כדי ליצור מסד נתונים, משתמשים במשאב של Terraform .
החלה של השינויים
כך מחילים את ההגדרות של Terraform בפרויקט ב- Google Cloud :
הכנת Cloud Shell
מפעילים את Cloud Shell .
מגדירים את פרויקט ברירת המחדל ב- Google Cloud שבו רוצים להחיל את ההגדרות של Terraform.
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
אם תגדירו ערכים ספציפיים בקובץ התצורה של Terraform, הם יבטלו את ערכי ברירת המחדל של משתני הסביבה.
הכנת הספרייה
לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית ).
יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש. שם הקובץ חייב לכלול את הסיומת .tf, למשל main.tf. במדריך הזה, הקובץ נקרא main.tf.
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
אם אתם עוקבים אחרי המדריך, תוכלו להעתיק את הקוד לדוגמה בכל קטע או שלב.
מעתיקים את הקוד לדוגמה בקובץ main.tf החדש שיצרתם.
לחלופין, אפשר גם להעתיק את הקוד מ-GitHub. כדאי לעשות את זה כשקטע הקוד של Terraform הוא חלק מפתרון מקצה לקצה.
בודקים את הפרמטרים לדוגמה ומשנים אותם בהתאם לסביבה שלכם.
שומרים את השינויים.
מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
terraform init
אופציונלי: תוכלו לכלול את האפשרות -upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:
terraform init -upgrade
החלה של השינויים
בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
terraform plan
מתקנים את ההגדרות לפי הצורך.
מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה, כדי להחיל את הגדרות Terraform:
terraform apply
ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!".
פותחים את הפרויקט ב- Google Cloud כדי להציג את התוצאות. במסוף Google Cloud , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.
הערה: בדרך כלל הנחת העבודה בדוגמאות של Terraform היא שממשקי ה-API הנדרשים מופעלים בפרויקט ב- Google Cloud .
למחוק את השינויים
כדי למחוק את השינויים:
כדי להשבית את ההגנה מפני מחיקה, בקובץ התצורה של Terraform מגדירים את הארגומנט deletion_protection לערך false.
deletion_protection = "false"
מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה, כדי להחיל את הגדרות Terraform המעודכנות:
terraform apply
כדי להסיר משאבים שהוחלו בעבר על הגדרות Terraform, מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה:
terraform destroy
REST v1
הערה: אי אפשר להשתמש בממשקי API בארכיטקטורת REST כדי להגדיר ערכים לקבוצת התווים ולאיסוף. כדי להגדיר את הערכים האלה, צריך להשתמש בלקוח psql כדי ליצור את מסד הנתונים. למידע נוסף על השימוש בלקוח הזה כדי ליצור את מסד הנתונים, עיינו בתוכן בכרטיסייה psql Client .
הבקשה הבאה משתמשת ב-method databases:insert כדי ליצור מסד נתונים חדש במכונה שצוינה.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
project-id : מזהה הפרויקט
instance-id : מזהה המכונה
database-name : השם של מסד נתונים במכונה של Cloud SQL
ה-method של ה-HTTP וכתובת ה-URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases
תוכן בקשת JSON:
{
"project": "project-id ",
"instance": "instance-id ",
"name": "database-name "
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
Curl (Linux, macOS או Cloud Shell)
שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases"
PowerShell (Windows)
שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases" | Select-Object -Expand Content
אתם אמורים לקבל תגובת JSON שדומה לזו:
תשובה
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "CREATE_DATABASE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
REST v1beta4
הערה: אי אפשר להשתמש בממשקי API בארכיטקטורת REST כדי להגדיר ערכים לקבוצת התווים ולאיסוף. כדי להגדיר את הערכים האלה, צריך להשתמש בלקוח psql כדי ליצור את מסד הנתונים. למידע נוסף על השימוש בלקוח הזה כדי ליצור את מסד הנתונים, עיינו בתוכן בכרטיסייה psql Client .
הבקשה הבאה משתמשת ב-method databases:insert כדי ליצור מסד נתונים חדש במכונה שצוינה.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
project-id : מזהה הפרויקט
instance-id : מזהה המכונה
database-name : השם של מסד נתונים במכונה של Cloud SQL
ה-method של ה-HTTP וכתובת ה-URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases
תוכן בקשת JSON:
{
"project": "project-id ",
"instance": "instance-id ",
"name": "database-name "
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
Curl (Linux, macOS או Cloud Shell)
שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases"
PowerShell (Windows)
שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases" | Select-Object -Expand Content
אתם אמורים לקבל תגובת JSON שדומה לזו:
תשובה
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "CREATE_DATABASE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
לקוח psql
למידע נוסף, קראו את המאמר CREATE DATABASE במסמכי התיעוד של PostgreSQL.
בנושאים הבאים במסמכי התיעוד של PostgreSQL יש רקע ורשימה של ערכים נתמכים של קבוצות תווים:
CREATE DATABASE database_name
[[ ENCODING encoding ][ LC_COLLATE lc_collate ]];
לדוגמה: CREATE DATABASE "example_db" WITH OWNER "example_user"
ENCODING 'UTF8' LC_COLLATE = 'pl_PL.utf8' LC_CTYPE = 'pl_PL.utf8' TEMPLATE template0;
הערה: תבנית ברירת המחדל היא template1.
עם זאת, psql משתמש ב-template0 כי זו התבנית היחידה שמקבלת קידוד ומערכת תווים ספציפיים. מידע נוסף זמין במאמר מסדי נתונים של תבניות .
הצגת רשימה של מסדי הנתונים
כדי להציג את כל מסדי הנתונים במכונה:
המסוף
נכנסים לדף Cloud SQL Instances במסוף Google Cloud .
כניסה לדף Cloud SQL Instances
כדי לפתוח את הדף Overview של מכונה, לוחצים על שם המכונה.
בתפריט שמימין, לוחצים על Databases . בדף Databases מופיעה רשימה של מסדי נתונים, יחד עם סוג ה-collation, ערכת התווים וסוג מסד הנתונים שלהם.
REST v1
הבקשה הבאה משתמשת ב-method databases:list כדי להציג את מסדי הנתונים של מכונה.
כשמציגים את מסדי הנתונים באמצעות ה-API, רואים מסדי נתונים נוספים של תבניות ומסד נתונים של המערכת שלא מוצגים במסוף. אי אפשר למחוק או לנהל את מסד הנתונים של המערכת.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
project-id : מזהה הפרויקט
instance-id : מזהה המכונה
ה-method של ה-HTTP וכתובת ה-URL:
GET https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
Curl (Linux, macOS או Cloud Shell)
מריצים את הפקודה הבאה:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases"
PowerShell (Windows)
מריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases" | Select-Object -Expand Content
אתם אמורים לקבל תגובת JSON שדומה לזו:
תשובה
{
"kind": "sql#database",
"charset": "utf8",
"collation": "utf8_general_ci",
"etag": "etag ",
"name": "sys",
"instance": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases/sys",
"project": "project-id "
}
הערה : ה-API של databases.list תומך רק במטען ייעודי (payload) של תגובות שכולל עד 4MB של טקסט.
אם תריצו בקשה לרשימת מסדי נתונים במכונה גדולה, יכול להיות שתקבלו הודעת שגיאה. במקרה כזה, כדי לקבל את רשימת מסדי הנתונים, מומלץ להריץ את הבקשה ישירות מהמכונה.
REST v1beta4
הבקשה הבאה משתמשת ב-method databases:list כדי להציג את מסדי הנתונים של מכונה.
כשמציגים את מסדי הנתונים באמצעות ה-API, רואים מסדי נתונים נוספים של תבניות ומסד נתונים של המערכת שלא מוצגים במסוף. אי אפשר למחוק או לנהל את מסד הנתונים של המערכת.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
project-id : מזהה הפרויקט
instance-id : מזהה המכונה
ה-method של ה-HTTP וכתובת ה-URL:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
Curl (Linux, macOS או Cloud Shell)
מריצים את הפקודה הבאה:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases"
PowerShell (Windows)
מריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases" | Select-Object -Expand Content
אתם אמורים לקבל תגובת JSON שדומה לזו:
תשובה
{
"kind": "sql#database",
"charset": "utf8",
"collation": "utf8_general_ci",
"etag": "etag ",
"name": "sys",
"instance": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases/sys",
"project": "project-id "
}
הערה : ה-API של databases.list תומך רק במטען ייעודי (payload) של תגובות שכולל עד 4MB של טקסט.
אם תריצו בקשה לרשימת מסדי נתונים במכונה גדולה, יכול להיות שתקבלו הודעת שגיאה. במקרה כזה, כדי לקבל את רשימת מסדי הנתונים, מומלץ להריץ את הבקשה ישירות מהמכונה.
לקוח psql
למידע נוסף, ראו רשימה .
כשמציגים את מסדי הנתונים באמצעות הלקוח psql, רואים מסדי נתונים נוספים של תבניות ומסד נתונים של המערכת שלא מוצגים במסוף. אי אפשר למחוק או לנהל את מסד הנתונים של המערכת.
\ l
מחיקה של מסד נתונים
כדי למחוק מסד נתונים במכונה של Cloud SQL:
המסוף
נכנסים לדף Cloud SQL Instances במסוף Google Cloud .
כניסה לדף Cloud SQL Instances
כדי לפתוח את הדף Overview של מכונה, לוחצים על שם המכונה.
בתפריט שמימין, לוחצים על Databases .
ברשימת מסדי הנתונים, מוצאים את מסד הנתונים שרוצים למחוק ולוחצים על סמל פח האשפה.
בתיבת הדו-שיח Delete database , מזינים את שם מסד הנתונים ולוחצים על Delete .
REST v1
הבקשה הבאה משתמשת ב-method databases:delete כדי למחוק את מסד הנתונים שצוין.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
project-id : מזהה הפרויקט
instance-id : מזהה המכונה
database-name : השם של מסד נתונים במכונה של Cloud SQL
ה-method של ה-HTTP וכתובת ה-URL:
DELETE https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases/database-name
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
Curl (Linux, macOS או Cloud Shell)
מריצים את הפקודה הבאה:
curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases/database-name "
PowerShell (Windows)
מריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method DELETE ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id /databases/database-name " | Select-Object -Expand Content
אתם אמורים לקבל תגובת JSON שדומה לזו:
תשובה
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "DELETE_DATABASE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
REST v1beta4
הבקשה הבאה משתמשת ב-method databases:delete כדי למחוק את מסד הנתונים שצוין.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
project-id : מזהה הפרויקט
instance-id : מזהה המכונה
database-name : השם של מסד נתונים במכונה של Cloud SQL
ה-method של ה-HTTP וכתובת ה-URL:
DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases/database-name
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
Curl (Linux, macOS או Cloud Shell)
מריצים את הפקודה הבאה:
curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases/database-name "
PowerShell (Windows)
מריצים את הפקודה הבאה:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method DELETE ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id /databases/database-name " | Select-Object -Expand Content
אתם אמורים לקבל תגובת JSON שדומה לזו:
תשובה
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "DELETE_DATABASE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
לקוח psql
למידע נוסף, קראו את המאמר DROP DATABASE במסמכי התיעוד של PostgreSQL.
DROP DATABASE [ database_name ];
המאמרים הבאים