איך להתקין ולהשתמש ב־PostgreSQL על Ubuntu 20.04

הקדמה

מערכות ניהול מסדי נתונים רצולניים הן רכיב מרכזי במספר רב של אתרי אינטרנט ויישומים. הן מספקות דרך מאורגנת לאחסן, לארגן ולגשת למידע.

PostgreSQL, או Postgres, הוא מערכת ניהול מסדי נתונים רצולניים שמספקת יישום של שפת השאילתא SQL. היא תואמת סטנדרטים וכוללת מספר תכונות מתקדמות כמו עסקאות אמינות וקונקורנסיה ללא נעילות לקריאה.

מדריך זה מדגים כיצד להתקין את Postgres על שרת Ubuntu 20.04. הוא מספק גם הוראות לניהול מסדי נתונים כללי.

1-Click הפעלת מסד נתונים PostgreSQL באמצעות בסיסי נתונים שנהוגים של DigitalOcean. הרשה ל-DigitalOcean להתמקד בהתרחבות, תחזוקה ושדרוגים עבור המסד שלך.

דרישות קדם

כדי לעקוב אחרי המדריך הזה, תצטרך לשרת Ubuntu 20.04 שהוגדר על ידי ביצוע המדריך הגדרת השרת הראשונית עבור Ubuntu 20.04 שלנו. לאחר השלמת המדריך הנדרש הזה, השרת שלך צריך לכלול משתמש לא-root עם הרשאות sudo וגישה בסיסית לגישה לגישה לקיר אש.

שלב 1 — התקנת PostgreSQL

מאגרי הנתונים המוגדרים כברירת מחדל באובונטו מכילים חבילות Postgres, כך שניתן להתקין אותן באמצעות מערכת האריזות apt.

אם לא עשית זאת לאחרונה, עדכן את אינדקס החבילות המקומי של השרת שלך:

  1. sudo apt update

לאחר מכן, התקן את חבילת ה-Postgres יחד עם חבילת -contrib שמוסיפה כמה יכולות ותוספות נוספות:

  1. sudo apt install postgresql postgresql-contrib

וודא שהשרת פועל באמצעות הפקודה systemctl start:

  1. sudo systemctl start postgresql.service

עכשיו שהתוכנה מותקנת ופועלת, אפשר להתעסק באופן פעולתי ובאופן שהוא שונה ממערכות ניהול בסיסיות נתונים רציונליות אחרות שאולי ניתן השתמשת בהן.

שלב 2 — שימוש בתפקידים ובסדרות של PostgreSQL

ברירת המחדל, Postgres משתמשת במושג הנקרא "תפקידים" כדי לטפל באימות ובאישור. אלה, בצורה מסוימת, דומים לחשבונות רגילים בסגנון Unix, אך Postgres אינה מבחינה בין משתמשים וקבוצות ובמקום זאת מעדיפה את המונח הגמיש יותר "תפקיד".

בעת התקנה, Postgres מוגדרת להשתמש באימות על ידי עמית, שפירושה שהיא משוייכת תפקידים של Postgres עם חשבון מערכת Unix/Linux התואם. אם תפקיד קיים בתוך Postgres, שם משתמש של Unix/Linux באותו השם יכול להיכנס כתפקיד זה.

נפתח תהליך ההתקנה חשבון משתמש בשם postgres המשוייך עם תפקיד המשתמש המוגדר כברירת מחדל של Postgres. על מנת להשתמש ב-Postgres, ניתן להתחבר לחשבון זה.

קיימים כמה דרכים להשתמש בחשבון זה לגישה ל-Postgres.

החלפת חשבון לחשבון postgres

עבור לחשבון postgres בשרת שלך על ידי הקלדת:

  1. sudo -i -u postgres

כעת ניתן לגשת לפקודת PostgreSQL מיידית על ידי הקלדת:

  1. psql

משם תוכל לפעול עם מערכת הניהול של בסיס הנתונים ככל הצורך.

לצאת מהפקודת PostgreSQL באמצעות הקלדה:

  1. \q

