14
הההה ההה"הDBMS - 236363, PostgreSQL 1 PostgreSQL ההההה הה הההPostgreSQL : PSQL – ההההה הההה ההההה LIBPQ – ההההההC WebDB – הההה הההההWeb ההההההההה הה( ) ההההה ההההההה: ההההההה הה הההההההCSL ההההההה( LINUX ) ההההה הההההה ההההההה הההההה הההההההה ההה ההההה הההההה)הההה ההההה הההההה( ההההה

PostgreSQL

  • 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

Page 1: PostgreSQL

אביב תשס"ה DBMS - 236363, PostgreSQL 1

PostgreSQL

עבודה עם שרתPostgreSQL: PSQLמפענח שורת פקודה – LIBPQ ספריית – C WebDB ממשק מבוסס – Web לסטודנטים של(

הקורס(:חשבונות

מבוססים על חשבונותCSL חשבונות( LINUX בחוות מחשבים בפקולטה(

נפתחים אוטומטית למי שנרשם ברישום מוקדם )לפני תחילת הסמסטר(

Page 2: PostgreSQL

אביב תשס"ה 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

Page 3: PostgreSQL

אביב תשס"ה DBMS - 236363, PostgreSQL 3

PSQLפקודות פנימיות –

:פקודות פנימיות של המפענח

alex=> \? קבלת רשימה של הפקודות –

alex=> \h select – קבלת עזרה על הפקודה

alex=> \q – יציאה מהמפענח

alex=> \d – קבלת רשימת טבלאות

alex=> \d person – קבלת מידע על הטבלה

Page 4: PostgreSQL

אביב תשס"ה 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)

Page 5: PostgreSQL

אביב תשס"ה 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

Page 6: PostgreSQL

אביב תשס"ה 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;

}

Page 7: PostgreSQL

אביב תשס"ה DBMS - 236363, PostgreSQL 7

LIBPQ שלד של תוכנית :C – המשך

בסיום התוכנית:…

*/ Close the connection to the database and cleanup/* PQfinish)conn(;

return 0; }

Page 8: PostgreSQL

אביב תשס"ה 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;

}…

Page 9: PostgreSQL

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

Page 10: PostgreSQL

אביב תשס"ה DBMS - 236363, PostgreSQL 10

LIBPQ בדיקת תוצאה של :שאילתה

:)(PQresultStatusערך מוחזר מפונקציה "( עבור שאילתה SELECT... :)"

PGRES_TUPLES_OKהשאילתה הצליחה – אחרת – השאילתה נכשלה

( עבור פקודות אחרות DML/DDL:) PGRES_COMMAND_OKהפקודה הצליחה –  אחרת – הפקודה נכשלה

שימו לב: יצירת מבט היא פקודת DDL!ולא שאילתה ,

Page 11: PostgreSQL

אביב תשס"ה 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(

Page 12: PostgreSQL

אביב תשס"ה 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;

Page 13: PostgreSQL

אביב תשס"ה 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;

}

Page 14: PostgreSQL

אביב תשס"ה DBMS - 236363, PostgreSQL 14

WebDB:http://pgsql.cs.technion.ac.il:8888/webdb/