1 / 14

PostgreSQL

PostgreSQL. עבודה עם שרת PostgreSQL : PSQL – מפענח שורת פקודה LIBPQ – ספריית C WebDB – ממשק מבוסס Web (לסטודנטים של הקורס) (כרגע יש בעייה בממשק. בנוסף לטבלאות של החשבון הוא מציג את כל הטבלאות הפנימיות שאינן ניתנות לשינוי.) חשבונות:

brandy
Download Presentation

PostgreSQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PostgreSQL עבודה עם שרת PostgreSQL: PSQL – מפענח שורת פקודה LIBPQ – ספריית C WebDB – ממשק מבוסס Web (לסטודנטים של הקורס) (כרגע יש בעייה בממשק. בנוסף לטבלאות של החשבון הוא מציג את כל הטבלאות הפנימיות שאינן ניתנות לשינוי.) חשבונות: חשבון csl1 עליו יתבצע התרגיל הרטוב וגישה למפענח שורת פקודה חשבון במסד הנתונים לגישה דרך PSQL או WebDB פרטים נוספים ב-F.A.Q. באתר DBMS - 236363, PostgreSQL

  2. PSQL – מפענח שורת פקודה גישה ל- client של PostgreSQL – מפענח שורת הפקודה: הגישה נעשת ע"י חיבור ssh ל-csl1 ומשם התחברות. התחברות: בהנחה ששם המשתמש שלכם הוא usr יש להקיש: psql usr usr (השימוש הראשון ב-usr הוא עבור שם המסד נתונים שלכם. השימוש השני הוא עבור שם המשתמש) תופיעה בקשה לסיסמא (סיסמא ל-PostgreSQL) Password: xxxxxxxx עכשיו אתם בתוך מפענח שורת הפקודה של PostgreSQL usr=> יציאה: usr=> \q DBMS - 236363, PostgreSQL

  3. PSQL – פקודות פנימיות פקודות פנימיות של המפענח: usr=> \? – קבלת רשימה של הפקודות usr=> \h select – selectקבלת עזרה על פקודת usr=> \q – יציאה מהמפענח usr=> \d – קבלת רשימת טבלאות usr=> \d person– personקבלת מידע על טבלת DBMS - 236363, PostgreSQL

  4. PSQL – פקודות SQL הרצת פקודות SQL: usr=> SELECT Year, COUNT(Book_Id) usr=> FROM Books usr=> GROUP BY Year usr=> HAVING AVG(Pages) > 400; DBMS - 236363, PostgreSQL

  5. LIBPQ – ספריית פונקציות C שימוש בפונקציות של LIBPQ בתוכנית C: #include <libpq-fe.h> הידור וקישור התוכנית: gcc -I/usr/local/pgsql/include -L/usr/local/pgsql/lib -lpq -o try try.c לפני הרצת התוכנית משורת הפקודה: מתוך bash יש לרשום: LD_LIBRARY_PATH=/usr/local/pgsql/lib export LD_LIBRARY_PATH מתוך csh או tcsh יש לרשום: setenv LD_LIBRARY_PATH /usr/local/pgsql/lib רצוי אף להוסיף את הפקודות האלה ל- ~/.cshrc DBMS - 236363, PostgreSQL

  6. שלד של תוכנית C המשתמשת ב-LIBPQ בתחילת התוכנית: PGconn *conn; int main(void) { /* Make a connection to the DB. If parameters omitted, default values are used */ conn = PQconnectdb("host=pgsql.cs.technion.ac.il " "dbname=usr user=usr password=pass"); /* check to see that the backend connection was successfully made */ if (!conn || PQstatus(conn) == CONNECTION_BAD) { fprintf(stderr, "Connection to server failed: %s\n", PQerrorMessage(conn)); PQfinish(conn); return 1; } … DBMS - 236363, PostgreSQL

  7. LIBPQ: שלד של תוכנית C – המשך בסיום התוכנית: … /* Close the connection to the database and cleanup */ PQfinish(conn); return 0; } DBMS - 236363, PostgreSQL

  8. LIBPQ: ביצוע שאילתות/פקודות SQL ביצוע שאילתות/פקודות SQL: PQexec() PGresult *res; … res = PQexec(conn, "SELECT BOOK_NAME, ORDER_DATE " "FROM ORDERED WHERE CUST_ID=123456"); if(!res || PQresultStatus(res) != PGRES_TUPLES_OK) { fprintf(stderr, "Error executing query: %s\n", PQresultErrorMessage(res)); PQclear(res); return; } … DBMS - 236363, PostgreSQL

  9. LIBPQ: PQexec() – המשך שימוש במחרוזת עזר: char cmd[200]; int cust_id; /* … */ cust_id = 20; /* could be result of some input or computation */ sprintf(cmd, "SELECT BOOK_NAME, ORDER_DATE " "FROM ORDERED WHERE CUST_ID=%d", cust_id); res = PQexec(conn, cmd); /* … */ שימו לב! יש לוודא שב-cmd יש מספיק מקום בשביל להכיל את הפקודות! DBMS - 236363, PostgreSQL

  10. LIBPQ: בדיקת תוצאה של שאילתה ערך מוחזר מפונקציה PQresultStatus(): עבור שאילתה ("SELECT ..."): PGRES_TUPLES_OK – השאילתה הצליחה אחרת – השאילתה נכשלה עבור פקודות אחרות (DML/DDL): PGRES_COMMAND_OK – הפקודה הצליחה אחרת – הפקודה נכשלה שימו לב: יצירת מבט היא פקודת DDL, ולא שאילתה! DBMS - 236363, PostgreSQL

  11. LIBPQ: שליפת רשומות של תוצאה במידה והשאילתה הצליחה, נוכל לשלוף מידע מהתוצאה: int PQntuples(res) : מס' הרשומות (שורות) בתוצאה (יכול להיות 0) int PQnfields(res): מספר השדות (עמודות) בתוצאה char *PQfname(res, field_index): שם השדה לפי מספר (החל מ-0) int PQfnumber(res, field_name): מספר השדה לפי שם char *PQgetvalue(res, tup_num, field_num): תוכן השדה המתאים בתוצאה int PQgetisnull(res, tup_num, field_num): NULL מחזיר 1 אם השדה הוא void PQclear(res): משחרר את המשאבים שהוקצו לתוצאה אם PQexec() לא הצליחה, נוכל לקבל תאור מילולי של השגיאה: char *PQresultErrorMessage(res) DBMS - 236363, PostgreSQL

  12. LIBPQ: דוגמא דוגמא: בכל שנה יש להציג את מספר הספרים שיצאו לאור באותה שנה (ללא שימוש ב-GROUP BY) int books_by_year(PGconn *conn){ PGresult *res_year, *res_num; int i, year; char query[120]; res_year = PQexec(conn, "SELECT DISTINCT YEAR FROM BOOKS"); if(!res_year || PQresultStatus(res_year) != PGRES_TUPLES_OK){ fprintf(stderr, "Error executing query: %s\n", PQresultErrorMessage(res_year)); PQclear(res_year); return -1; } DBMS - 236363, PostgreSQL

  13. LIBPQ: דוגמא – המשך for(i=0;i<PQntuples(res_year);i++){ year = atoi(PQgetvalue(res_year,i,0)); sprintf(query, "SELECT COUNT(DISTINCT BOOK_NAME) " "FROM BOOKS WHERE YEAR = %d", year); res_num = PQexec(conn,query); if(!res_num || PQresultStatus(res_num) != PGRES_TUPLES_OK){ fprintf(stderr, "Error executing query: %s\n", PQresultErrorMessage(res_num)); PQclear(res_num); PQclear(res_year); return -1; } printf("YEAR=%d Num.Books=%s\n", year, PQgetvalue(res_num,0,0)); PQclear(res_num); } PQclear(res_year); return 0; } DBMS - 236363, PostgreSQL

  14. WebDB:http://pgsql.cs.technion.ac.il:8888/webdb/ כרגע יש בעייה בממשק. בנוסף לטבלאות של החשבון הוא מציג את כל הטבלאות הפנימיות שאינן ניתנות לשינוי. DBMS - 236363, PostgreSQL

More Related