don't panic! - postgres introduction

43
Introduction to PostgreSQL Don’t Panic! Federico Campoli Brighton PostgreSQL Users Group 13 June 2016 Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 1 / 40

Upload: federico-campoli

Post on 11-Apr-2017

251 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Don't panic! - Postgres introduction

Introduction to PostgreSQLDon’t Panic!

Federico Campoli

Brighton PostgreSQL Users Group

13 June 2016

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 1 / 40

Page 2: Don't panic! - Postgres introduction

Table of contents

1 An elephant never forgets

2 A quick look to a powerful tool

3 NOSQL on Acid

4 Wrap up

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 2 / 40

Page 3: Don't panic! - Postgres introduction

An elephant never forgets

Table of contents

1 An elephant never forgets

2 A quick look to a powerful tool

3 NOSQL on Acid

4 Wrap up

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 3 / 40

Page 4: Don't panic! - Postgres introduction

An elephant never forgets

An elephant never forgets

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 4 / 40

Page 5: Don't panic! - Postgres introduction

An elephant never forgets

PostgreSQL, an history of excellence

Created at Berkeley in 1982 by database’s legend Prof. Stonebraker

In the 1994 Andrew Yu and Jolly Chen added the SQL interpreter

In the 1996 becomes an Open Source project.

The project’s name changes in PostgreSQL

Fully ACID compliant

High performance in read/write with the MVCC

Tablespaces

Runs on almost any unix flavour

From the version 8.0 is native on *cough* MS Windows *cough*

HA with hot standby and streaming replication

Heterogeneous federation

Procedural languages (pl/pgsql, pl/python, pl/perl...)

Support for NOSQL features like HSTORE and JSON

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 5 / 40

Page 6: Don't panic! - Postgres introduction

An elephant never forgets

PostgreSQL, an history of excellence

Created at Berkeley in 1982 by database’s legend Prof. Stonebraker

In the 1994 Andrew Yu and Jolly Chen added the SQL interpreter

In the 1996 becomes an Open Source project.

The project’s name changes in PostgreSQL

Fully ACID compliant

High performance in read/write with the MVCC

Tablespaces

Runs on almost any unix flavour

From the version 8.0 is native on *cough* MS Windows *cough*

HA with hot standby and streaming replication

Heterogeneous federation

Procedural languages (pl/pgsql, pl/python, pl/perl...)

Support for NOSQL features like HSTORE and JSON

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 5 / 40

Page 7: Don't panic! - Postgres introduction

An elephant never forgets

PostgreSQL, an history of excellence

Created at Berkeley in 1982 by database’s legend Prof. Stonebraker

In the 1994 Andrew Yu and Jolly Chen added the SQL interpreter

In the 1996 becomes an Open Source project.

The project’s name changes in PostgreSQL

Fully ACID compliant

High performance in read/write with the MVCC

Tablespaces

Runs on almost any unix flavour

From the version 8.0 is native on *cough* MS Windows *cough*

HA with hot standby and streaming replication

Heterogeneous federation

Procedural languages (pl/pgsql, pl/python, pl/perl...)

Support for NOSQL features like HSTORE and JSON

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 5 / 40

Page 8: Don't panic! - Postgres introduction

An elephant never forgets

PostgreSQL, an history of excellence

Created at Berkeley in 1982 by database’s legend Prof. Stonebraker

In the 1994 Andrew Yu and Jolly Chen added the SQL interpreter

In the 1996 becomes an Open Source project.

The project’s name changes in PostgreSQL

Fully ACID compliant

High performance in read/write with the MVCC

Tablespaces

Runs on almost any unix flavour

From the version 8.0 is native on *cough* MS Windows *cough*

HA with hot standby and streaming replication

Heterogeneous federation

Procedural languages (pl/pgsql, pl/python, pl/perl...)

Support for NOSQL features like HSTORE and JSON

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 5 / 40

Page 9: Don't panic! - Postgres introduction

An elephant never forgets

Development

Old ugly C language

New development cycle starts usually in June

New version released usually by the end of the year

At least 4 LTS versions

Can be extended using shared libraries

Extensions (9.1+)

BSD like license

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 6 / 40

Page 10: Don't panic! - Postgres introduction