זה יחזיר אותך לפקודת ה-Linux של postgres.

גישה לעצות Postgres בלי להחליף חשבונות

ניתן גם להריץ את הפקודה שתרצה עם חשבון ה־postgres ישירות באמצעות sudo.

לדוגמה, בדוגמה האחרונה, התבקשת להגיע למערכת ה־Postgres על ידי החלפת המשתמש למשתמש postgres ואז להריץ psql כדי לפתוח את מערכת ה־Postgres. ניתן לעשות זאת בשלב אחד על ידי הרצת הפקודה היחידה psql כמשתמש postgres עם sudo, כמו כן:

  1. sudo -u postgres psql

זה יכניס אותך ישירות ל־Postgres בלי המתווך של ה־bash ביניהם.

שוב, ניתן לצאת מהסשן האינטראקטיבי של Postgres על ידי הקלדת:

  1. \q

המון מקרים נדרשים יותר מתפקיד אחד של Postgres. קרא כדי ללמוד איך להגדיר אלו.

שלב 3 — יצירת תפקיד חדש

כרגע, יש לך את התפקיד postgres מוגדר במסד הנתונים. באפשרותך ליצור תפקידים חדשים מהשורת הפקודה באמצעות הפקודה createrole. הדגל --interactive יבקש ממך את שם התפקיד החדש וגם ישאל האם הוא צריך לקבל הרשאות מנהל מערכת.

אם אתה מחובר כמשתמש postgres, תוכל ליצור משתמש חדש על ידי הקלדה:

  1. createuser --interactive

אם במקום זאת אתה מעדיף להשתמש ב-sudo לכל פקודה מבלי להחליף מהחשבון הרגיל שלך, הקלד:

  1. sudo -u postgres createuser --interactive

הסקריפט יבקש ממך כמה בחירות ו, בהתבסס על התגובות שלך, יבצע את הפקודות של Postgres הנכונות ליצירת משתמש לפי המפרטים שלך.

Output
Enter name of role to add: sammy Shall the new role be a superuser? (y/n) y

ניתן לקבל שליטה נוספת על ידי מעבר של דגלים נוספים. ניתן לבדוק את האפשרויות בעיון בדף ה-man:

  1. man createuser

ההתקנה שלך של Postgres כעת מכילה משתמש חדש, אך עדיין לא הוספת כל מסדי נתונים. הסעיף הבא מתאר את התהליך הזה.

שלב 4 — יצירת מסד נתונים חדש

הנחה נוספת שמערכת האימות של Postgres עושה כברירת מחדל היא שלכל תפקיד המשמש להתחבר, תהיה לו מסד נתונים באותו השם אליו הוא יכול לגשת.

זה אומר שאם המשתמש שיצרת בחלק הקודם נקרא sammy, התפקיד הזה ינסה להתחבר למסד נתונים שגם הוא נקרא "sammy" כברירת מחדל. ניתן ליצור את מסד הנתונים המתאים באמצעות פקודת createdb.

אם התחברת כמשתמש postgres, תקליד משהו דומה לזה:

  1. createdb sammy

אם, במקום זאת, אתה מעדיף להשתמש ב־sudo עבור כל פקודה בנפרד מבלי להחליף מהחשבון הרגיל שלך, תקליד משהו כמו זה:

  1. sudo -u postgres createdb sammy

הגמישות הזו מספקת מסלולים מרובים ליצירת מסדי נתונים כפי הצורך.

שלב 5 — פתיחת מודע פוסטגרס עם התפקיד החדש

כדי להתחבר עם אימות על פי זהות, יהיה עליך להשתמש במשתמש Linux בשם זהה לאותו התפקיד של Postgres ומסד הנתונים שלך.

אם אין לך משתמש Linux תואם זמין, תוכל ליצור אחד עם פקודת adduser. עליך לעשות זאת מהחשבון שאינו root עם הרשאות sudo (כלומר, לא מחובר כמשתמש postgres):

  1. sudo adduser sammy

