there is no undo h ere!
TRANSCRIPT
![Page 1: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/1.jpg)
postgres
psql (9.
Type "he
@pg $> psql
3.1)
lp" for help.
=# UPDATE t SET c =
815162342
=# ^C
There is no U N D O h
postgres
UPDATE 4
postgres
^C
^C
^Z
‘black’;
ere!
![Page 2: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/2.jpg)
postgres@pg $> psql
psql (9.3.1)
Type "help" for help.
postgres=# DROP DATABASE scott;
DROP DATABASE
postgres=# \q
postgres@pg $> date
Fri 8 Nov 2013 18:43:15 CET
![Page 3: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/3.jpg)
pg_dump -Fc
t t t t t
transactions
t t t t t
CRASH!!!
t
04:00:01
t start
05:12:44
t end
18:43:15
14 hours 43 minutes 14 seconds of potential data loss (RPO )
![Page 4: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/4.jpg)
Base Backup
WAL WAL WAL WAL WAL WAL
transactions
WAL WAL WAL WAL
CRASH!!!
WAL
04:00:01
t start
04:41:52
t end
18:43:15
1 minute 1 second
of potential data loss (RPO )
18:42:14
![Page 5: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/5.jpg)
Prof e s s iona l Pos tg r eSQ L
www.2ndQuadrant.com
![Page 6: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/6.jpg)
GABRIELE BARTOLINI PGConf.DE 2013 - Oberhausen, 8 November 2013
![Page 7: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/7.jpg)
GABRIELE BARTOLINI
• Co-Founder and Manager of 2ndQuadrant Italia
• Data Architect, Business critical environments
• Data warehousing
• Co-Founder Italian PostgreSQL Users Group
• Co-Founder PostgreSQL Europe
• PostgreSQL Contributor and Advocate
![Page 8: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/8.jpg)
DISCLAIMER T his talk assumes you are familiar with disaster
recovery concepts and PostgreSQL implementation of Point In Time Recovery
![Page 9: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/9.jpg)
BE AWARE In 2ndQuadrant, all these concepts usually fit in a 2 day workshop on D isaster Recovery and a 1 day
workshop on Barman alone
![Page 10: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/10.jpg)
OUTLINE
• Business continuity / Disaster recovery for databases
• Disaster recovery with Barman for PostgreSQL
![Page 11: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/11.jpg)
PA RT I Business continuity / Disaster recovery for databases
![Page 12: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/12.jpg)
BUSINESS CONTINUITY activity performed by an organisation to ensure that critical business functions will be available to customers, suppliers,
regulators, and other entities that must have access to those functions - Wikipedia
![Page 13: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/13.jpg)
INFORMATION TECHNOLOGY
• Business continuity
• High availability
• Disaster recovery
![Page 14: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/14.jpg)
LAW REQUIREMENTS In Italy, the “Codice dell’Am ministrazione D igitale” defines business continuity requirements for public
administrations
![Page 15: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/15.jpg)
DISASTER (touch wood now)
system/hardware failures unintentional errors
natural disaster
![Page 16: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/16.jpg)
REACT TO A DISASTER Recover systems, data and infrastructures
![Page 17: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/17.jpg)
TOO LATE! Do not wait for a disaster to happen
![Page 18: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/18.jpg)
PLAN FOR DISASTERS “Disasters” will happen. Be prepared.
![Page 19: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/19.jpg)
“Plans are worthless, but planning is everything.There is a very great distinction
because when you are planning for an emergency you must start with this one thing: the very definition
of "emergency" is that it is unexpected, therefore it is not going to happen the way you are
planning.” - Dwight D. Eisenhower
![Page 20: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/20.jpg)
REGULAR CRASH TESTS
![Page 21: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/21.jpg)
DATABASE DISASTER RECOVERY
Let’s just focus on databases!
![Page 22: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/22.jpg)
REQUIREMENTS
• Automated backups
• Notifications (anomalies)
• Frequency of backups
• Retention policies
• Data protection
• Availability for recovery
![Page 23: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/23.jpg)
TYPES OF BACKUP
• Full backup
• Incremental backup
• Differential backup
• Hot backup
• Logical backup
• Physical backup
![Page 24: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/24.jpg)
POSTGRES BACKUP
• Hot backup
• MVCC (core)
• Logical Backup
• pg_dump
• Physical Backup
• Full backup (base backup)
• Differential backup (WAL)
• Incremental backup
• N/A
![Page 25: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/25.jpg)
TRADITIONAL DR WITH POSTGRESQL
• PostgreSQL primitives for DR are robust and reliable
• High level skills
• DBA
• Sysadmins
• Custom scripts
• Hard to integrate in:
• Backup solutions
• Disaster Recovery plans
• Hard to test!
![Page 26: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/26.jpg)
EXISTING TOOLS
• Omni-PITR
• WAL centric
• WALmgr
• WAL centric
• pg-rman
• Server centric
• WAL-E
• EC2 centric, but ...
• good
• came later
![Page 27: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/27.jpg)
NONE FOR DR None of them was a pure disaster recovery solution.
We wanted something similar to Oracle’s RMAN.
![Page 28: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/28.jpg)
FILLING A HOLE The lack of a DR solution is a barrier towards the adoption
of PostgreSQL from Oracle users’ point of view.
![Page 29: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/29.jpg)
OUR GOALS
• Hot, Full, Differential and Incremental backups
• Multiple servers
• Remote backup & recover y
• Backup catalogues
• Retention policies
• Archival and compression
• WAL segments
• Periodical backups
• Automation
• Integration
• Usability
![Page 30: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/30.jpg)
WWW.PGBARMAN.ORG
![Page 31: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/31.jpg)
PA RT I I Disaster recovery with Barman for PostgreSQL
![Page 32: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/32.jpg)
BARMAN
• GNU GPL 3
• Hosted on Sourceforge.net
• Linux
• Python 2.6/2.7 (3.0 exp.)
• PostgreSQL 8.4 to 9.3
• PyPI package
• RPM package
• Debian/Ubuntu package
• Designed, developed, maintained by 2ndQuadrant
![Page 33: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/33.jpg)
Postgres Postgres Postgres
Batarmpean
LAN, hceybnrtridaliasrecdhiatercchtuitreecture
Barman
![Page 34: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/34.jpg)
Postgres
Barman
Geographic redundancy
Barman
data centre 1 data centre 2
rsync
![Page 35: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/35.jpg)
Postgres
Barman
Continuous archiving (WAL shipping via SSH)
SSH commands SQL commands
![Page 36: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/36.jpg)
secure channel
Postgres Barman
WAL cron
Barman’s WAL archive
![Page 37: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/37.jpg)
Postgres
Full backup - Sat 1, 4AM
Full backup - Sat 8, 4AM
Full backup - Sat 15, 4AM
Full backup - Sat 22, 4AM
Barman
Periodical backup (weekly)
Differential backup
Backup catalogue
![Page 38: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/38.jpg)
WAL WAL WAL WAL WAL
Backup 1
(100MB)
W AL archive
WAL WAL WAL WAL WAL
Backup 2
(105MB)
Size: 100MB + 8106M0MBB==18206M0MBB Size: 105MB + 80MB = 185MB
![Page 39: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/39.jpg)
CONFIGURATION FILE
log_file =
log_level =
/var/log/barman/barman.log
NOTICE
compression =
[production]
gzip
description
ssh_command
= Production
= ssh
PostgreSQL
conninfo = host=pg.2ndQuadrant.it user=postgres
compression = bzip2
[barman]
barman_home = /srv/barman
barman_user = barman
![Page 40: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/40.jpg)
MULTI-SERVER CONFIGURATION
[barman]
; General
; …
configuration
[server_one]
; Configuration
; …
for Server 1
[server_two]
; Configuration
; …
for Server 2
[server_X]
; …
![Page 41: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/41.jpg)
MULTIPLE FILES INCLUSION
[barman]
configuration_files_directory = /etc/barman.d
; General configuration
; …
![Page 42: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/42.jpg)
CONVENTION OVER CONFIGURATION
global/per server options default directory layout
![Page 43: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/43.jpg)
CONVENTIONAL DIRECTORIES FOR BARMAN
• barman_home (/srv/barman)
• server directory (/sr v/barman/production)
• base directory (/sr v/barman/production/base)
• WAL directory (/sr v/barman/production/wals)
• incoming directory (/sr v/barman/production/incoming)
![Page 44: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/44.jpg)
GLOBAL COMMANDS
• List of managed servers
• barman list-server
• Maintenance operations
• barman cron
![Page 45: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/45.jpg)
SERVER COMMANDS
• Information and diagnostics
• barman status
• barman check
• barman show-server
• barman list-backup
• Backup control
• Recovery control
![Page 46: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/46.jpg)
2ndQuadrant Pret.• • l •nal P• at8n 8QL
Barman
•
-
www.2ndQuadrant .com
barma1 backupserver barman list-backup tes t-9.1
tes t-9 1 20120821T164531 - Tue Aug 21 16:45:38 2012 - Size 109.0 MiB - WAL S12e 304.0 MiB tes t-9.1 20120821T163806 - Tue Aug 21 16:40:37 2012 - Size ·68.0 M1B - WAL Size ·208.0 UiB tes t-9.1 20120821T163146 - Tue Aug 21 16:32:10 2012 - S1ze. 45.0 ld1B - WAL S1ze. 432.0 M1B tes t-9 1 20120821T162630 - Tue Aug 21 16:26:32 2012 - S1ze 53.0 ld1B - WAL S1ze: 400.0 M1B tes t-9 1 201 20821T161651 - Tue Aug 21 16:16:53 2012 - Size 49 0 ldiB - WAL Size: 48 0 UiB
barma backupserver 1
![Page 47: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/47.jpg)
BACKUP CONTROL
• barman backup
• barman show-backup
• barman list-files
• standalone, data, wal, full
• barman delete
![Page 48: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/48.jpg)
2ndQuadrant 11 PrGt.• •l• nal P •at8n SQL
Barman
--------
bar ar backupserver barman backup test-9.1 Starting backup for server test-9 1 in /tmp/barman- tests/test-9 1/base/20120821T163235 Backup start at xlog location: 0/29000020 (000000010000000000000029, 00000020) Copy1ng f1les. Copy done Asking PostgreSQL server to final1ze the backup .
Backup end at xlog location: 0/290000AO (000000010000000000000029, OOOOOOAO) Backup completed
barman backupserver 1
. - - .
![Page 49: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/49.jpg)
SHOW BACKUP
• General • Server name, Postgres
version, status, ...
• Base backup • Start/End time, first/last
WAL, disk usage, ...
• W AL
• Number of associated files
• disk usage
• Context
• Previous/Next backup
![Page 50: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/50.jpg)
$ barman show-backup angus latest
Backup 20131102T130001:
Server Name
Status
: angus
: DONE
80417
: /home/raid/pgdata
PostgreSQL Version:
PGDATA directory
Tablespaces:
tb_angus: /home/raid/postgres (oid:
tb_temp: /home/tables (oid: 19812)
16385)
Base backup information:
Disk usage
Timeline
Begin WAL
End WAL
WAL number
Begin time
End time
Begin Offset
End Offset
Begin XLOG
End XLOG
: 10.0 TiB
: 1
: 0000000100006C57000000B5
: 0000000100006C7E000000D4
: 9977
: 2013-11-02 13:00:01.617907
: 2013-11-04 14:07:20.981717
: 32
: 7185968
: 6C57/B5000020
: 6C7E/D46DA630
WAL information:
No of files
Disk usage
Last available
: 56655
: 232.0 GiB
: 0000000100006D5D00000002
![Page 51: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/51.jpg)
RECOVERY CONTROL
• Recovery target (full / point in time)
• Local recovery
• barman recover
• Remote recovery
• barman recover --remote-ssh-command
![Page 52: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/52.jpg)
ADVANCED RECOVERY
• Point In Time Recovery
• --target-time = TIME
• --target-xid = XID
• --target-name = NAME (for 9.1+)
• Relocation of tablespaces • --tablespace
NAME:LOCATION [...]
![Page 53: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/53.jpg)
COMMON USE CASES
• Unintentional errors recovery
• Disaster recovery
• Sandbox server (BI, staging, ...)
![Page 54: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/54.jpg)
2ndQuadrant Pret.• • l •nal P• at8n 8QL
Barman
-
• Starting local restore for server test-9 1 using backup 20120821T161651
"www.2ndQuadrant .com
bar 1a1 backupserver barman recover test-9.1
20120821T161651
/srv/pos
tgres/recover/ Destination d1rectory. /srv/postgres/recover/ Copying the base backup Copying required wal segments . The archive_comand was set to 'false' to prevent data losses. Restore done1
Please revie the network and archi ving related settings
in the postgres configurat1on file before Start the jus t recovered instance .
barman bacl upserver 1
![Page 55: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/55.jpg)
RETENTION POLICIES
• User-defined policy
• How long backups are retained for recovery
• Point of recoverability
• REDUNDANCY
• RECOVERY WINDOW
![Page 56: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/56.jpg)
RETENTION POLICY CONFIGURATION
; Base backup retention policy
retention_policy
retention_policy
= 'redundancy 3'
= 'recovery window of 3 months'
![Page 57: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/57.jpg)
BANDWIDTH CONTROL
• You can limit I/O bandwidth usage
• bandwidth_limit global/server option
• tablespace_bandwidth_limit on a per tablespace basis
• Unit of measure: kilobytes (default 0, no limits)
![Page 58: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/58.jpg)
BANDWIDTH LIMIT CONFIGURATION
[server_two]
;...
tablespace_bandwidth_limit = tbs01:4096,tbs02:2048
[barman]
bandwidth_limit
= 4096
[server_one]
;...
bandwidth_limit
= 1024
![Page 59: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/59.jpg)
BACKLOG
• Incremental backup
• Better recovery support
• Sandbox recovery
• Logical backup integration
• pg_dump on sandbox instances
• Backup from standby
• More hook scripts
• TAR format for backups
• Export/Import of backups
• External backups
• SSH only connections
• Replication protocol support
• libpq only connections
• pg_basebackup
• WAL streaming (0 Data Loss)
• Backup server
• Windows support
• JSON output for full automation
• Backup validation
• ...
![Page 60: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/60.jpg)
OUR COMMITMENT
• Keep it open source
• Reinvest money from sale of DR turnkey solutions in R&D
• Support and maintain RPM/Debian packages
• Accept sponsorships for new features development
![Page 61: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/61.jpg)
CSI PIEMONTE
(One of the top 10 ICT companies in Italy for revenue)
“We found in Barman the optimal solution for physical backup
and disaster recovery of PostgreSQL databases. Barman is robust and easy to use. Its command interface allows an easy
integration with the existing management tools in our enviroment.”
Sponsors of RPM package and WAL compression
![Page 62: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/62.jpg)
CONCLUSIONS
• Hides complexity of PITR / Keeps unaltered PITR strenghts
• Not invasive
• Fosters migrations from Oracle
• “Standard de facto” for PostgreSQL Disaster Recovery
• Advice: plan for DR (if you have not done it yet)
![Page 63: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/63.jpg)
TIME TO ... yum install barman
apt-get install barman
![Page 65: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/65.jpg)
THANK YOU!
![Page 66: There is no UNDO h ere!](https://reader031.vdocuments.us/reader031/viewer/2022020113/586b76661a28ab2a738bd83b/html5/thumbnails/66.jpg)
LICENSE
This work is licensed under a Creative Commons Attribution- NonCommercial-ShareAlike 3.0 Unported License
Copyright (c) 2012, 2013 - 2ndQuadrant.it