An elephant never forgets

Limits

Database size. No limits.

Table size 32 TB

Row size 1.6 TB

Field size 1 GB

Rows in table. No limits.

Fields in table 250 - 1600 depending on data type.

Tables in a database. No limits.

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 7 / 40

Page 11: Don't panic! - Postgres introduction

A quick look to a powerful tool

Table of contents

1 An elephant never forgets

2 A quick look to a powerful tool

3 NOSQL on Acid

4 Wrap up

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 8 / 40

Page 12: Don't panic! - Postgres introduction

A quick look to a powerful tool

A quick look to a powerful tool

Image by Hein Waschefort -http://commons.wikimedia.org/wiki/User:Hein waschefort

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 9 / 40

Page 13: Don't panic! - Postgres introduction

A quick look to a powerful tool

Data types

PostgreSQL comes with an incredibly rich data type set.

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 10 / 40

Page 14: Don't panic! - Postgres introduction

A quick look to a powerful tool

Data types

Numerical

smallint, integer, bigint

decimal, numeric, user-specified precision, exact

real,double precision, variable precision, inexact

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 11 / 40

Page 15: Don't panic! - Postgres introduction

A quick look to a powerful tool

Data types

Character

character

character varying with max size

text, character varying

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 12 / 40

Page 16: Don't panic! - Postgres introduction

A quick look to a powerful tool

Data types

Binary

bytea

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 13 / 40

Page 17: Don't panic! - Postgres introduction

A quick look to a powerful tool

Data types

Alongside the general purpose data types PostgreSQL have some exotic types.

Range (integers, date)

Geometric (points, lines etc.)

Network addresses

XML

JSON

JSONB

HSTORE (extension)

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 14 / 40

Page 18: Don't panic! - Postgres introduction

A quick look to a powerful tool

UPSERT (9.5+)

INSERT INTO t_table (i_id , v_value)VALUES (1, ’fake value’), (2, ’another fake value ’)ON CONFLICT (i_id) DO UPDATE SET v_value = EXCLUDED.v_value;

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 15 / 40

Page 19: Don't panic! - Postgres introduction

A quick look to a powerful tool

Row Level Security (9.5+)

Row Level Security, allows security ”policies” filtering rows per database user.

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 16 / 40

Page 20: Don't panic! - Postgres introduction

A quick look to a powerful tool

Big Data! (9.5+)

BIG DATA!

BRIN - Block Range Indices

IMPORT FOREIGN SCHEMA, Federation with steroids

TABLESAMPLE

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 17 / 40

Page 21: Don't panic! - Postgres introduction

A quick look to a powerful tool

GROUPING SETS

GROUPING SETS (shameless copied from the on line manual)The data selected by the FROM and WHERE clauses is grouped separately byeach specified grouping set, aggregates computed for each group just as for simpleGROUP BY clauses, and then the results returned. For example:

=> SELECT * FROM items_sold;brand | size | sales

-- -----+------+-------Foo | L | 10Foo | M | 20Bar | M | 15Bar | L | 5

(4 rows)

=> SELECT brand , size , sum(sales) FROM items_sold GROUP BY GROUPING SETS ((brand), (size), ());

brand | size | sum-- -----+------+-----Foo | | 30Bar | | 20

| L | 15| M | 35| | 50

(5 rows)

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 18 / 40

Page 22: Don't panic! - Postgres introduction

A quick look to a powerful tool

The future

PostgreSQL 9.6

Currently in beta

Parallel sequential scans, joins and aggregates

Push down for the postgresql foreigh data wrapper

Full text search for phrases, YAY!

Multiple synchronous standby servers

Snapshot too old!

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 19 / 40

Page 23: Don't panic! - Postgres introduction

NOSQL on Acid

Table of contents

1 An elephant never forgets

2 A quick look to a powerful tool

3 NOSQL on Acid

4 Wrap up

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 20 / 40

Page 24: Don't panic! - Postgres introduction

NOSQL on Acid

NOSQL on Acid

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 21 / 40

Page 25: Don't panic! - Postgres introduction

NOSQL on Acid

JSON

JSON - JavaScript Object Notation

The version 9.2 adds JSON as native data type

The version 9.3 adds the support functions for JSON