כשהחשבון החדש הזה זמין, אתה יכול להחליף ולהתחבר למסד הנתונים על ידי הקלדה של:

  1. sudo -i -u sammy
  2. psql

או, אתה יכול לעשות זאת באופן מקוון:

  1. sudo -u sammy psql

פקודה זו תכניס אותך למערכת באופן אוטומטי, בהנחה שכל הרכיבים התקנו כהלכה.

אם ברצונך שהמשתמש יתחבר למסד נתונים שונה, אתה יכול לעשות זאת על ידי ציון המסד נתונים כך:

  1. psql -d postgres

לאחר התחברות, תוכל לבדוק את מידע החיבור הנוכחי שלך על ידי קלידה:

  1. \conninfo
Output
You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".

זה שימושי אם אתה מתחבר למסדי נתונים שאינם ברירת המחדל או עם משתמשים שאינם ברירת המחדל.

שלב 6 — יצירת ומחיקת טבלאות

עכשיו שאתה יודע כיצד להתחבר למערכת מסדי הנתונים PostgreSQL, אתה יכול ללמוד כמה משימות מנהליות בסיסיות של Postgres.

התחביר הבסיסי ליצירת טבלאות הוא כדלקמן:

CREATE TABLE table_name (
    column_name1 col_type (field_length) column_constraints,
    column_name2 col_type (field_length),
    column_name3 col_type (field_length)
);

כפי שאתה יכול לראות, פקודות אלו נותנות לטבלה שם, ואז מגדירות את העמודות כמו גם את סוג העמודה ואת אורך הנתונים בשדה. בנוסף, תוכל גם להוסיף באופציה אילוצי טבלה לכל עמודה.

תוכל ללמוד עוד על כיצד ליצור ולנהל טבלאות ב־Postgres כאן.

לצורך הדגמה, יצור את הטבלה הבאה:

  1. CREATE TABLE playground (
  2. equip_id serial PRIMARY KEY,
  3. type varchar (50) NOT NULL,
  4. color varchar (25) NOT NULL,
  5. location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
  6. install_date date
  7. );

הפקודה הזו תיצור טבלה שמערכת מלאי ציוד לגן. העמודה הראשונה בטבלה תחזיק מספרי זיהוי של ציוד מסוג serial, שהוא מספר שמתבצע באופן אוטומטי. עמודה זו גם כוללת אילוץ של PRIMARY KEY שככל הנראה אומר שהערכים בתוכה חייבים להיות ייחודיים ולא ריקים.

השורות הבאות יוצרות עמודות עבור סוג הציוד type ועבור הצבע color בהתאם, ושתיהן לא יכולות להיות ריקות. השורה אחרי אלו יוצרת עמודת location וכן אילוץ שדורש שהערך יהיה אחד משמונה ערכים אפשריים. השורה האחרונה יוצרת עמודת date שמקליטה את התאריך בו הותקן הציוד.

בשני מהעמודות (equip_id ו־install_date), הפקודה לא מציינת אורך שדה. הסיבה לכך היא שסוגי הנתונים מסוימים אינם דורשים אורך מוגדר מראש מכיוון שהאורך או התבנית משועמם.

אתה יכול לראות את הטבלה החדשה שלך על ידי הקלדת:

  1. \d
Output
List of relations Schema | Name | Type | Owner --------+-------------------------+----------+------- public | playground | table | sammy public | playground_equip_id_seq | sequence | sammy (2 rows)

הטבלה שלך זמינה כאן, אבל יש גם משהו בשם playground_equip_id_seq שהוא מסוג sequence. זהו תיאור של סוג הנתונים serial שנתת לעמודת equip_id שלך. זה שומר על מעקב אחר המספר הבא בסדרה ונוצר אוטומטית עבור עמודות מסוג זה.

אם ברצונך לראות רק את הטבלה בלי הסדרה, אתה יכול להקליד:

  1. \dt
Output
List of relations Schema | Name | Type | Owner --------+------------+-------+------- public | playground | table | sammy (1 row)

