\? – קבלת רשימה של הפקודות user=> \h select – select קבלת עזרה על פקודת user=> \q – יציאה מהמפענח user=> \d – קבלת רשימת טבלאות user=> \d person – person קבלת מידע על טבלת"> \? – קבלת רשימה של הפקודות user=> \h select – select קבלת עזרה על פקודת user=> \q – יציאה מהמפענח user=> \d – קבלת רשימת טבלאות user=> \d person – person קבלת מידע על טבלת">

Presentation is loading. Please wait.

Presentation is loading. Please wait.

אביב תשס"הDBMS - 236363, PostgreSQL1 PostgreSQL עבודה עם שרת PostgreSQL : PSQL – מפענח שורת פקודה LIBPQ – ספריית C WebDB – ממשק מבוסס Web (לסטודנטים של.

Similar presentations


Presentation on theme: "אביב תשס"הDBMS - 236363, PostgreSQL1 PostgreSQL עבודה עם שרת PostgreSQL : PSQL – מפענח שורת פקודה LIBPQ – ספריית C WebDB – ממשק מבוסס Web (לסטודנטים של."— Presentation transcript:

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

2 אביב תשס"הDBMS - 236363, PostgreSQL2 PSQL – מפענח שורת פקודה גישה ל- client של PostgreSQL – מפענח שורת הפקודה: הגישה נעשת ע"י חיבור ssh ל-csl1 ומשם התחברות. התחברות : בהנחה ששם המשתמש שלכם הוא user יש להקיש:  /usr/local/pgsql/bin/psql -h pgsql.cs.technion.ac.il user user (השימוש הראשון ב-user הוא עבור שם המסד נתונים שלכם. השימוש השני הוא עבור שם המשתמש) תופיעה בקשה לסיסמא (סיסמא ל-PostgreSQL) Password: xxxxxxxx עכשיו אתם בתוך מפענח שורת הפקודה של PostgreSQL user => יציאה: user => \q

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

4 אביב תשס"הDBMS - 236363, PostgreSQL4 PSQL – פקודות SQL הרצת פקודות SQL: user=> SELECT Year, COUNT(Book_Id) user=> FROM Books user=> GROUP BY Year user=> HAVING AVG(Pages) > 400; 11988 1 1 COUNT(Book_Id) 1985 2001 Year user=> (3 rows)

5 אביב תשס"הDBMS - 236363, PostgreSQL5 LIBPQ – ספריית פונקציות C שימוש בפונקציות של LIBPQ בתוכנית C: #include הידור וקישור התוכנית:  gcc -I/usr/local/pgsql/include -L/usr/local/pgsql/lib -lpq -o try try.c

6 אביב תשס"הDBMS - 236363, PostgreSQL6 שלד של תוכנית C המשתמשת ב- LIBPQ PGconn *conn; בתחילת התוכנית: i nt main(void) { /* Make a connection to the DB. If parameters omitted, default values are used */ conn = PQconnectdb(“host=pgsql.cs.technion.ac.il “ “dbname=user user=user 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; } …

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

8 אביב תשס"הDBMS - 236363, PostgreSQL8 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; } …

9 אביב תשס"הDBMS - 236363, PostgreSQL9 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 יש מספיק מקום בשביל להכיל את הפקודות!

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

11 אביב תשס"הDBMS - 236363, PostgreSQL11 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)

12 אביב תשס"הDBMS - 236363, PostgreSQL12 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 BOOK”); if(!res_year || PQresultStatus(res_year) != PGRES_TUPLES_OK){ fprintf(stderr, "Error executing query: %s\n", PQresultErrorMessage(res_year)); PQclear(res_year); return -1; }

13 אביב תשס"הDBMS - 236363, PostgreSQL13 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; }

14 אביב תשס"הDBMS - 236363, PostgreSQL14 WebDB: http://pgsql.cs.technion.ac.il:8888/webdb/ http://pgsql.cs.technion.ac.il:8888/webdb/


Download ppt "אביב תשס"הDBMS - 236363, PostgreSQL1 PostgreSQL עבודה עם שרת PostgreSQL : PSQL – מפענח שורת פקודה LIBPQ – ספריית C WebDB – ממשק מבוסס Web (לסטודנטים של."

Similar presentations


Ads by Google