JSON is stored as text

JSON is parsed and validated on the fly

The 9.4 adds JSONB (binary) data type

The 9.5 improves JSONB

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 22 / 40

Page 26: Don't panic! - Postgres introduction

NOSQL on Acid

JSON

JSON - ExamplesFrom record to JSON

postgres=# SELECT row_to_json(ROW(1,’foo’));row_to_json

---------------------{"f1":1,"f2":"foo"}

(1 row)

Expanding JSON into key to value elements

postgres=# SELECT * from json_each(’{"a":"foo", "b":"bar"}’);

key | value-----+-------a | "foo"b | "bar"

(2 rows)

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 23 / 40

Page 27: Don't panic! - Postgres introduction

NOSQL on Acid

JSONB

Because JSON is parsed and validated on the fly it could be a bottleneck.

The new JSONB introduced with PostgreSQL 9.4 is parsed, validated andtransformed at insert/update’s time. The access is then faster than the plainJSON but the storage cost can be higher.The functions available for JSON are also available in the JSONB flavour.

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 24 / 40

Page 28: Don't panic! - Postgres introduction

NOSQL on Acid

Some numbers

Let’s create three tables with text,json and jsonb type fields.Each record contains the same json element generated onhttp://beta.json-generator.com/4kwCt-fwg

[ {

"_id": "56891aba27402de7f551bc91",

"index": 0,

"guid": "b9345045-1222-4f71-9540-6ed7c8d2ccae",

"isActive": false,

............

3,

{

"id": 1,

"name": "Bridgett Shaw"

}

],

"greeting": "Hello, Johnston! You have 8 unread messages.",

"favoriteFruit": "apple"

}

]

postgres =# SELECT pg_switch_xlog ();pg_switch_xlog

----------------0/16 ACA00

(1 row)

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 25 / 40

Page 29: Don't panic! - Postgres introduction

NOSQL on Acid

Some numbers

DROP TABLE IF EXISTS t_json ;DROP TABLE IF EXISTS t_jsonb ;DROP TABLE IF EXISTS t_text ;

CREATE TABLE t_json asSELECT’<JSON ELEMENT >’::json as js_valueFROMgenerate_series (1 ,100000);Query returned successfully: 100000 rows affected , 14504 ms execution time.

CREATE TABLE t_text asSELECT’<JSON ELEMENT >’::text as t_valueFROMgenerate_series (1 ,100000);Query returned successfully: 100000 rows affected , 14330 ms execution time.

CREATE TABLE t_jsonb asSELECT’<JSON ELEMENT >’::jsonb as jsb_valueFROMgenerate_series (1 ,100000);Query returned successfully: 100000 rows affected , 14060 ms execution time.

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 26 / 40

Page 30: Don't panic! - Postgres introduction

NOSQL on Acid

Table size

SELECTpg_size_pretty(pg_total_relation_size(oid)),relname

FROMpg_class

WHERErelname LIKE ’t\_%’

;

pg_size_pretty | relname-- --------------+---------270 MB | t_json322 MB | t_jsonb270 MB | t_text

(3 rows)

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 27 / 40

Page 31: Don't panic! - Postgres introduction

NOSQL on Acid

Sequential scans

TEXT

EXPLAIN (BUFFERS , ANALYZE) SELECT * FROM t_text;

Seq Scan on t_text (cost =0.00..1637.00 rows =100000 width =18) (actual time=0.016..17.624 rows =100000 loops =1)

Buffers: shared hit =637Planning time: 0.040 msExecution time: 28.967 ms

(4 rows)

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 28 / 40

Page 32: Don't panic! - Postgres introduction

NOSQL on Acid

Sequential scans

JSON

EXPLAIN (BUFFERS , ANALYZE) SELECT * FROM t_json;

Seq Scan on t_json (cost =0.00..1637.09 rows =100009 width =32) (actual time=0.018..15.443 rows =100000 loops =1)

Buffers: shared hit =637Planning time: 0.045 msExecution time: 25.268 ms

(4 rows)

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 29 / 40

Page 33: Don't panic! - Postgres introduction

NOSQL on Acid

Sequential scans

JSONB

EXPLAIN (BUFFERS , ANALYZE) SELECT * FROM t_jsonb;