עם טבלה מוכנה, בוא נשתמש בה כדי לתרגל בניהול הנתונים.

שלב 7 — הוספת, שאילתת נתונים ומחיקת נתונים בטבלה

עכשיו שיש לך טבלה, תוכל להכניס מידע לתוך זה. כדי להוסיף דוגמא, הוסף שקופית ונדנדה על ידי קריאה לטבלה שברצונך להוסיף אליה, נתונים לכל העמודות, כמו כן:

  1. INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
  2. INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

עליך להיזהר בעת הכנסת הנתונים כדי למנוע טעויות נפוצות. למשל, אל תעטוף את שמות העמודות בגרשיים, אך הערכים של העמודות שאתה מכניס צריכים להיות בגרשיים.

דבר נוסף לזכור הוא שאין להזין ערך עבור העמודה equip_id. זה בגלל שהוא נוצר באופן אוטומטי כאשר אתה מוסיף שורה חדשה לטבלה.

גש למידע שהוספת על ידי הקלדת:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 1 | slide | blue | south | 2017-04-28 2 | swing | yellow | northwest | 2018-08-16 (2 rows)

כאן, תוכל לראות שה-equip_id שלך מולא בהצלחה וכי כל הנתונים האחרים שלך מאורגנים נכון.

אם השקופית בגן המשחקים שבורה ועליך להסיר אותה, תוכל גם להסיר את השורה מהטבלה שלך על ידי הקלדת:

  1. DELETE FROM playground WHERE type = 'slide';

שאילתה את הטבלה שוב:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2018-08-16 (1 row)

שים לב ששורת ה-slide כבר אינה חלק מהטבלה.

שלב 8 — הוספת ומחיקת עמודות מטבלה

לאחר שיצרת טבלה, באפשרותך לשנות אותה על ידי הוספת או הסרת עמודות. הוסף עמודה להצגת הביקור האחרון בתחזוקה עבור כל ציוד על ידי הקלדת:

  1. ALTER TABLE playground ADD last_maint date;

אם תצפה שוב במידע של הטבלה שלך, תראה שהעמודה החדשה נוספה אך לא נכנסו נתונים:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date | last_maint ----------+-------+--------+-----------+--------------+------------ 2 | swing | yellow | northwest | 2018-08-16 | (1 row)

אם תגלה שקבוצת העבודה שלך משתמשת בכלי נפרד כדי לעקוב אחר היסטוריית התחזוקה, תוכל למחוק את העמודה על ידי הקלדה:

  1. ALTER TABLE playground DROP last_maint;

זה מוחק את העמודה last_maint וכל הערכים שנמצאים בתוכה, אך משאיר את כל הנתונים האחרים בלתי נפגעים.

שלב 9 — עדכון נתונים בטבלה

עד כה, למדת כיצד להוסיף רשומות לטבלה וכיצד למחוק אותן, אך בסרטון הלימוד הזה טרם נ covered איך לשנות ערכים קיימים.

ניתן לעדכן את הערכים של רשומה קיימת על ידי שאילתה לרשומה שאתה רוצה והגדרת העמודה לערך שתרצה להשתמש בו. ניתן לשאול את הרשומה swing (זה יתאים לכל swing בטבלה שלך) ולשנות את הצבע שלו ל red. זה יכול להיות שימושי אם ציירת את סט הניפוץ בצבע:

  1. UPDATE playground SET color = 'red' WHERE type = 'swing';

תוכל לוודא שהפעולה הצליחה על ידי שאילתת הנתונים שוב:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+-------+-----------+-------------- 2 | swing | red | northwest | 2018-08-16 (1 row)

כפי שתוכל לראות, המגלשה רשומה כעת כאדומה.

מסקנה

אתה כעת מוכן עם PostgreSQL על השרת שלך Ubuntu 20.04. אם ברצונך ללמוד עוד על Postgres וכיצד להשתמש בו, אנו ממליצים לך לבדוק את המדריכים הבאים:

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-20-04