COMP9315 21T1 ♢ PostgreSQL Overview ♢ [0/13]
PostgreSQL is a full-featured open-source (O)RDBMS.
- provides a relational engine with:
- efficient implementation of relational operations
- transaction processing (concurrent access)
- backup/recovery (from application/system failure)
- novel query optimisation (based on genetic algorithm)
- replication, JSON, extensible indexing, etc. etc.
- already supports several non-standard data types
- allows users to define their own data types
- supports most of the SQL3 standard
COMP9315 21T1 ♢ PostgreSQL Overview ♢ [1/13]
COMP9315 21T1 ♢ PostgreSQL Overview ♢ [2/13]
❖ User View of PostgreSQL | |
Users interact via SQL in a client process, e.g.
$ psql webcms
psql (12.5)
Type "help" for help.
webcms2=# select * from calendar;
id | course | evdate | event
----+--------+------------+---------------------------
1 | 4 | 2001-08-09 | Project Proposals due
10 | 3 | 2001-08-01 | Tute/Lab Enrolments Close
12 | 3 | 2001-09-07 | Assignment #1 Due (10pm)
...
or
$dbconn = pg_connect("dbname=webcms");
$result = pg_query($dbconn,"select * from calendar");
while ($tuple = pg_fetch_array($result))
{ ... $tuple["event"] ... }
COMP9315 21T1 ♢ PostgreSQL Overview ♢ [3/13]
❖ PostgreSQL Functionality | |
PostgreSQL systems deal with various kinds of entities:
- users ... who can access the system
- groups ... groups of users, for role-based privileges
- databases ... collections of schemas/tables/views/...
- namespaces ... to uniquely identify objects (schema.table.attr)
- tables ... collection of tuples (standard relational notion)
- views ... "virtual" tables (can be made updatable)
- functions ... operations on values from/in tables
- triggers ... operations invoked in response to events
- operators ... functions with infix syntax
- aggregates ... operations over whole table columns
- types ... user-defined data types (with own operations)
- rules ... for query rewriting (used e.g. to implement views)
- access methods ... efficient access to tuples in tables
COMP9315 21T1 ♢ PostgreSQL Overview ♢ [4/13]
❖ PostgreSQL Functionality (cont) | |
PostgreSQL's dialect of SQL is mostly standard
(but with extensions).
- attributes containing arrays of atomic values
create table R ( id integer, values integer[] );
insert into R values ( 123, '{5,4,3,2,1}' );
- table-valued functions
create function f(integer) returns setof TupleType;
- multiple langauges available for functions
- PLpgSQL, Python, Perl, Java, R, Tcl, ...
- function bodies are strings in whatever language
COMP9315 21T1 ♢ PostgreSQL Overview ♢ [5/13]
❖ PostgreSQL Functionality (cont) | |
Other variations in PostgreSQL's CREATE TABLE
-
TEMPORARY
tables
-
PARTITION
'd tables
-
GENERATED
attribute values (derived attributes)
-
FOREIGN TABLE
(data stored outside PostgreSQL)
- table type inheritance
create table R ( a integer, b text);
create table S ( x float, y float);
create table T inherits ( R, S );
COMP9315 21T1 ♢ PostgreSQL Overview ♢ [6/13]
❖ PostgreSQL Functionality (cont) | |
PostgreSQL stored procedures differ from SQL standard:
- only provides functions, not procedures
(but functions can return void
, effectively a procedure)
- allows function overloading
(same function name, different argument types)
- defined at different "lexical level" to SQL
- provides own PL/SQL-like language for functions
create function ( Args ) returns ResultType
as $$
... body of function definition ...
$$ language FunctionBodyLanguage;
- where each
Arg
has a Name and Type
COMP9315 21T1 ♢ PostgreSQL Overview ♢ [7/13]
❖ PostgreSQL Functionality (cont) | |
Example:
create or replace function
barsIn(suburb text) returns setof Bars
as $$
declare
r record;
begin
for r in
select * from Bars where location = suburb
loop
return next r;
end loop;
end;
$$ language plpgsql;
select * from barsIn('Randwick');
COMP9315 21T1 ♢ PostgreSQL Overview ♢ [8/13]
❖ PostgreSQL Functionality (cont) | |
Uses multi-version concurrency control (MVCC)
- multiple "versions" of the database exist together
- a transaction sees the version that was valid at its start-time
- readers don't block writers; writers don't block readers
- this significantly reduces the need for locking
Disadvantages of this approach:
- extra storage for old versions of tuples (until
vacuum
'd)
- need to check "visibility" of every tuple fetched
PostgreSQL also provides locking to enforce critical concurrency.
COMP9315 21T1 ♢ PostgreSQL Overview ♢ [9/13]
❖ PostgreSQL Functionality (cont) | |
PostgreSQL has a well-defined and open extensibility model:
- stored procedures are held in database as strings
- allows a variety of languages to be used
- language interpreters can be integrated into engine
- can add new data types, operators, aggregates, indexes
- typically requires code written in C, following defined API
- for new data types, need to write input/output functions, ...
- for new indexes, need to implement file structures
COMP9315 21T1 ♢ PostgreSQL Overview ♢ [10/13]
❖ PostgreSQL Architecture | |
Client/server process architecture:
The listener process is sometimes called postmaster
COMP9315 21T1 ♢ PostgreSQL Overview ♢ [11/13]
❖ PostgreSQL Architecture (cont) | |
Memory/storage architecture:
COMP9315 21T1 ♢ PostgreSQL Overview ♢ [12/13]
❖ PostgreSQL Architecture (cont) | |
File-system architecture:
COMP9315 21T1 ♢ PostgreSQL Overview ♢ [13/13]
Produced: 15 Feb 2021