Upload
cala
View
28
Download
3
Embed Size (px)
DESCRIPTION
PostgreSQL. עבודה עם שרת PostgreSQL : PSQL – מפענח שורת פקודה LIBPQ – ספריית C WebDB – ממשק מבוסס Web (לסטודנטים של הקורס) חשבונות: מבוססים על חשבונות CSL (חשבונות LINUX בחוות מחשבים בפקולטה) נפתחים אוטומטית למי שנרשם ברישום מוקדם (לפני תחילת הסמסטר). PSQL – מפענח שורת פקודה. - PowerPoint PPT Presentation
Citation preview
אביב תשס"ה DBMS - 236363, PostgreSQL 1
PostgreSQL
עבודה עם שרתPostgreSQL: PSQLמפענח שורת פקודה – LIBPQ ספריית – C WebDB ממשק מבוסס – Web לסטודנטים של(
הקורס(:חשבונות
מבוססים על חשבונותCSL חשבונות( LINUX בחוות מחשבים בפקולטה(
נפתחים אוטומטית למי שנרשם ברישום מוקדם )לפני תחילת הסמסטר(
אביב תשס"ה DBMS - 236363, PostgreSQL 2
PSQLמפענח שורת פקודה –
-מחשבים עליהם מותקן ה client של PostgreSQL:
בגרסאות שונות clientיש מספר מחשבים עם ה- אבל
מותקנת גרסה מתאימה לקורס csl ו-csl1 רק על הזה.
התחברות:/usr/local/pgsql/bin/psql -h pgsql.cs.technion.ac.il alex alex
Password: xxxxxxxx
alex =>
:יציאה alex => \q
אביב תשס"ה DBMS - 236363, PostgreSQL 3
PSQLפקודות פנימיות –
:פקודות פנימיות של המפענח
alex=> \? קבלת רשימה של הפקודות –
alex=> \h select – קבלת עזרה על הפקודה
alex=> \q – יציאה מהמפענח
alex=> \d – קבלת רשימת טבלאות
alex=> \d person – קבלת מידע על הטבלה
אביב תשס"ה DBMS - 236363, PostgreSQL 4
PSQL פקודות – SQL
פקודות הרצתSQL:alex=> SELECT Year, COUNT)Book_Id(
alex=> FROM Books
alex=> GROUP BY Year
alex=> HAVING AVG)Pages( > 400;
11988
1
1
COUNT)Book_Id(
1985
2001
Year
alex=> (3 rows)
אביב תשס"ה 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
אביב תשס"ה 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=alex user=alex password=alex1”(;
/* 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 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;
}
אביב תשס"ה 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/