Seq Scan on t_jsonb (cost =0.00..1637.00 rows =100000 width =18) (actual time=0.015..18.943 rows =100000 loops =1)

Buffers: shared hit =637Planning time: 0.043 msExecution time: 31.072 ms

(4 rows)

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 30 / 40

Page 34: Don't panic! - Postgres introduction

NOSQL on Acid

Sequential scan with json access

TEXT

EXPLAIN (BUFFERS , ANALYZE) SELECT t_value ::json ->’index ’ FROM t_text;

Seq Scan on t_text (cost =0.00..2387.00 rows =100000 width =18) (actual time=0.159..7748.381 rows =100000 loops =1)

Buffers: shared hit =401729Planning time: 0.028 msExecution time: 7760.263 ms

(4 rows)

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 31 / 40

Page 35: Don't panic! - Postgres introduction

NOSQL on Acid

Sequential scan with json access

JSON

EXPLAIN (BUFFERS , ANALYZE) SELECT js_value ->’index ’ FROM t_json;

Seq Scan on t_json (cost =0.00..1887.11 rows =100009 width =32) (actual time=0.254..5787.267 rows =100000 loops =1)

Buffers: shared hit =401730Planning time: 0.044 msExecution time: 5798.153 ms

(4 rows)

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 32 / 40

Page 36: Don't panic! - Postgres introduction

NOSQL on Acid

Sequential scan with json access

JSONB

EXPLAIN (BUFFERS , ANALYZE) SELECT jsb_value ->’index ’ FROM t_jsonb;

Seq Scan on t_jsonb (cost =0.00..1887.00 rows =100000 width =18) (actual time=0.138..1678.222 rows =100000 loops =1)

Buffers: shared hit =421729Planning time: 0.048 msExecution time: 1688.752 ms

(4 rows)

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 33 / 40

Page 37: Don't panic! - Postgres introduction

Wrap up

Table of contents

1 An elephant never forgets

2 A quick look to a powerful tool

3 NOSQL on Acid

4 Wrap up

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 34 / 40

Page 38: Don't panic! - Postgres introduction

Wrap up

Wrap up

PostgreSQL is a powerful RDBMS with dozens of features and capabilities.

Choosing the correctly what to use can be tricky.

The lack of horizontal scalability in PostgreSQL can be a problem for large datasets. However, an interesting project for a distributed cluster is PostgreSQL XL -http://www.postgres-xl.org/

Another cool project is CitusDB, a powerful extension to add to PostgreSQLhorizontal scale capabilities.CitusDB recently un-forked from PostgreSQL becoming an open source extension.Yay!

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 35 / 40

Page 39: Don't panic! - Postgres introduction

Wrap up

Wrap up

Schema less data are useful. They are flexible and powerful.

Never forget PostgreSQL is a RDBMS

Get a DBA on board

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 36 / 40

Page 40: Don't panic! - Postgres introduction

Wrap up

Questions

Questions?

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 37 / 40

Page 41: Don't panic! - Postgres introduction

Wrap up

Contacts

Twitter: 4thdoctor scarf

Personal blog: http://www.pgdba.co.uk

PostgreSQL Book:http://www.slideshare.net/FedericoCampoli/postgresql-dba-01

Brighton PostgreSQL Meetup:http://www.meetup.com/Brighton-PostgreSQL-Meetup/

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 38 / 40

Page 42: Don't panic! - Postgres introduction

Wrap up

License and copyright

This presentation is licensed under the terms of the Creative CommonsAttribution NonCommercial ShareAlike 4.0

http://creativecommons.org/licenses/by-nc-sa/4.0/

The cheetah photo is copyright by Hein Waschefort -http://commons.wikimedia.org/wiki/User:Hein waschefort

The elephant logos are copyright of the PostgreSQL Global DevelopmentGroup - http://www.postgresql.org/

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 39 / 40

Page 43: Don't panic! - Postgres introduction

Wrap up

Introduction to PostgreSQLDon’t Panic!

Federico Campoli

Brighton PostgreSQL Users Group

13 June 2016

Federico Campoli (Brighton PostgreSQL Users Group) Introduction to PostgreSQL 13 June 2016 40 / 40