SlideShare a Scribd company logo
SCALING A SAAS BACKEND 
WITH POSTGRESQL – A CASE STUDY 
PostgreSQL Conference Europe 
Madrid 2014-10-24 
Oliver Seemann - Bidmanagement GmbH 
oliver.seemann@adspert.net
Gigabytes 
Terabytes 
Growing Data
We do productivity tools for 
advertisers
Significant amounts of data
Upper boundary: 
5M keywords × 365 days 
× 20 bigints/doubles 
≅ 300GB
OLTP / OLAP Duality
“Slow” OLAP data for daily batch-processing 
jobs
“Fast” OLTP data for 
human interaction
Initially separate databases 
Slow 
Data 
Fast 
Data
Data overlaps significantly 
Slow 
Data 
Fast 
Data
We went with unified approach 
Slow 
Data 
Fast 
Data
Currently: 
7 machines running PG 9.3
Currently: 
~3 TB Data
Currently: 
largest table: ~100GB
How it all started..
It began as an experiment
Design by the book 
Keywords 
PK,FK1 adgroup_id 
PK keyword_id 
Campaign 
PK campaign_id 
FK1 account_id 
Adgroup 
PK adgroup_id 
FK1 campaign_id 
Account 
PK account_id 
FK1 customer_id 
Customer 
PK customer_id 
User 
PK user_id 
FK1 customer_id 
History 
PK day 
PK,FK1 keyword_id 
PK,FK1,FK2 adgroup_id 
UserAccountAccess 
PK,FK1 account_id 
PK,FK2 user_id 
Scenario 
PK,FK1 keyword_id 
PK,FK1 adgroup_id 
PK factor
Soon tens of GB 
>100M records
All Accounts 
Account 1 – Rec 1 
Account 2 – Rec 1 
Account 1 – Rec 2 
Account 3 – Rec 1 
Account 2 – Rec 2 
Account 2 – Rec 3 
Account 1 – Rec 3 
Account 3 – Rec 2
+10fold increase per level 
Account >10 
FK Campaign >1k 
FK Ad Group >100K 
FK Keyword >10M 
FK History >100M
Partitioning, somehow 
Account 1 
Account 1 – Rec 1 
Account 1 – Rec 2 
Account 1 – Rec 3 
Account 2 
Account 2 – Rec 1 
Account 2 – Rec 2 
Account 2 – Rec 3 
Account 3 
Account 3 – Rec 1 
Account 3 – Rec 2 
Account 3 – Rec 3
Partitioning with inheritance 
Parent 
Child Child Child 
check-constraints 
SELECT 
INSERT
PG Partitioning is nifty – 
but not a match for our case
Our case: 
Little to no shared data between 
clients
Isolate accounts 
One DB Many DBs/Schemas?
Both approaches: 
+ Good horizontal scaling
Both approaches: 
+ Good tool support 
(e.g. pg_dump/restore)
Partition into databases: 
+ Easy cloning 
CREATE DATABASE foo TEMPLATE bar;
Partition into databases: 
+ Stricter isolation (security)
Partition into databases: 
- Some Overhead
Partition into databases: 
- No direct references
Partition into schemas: 
+ More lightweight
Partition into schemas: 
+ Full references
Partition into schemas: 
- No easy cloning
Partition into schemas: 
- No cascading schemas
Now: 
Several thousand databases 
on five 1TB machines
Now: 
Plus main DB server pair 
with <10GB data
Setup 
Main DB Hosts 
standalone-0 standalone-1 
standalone-2 standalone-3 
master slave 
Account DB Hosts
No replication on 
account db hosts?
Performance Problems
Too many concurrent 
full table scans
From 300MB/s to 30MB/s 
More concurrent queries 
Longer query runtime
Different apps 
Different access patterns 
Web 
Apps 
Compute 
Cluster 
Many small/ 
fast queries 
Few very slow/ 
big queries
Limit concurrent access 
with counting semaphore 
Web 
Apps 
Compute 
Cluster 
Many small/ 
fast queries 
Few very slow/ 
big queries
Implement Semaphore using 
Advisory Locks
Simpler than setting up 
Zookeeper
More performance problems: 
Bulk Inserts
Solved with common 
best practices:
COPY exclusively
Drop / Recreate indexes
COPY to new table + swap
Another problem:
CREATE DATABASE 
can take a while
Signup Delays 
Signup 
Web App 
+ 
CREATE 
DATABASE 
Can take 
up to 5-15 min
CREATE DATABASE 
performs a CHECKPOINT
Solution: 
Keep stock of 
spare databases
In general: 
Very happy with our approach
Databases are tangible
Move DBs between hosts
Painless 9.0 -> 9.3 migration
Use schemas as partitions?
Would prevent 
regular schema usage
CREATE SCHEMA foo; 
CREATE SCHEMA foo.bar; 
CREATE SCHEMA foo.bar.baz;
Schemas are crucial for us
Versioning of database code
Grown to about 
~15k SQL functions/views
Moved core algorithms 
from app to db
Previously: 
1. Read bulk raw data from DB 
2. Number crunching in app 
3. Write bulk results to DB
4x-10x faster in DB 
2x-4x RAM reduction
SQL is harder to read & write
How to test it? 
App test suite 
goes a long way.
Different production stages 
Versioning with schemas
Every 4-8 weeks: 
CREATE SCHEMA version_%d;
Assign each version a stage: 
unstable -> testing -> stable
Stage App Schema COUNT(account) 
unstable v22.4 version_22 0% - 2% 
testing v21.13 version_21 1% – 50% 
stable v20.19 version_20 50% – 100%
Watchdogs on key metrics 
alert on suspicious behaviour
Schemas are VERY important
Takeaway: 
Databases can be aptly 
used as partitions
Takeaway: 
So can schemas
Takeaway: 
Schemas can be used 
for versioning
Thanks for listening 
Questions?
Managing Schema Changes
ORM 
Can’t live with it, 
can’t live without it
PG Wishes

More Related Content

What's hot (20)

ODP
Jee conf
Valerii Moisieienko
 
PDF
Amazon Elastic Map Reduce - Ian Meyers
huguk
 
PDF
hbaseconasia2019 HBase at Tencent
Michael Stack
 
PDF
HBaseConAsia2018 Keynote1: Apache HBase Project Status
Michael Stack
 
PPTX
Copy data management
Paresh Motiwala, PMP®
 
PDF
HBaseConAsia2018 Track1-3: HBase at Xiaomi
Michael Stack
 
PPTX
Black Friday and Cyber Monday- Best Practices for Your E-Commerce Database
Tim Vaillancourt
 
PPTX
Building a Scalable Web Crawler with Hadoop
Hadoop User Group
 
PPTX
PHP and Cassandra
Dave Gardner
 
PDF
IMC Summit 2016 Innovation - Derek Nelson - PipelineDB: The Streaming-SQL Dat...
In-Memory Computing Summit
 
PPTX
Hardware Provisioning
MongoDB
 
PDF
Hdfs high availability
Hadoop User Group
 
PPTX
Columnstore Customer Stories 2016 by Sunil Agarwal
Brent Ozar
 
PDF
HBaseConAsia2018 Track3-4: HBase and OpenTSDB practice at Huawei
Michael Stack
 
PDF
HUG August 2010: Best practices
Hadoop User Group
 
PPTX
Hardware Provisioning for MongoDB
MongoDB
 
PDF
Building Hybrid data cluster using PostgreSQL and MongoDB
Ashnikbiz
 
PPT
HBASE by Nicolas Liochon - Meetup HUGFR du 22 Sept 2014
Modern Data Stack France
 
PPT
UnConference for Georgia Southern Computer Science March 31, 2015
Christopher Curtin
 
PDF
MongoDB Capacity Planning
Norberto Leite
 
Amazon Elastic Map Reduce - Ian Meyers
huguk
 
hbaseconasia2019 HBase at Tencent
Michael Stack
 
HBaseConAsia2018 Keynote1: Apache HBase Project Status
Michael Stack
 
Copy data management
Paresh Motiwala, PMP®
 
HBaseConAsia2018 Track1-3: HBase at Xiaomi
Michael Stack
 
Black Friday and Cyber Monday- Best Practices for Your E-Commerce Database
Tim Vaillancourt
 
Building a Scalable Web Crawler with Hadoop
Hadoop User Group
 
PHP and Cassandra
Dave Gardner
 
IMC Summit 2016 Innovation - Derek Nelson - PipelineDB: The Streaming-SQL Dat...
In-Memory Computing Summit
 
Hardware Provisioning
MongoDB
 
Hdfs high availability
Hadoop User Group
 
Columnstore Customer Stories 2016 by Sunil Agarwal
Brent Ozar
 
HBaseConAsia2018 Track3-4: HBase and OpenTSDB practice at Huawei
Michael Stack
 
HUG August 2010: Best practices
Hadoop User Group
 
Hardware Provisioning for MongoDB
MongoDB
 
Building Hybrid data cluster using PostgreSQL and MongoDB
Ashnikbiz
 
HBASE by Nicolas Liochon - Meetup HUGFR du 22 Sept 2014
Modern Data Stack France
 
UnConference for Georgia Southern Computer Science March 31, 2015
Christopher Curtin
 
MongoDB Capacity Planning
Norberto Leite
 

Viewers also liked (10)

PDF
Webscale PostgreSQL - JSONB and Horizontal Scaling Strategies
Jonathan Katz
 
PPTX
Design Strategy for Data Isolation in SaaS Model
Techcello
 
PPTX
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Ontico
 
PDF
MySQL for Software-as-a-Service (SaaS)
Mario Beck
 
PDF
Scaling Wanelo.com 100x in Six Months
Konstantin Gredeskoul
 
PDF
From Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQL
Konstantin Gredeskoul
 
PPTX
Best Practices for Managing SaaS Applications
Correlsense
 
PPTX
12 Key Levers of SaaS Success
David Skok
 
PDF
How to Develop Your SaaS Pricing Model
Lincoln Murphy
 
PPTX
The SaaS business model and metrics
David Skok
 
Webscale PostgreSQL - JSONB and Horizontal Scaling Strategies
Jonathan Katz
 
Design Strategy for Data Isolation in SaaS Model
Techcello
 
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Ontico
 
MySQL for Software-as-a-Service (SaaS)
Mario Beck
 
Scaling Wanelo.com 100x in Six Months
Konstantin Gredeskoul
 
From Obvious to Ingenius: Incrementally Scaling Web Apps on PostgreSQL
Konstantin Gredeskoul
 
Best Practices for Managing SaaS Applications
Correlsense
 
12 Key Levers of SaaS Success
David Skok
 
How to Develop Your SaaS Pricing Model
Lincoln Murphy
 
The SaaS business model and metrics
David Skok
 
Ad

Similar to Scaling a SaaS backend with PostgreSQL - A case study (20)

PDF
Amazon RedShift - Ianni Vamvadelis
huguk
 
PDF
Learn How Dell Improved Postgres/Greenplum Performance 20x with a Database Pr...
VMware Tanzu
 
PPT
Voldemort & Hadoop @ Linkedin, Hadoop User Group Jan 2010
Bhupesh Bansal
 
PPT
Hadoop and Voldemort @ LinkedIn
Hadoop User Group
 
PDF
Reliable Data Replication by Cameron Morgan
ScyllaDB
 
PDF
Big data should be simple
Dori Waldman
 
PDF
Scylla Summit 2022: Building Zeotap's Privacy Compliant Customer Data Platfor...
ScyllaDB
 
PPTX
Evaluating Storage for VDI Projects
Tegile Systems
 
PDF
Building a high-performance data lake analytics engine at Alibaba Cloud with ...
Alluxio, Inc.
 
PPTX
Galaxy Big Data with MariaDB
MariaDB Corporation
 
PPTX
Tech Talk Series, Part 3: Why is your CFO right to demand you scale down MySQL?
Clustrix
 
PDF
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
Fwdays
 
PDF
DoneDeal - AWS Data Analytics Platform
martinbpeters
 
PPTX
MinneBar 2013 - Scaling with Cassandra
Jeff Smoley
 
PDF
Using ScyllaDB for Real-Time Read-Heavy Workloads.pdf
ScyllaDB
 
PDF
Scaling a Beast: Lessons from 400x Growth in a High-Stakes Financial System b...
ScyllaDB
 
PDF
Catalyst - refactor large apps with it and have fun!
mold
 
PDF
Configuring sql server - SQL Saturday, Athens Oct 2014
Antonios Chatzipavlis
 
PPT
Scaling Your Web Application
Ketan Deshmukh
 
PPTX
Handling Data in Mega Scale Systems
Directi Group
 
Amazon RedShift - Ianni Vamvadelis
huguk
 
Learn How Dell Improved Postgres/Greenplum Performance 20x with a Database Pr...
VMware Tanzu
 
Voldemort & Hadoop @ Linkedin, Hadoop User Group Jan 2010
Bhupesh Bansal
 
Hadoop and Voldemort @ LinkedIn
Hadoop User Group
 
Reliable Data Replication by Cameron Morgan
ScyllaDB
 
Big data should be simple
Dori Waldman
 
Scylla Summit 2022: Building Zeotap's Privacy Compliant Customer Data Platfor...
ScyllaDB
 
Evaluating Storage for VDI Projects
Tegile Systems
 
Building a high-performance data lake analytics engine at Alibaba Cloud with ...
Alluxio, Inc.
 
Galaxy Big Data with MariaDB
MariaDB Corporation
 
Tech Talk Series, Part 3: Why is your CFO right to demand you scale down MySQL?
Clustrix
 
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
Fwdays
 
DoneDeal - AWS Data Analytics Platform
martinbpeters
 
MinneBar 2013 - Scaling with Cassandra
Jeff Smoley
 
Using ScyllaDB for Real-Time Read-Heavy Workloads.pdf
ScyllaDB
 
Scaling a Beast: Lessons from 400x Growth in a High-Stakes Financial System b...
ScyllaDB
 
Catalyst - refactor large apps with it and have fun!
mold
 
Configuring sql server - SQL Saturday, Athens Oct 2014
Antonios Chatzipavlis
 
Scaling Your Web Application
Ketan Deshmukh
 
Handling Data in Mega Scale Systems
Directi Group
 
Ad

Recently uploaded (20)

PPTX
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
PDF
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
PPTX
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
PPTX
Tally_Basic_Operations_Presentation.pptx
AditiBansal54083
 
PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
PDF
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
PPTX
Transforming Mining & Engineering Operations with Odoo ERP | Streamline Proje...
SatishKumar2651
 
PPTX
How Cloud Computing is Reinventing Financial Services
Isla Pandora
 
PDF
Revenue streams of the Wazirx clone script.pdf
aaronjeffray
 
PDF
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
PDF
Online Queue Management System for Public Service Offices in Nepal [Focused i...
Rishab Acharya
 
PDF
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
PPTX
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
PDF
GetOnCRM Speeds Up Agentforce 3 Deployment for Enterprise AI Wins.pdf
GetOnCRM Solutions
 
PDF
Efficient, Automated Claims Processing Software for Insurers
Insurance Tech Services
 
PDF
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
PDF
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
PPTX
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
Tally_Basic_Operations_Presentation.pptx
AditiBansal54083
 
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
Transforming Mining & Engineering Operations with Odoo ERP | Streamline Proje...
SatishKumar2651
 
How Cloud Computing is Reinventing Financial Services
Isla Pandora
 
Revenue streams of the Wazirx clone script.pdf
aaronjeffray
 
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
Online Queue Management System for Public Service Offices in Nepal [Focused i...
Rishab Acharya
 
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
GetOnCRM Speeds Up Agentforce 3 Deployment for Enterprise AI Wins.pdf
GetOnCRM Solutions
 
Efficient, Automated Claims Processing Software for Insurers
Insurance Tech Services
 
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 

Scaling a SaaS backend with PostgreSQL - A case study

Editor's Notes

  • #2: Hi, I’m Oliver, I’m a software developer, currently heading the development team at Bidmanagement GmbH in Berlin.
  • #3: I’m going to talk about how we’re using it as main datastore in our system Non of the solutions or approaches are .. But by using some pg features in a non-standard way certain problems can be solved quite elegantly And seeing that this works very well for some, maybe will be helpful to some of you when you have similar problems now or in the future.
  • #4: Mostly in the area of search engine marketing Which today is mostly adwords, however we also support other networks, for example yandex Our flagship product is a fully automatic bid management solution. Everyday we’re changing the bids on tens of millions of keywords and learn from the effects to steer campaign performance towards goals configured by the user. The philosophy is to take the mind numbing number crunching tasks away from the user, because a computer can do it better and much more efficiently, especially when you have thousands or millions of objects to analyze.
  • #5: - Replicate the campaign structure Provide reporting interface I don’t want to bore you with the technical details about how search engine marketing work so let’s just say we store a lot of ints and floats and especially time series data of those. To get an idea of the ballpark we’re working with let’s have a look at the upper boundary
  • #6: Ballpark estimates Upper bound Time series data Hierarchical data Clicks, impressions and also lots of statistical projections with confidence intervals Of course most of those values are actually zero and those can be omitted when storing the data. So it may actually only be 5 or 10% or that. However we have thousands of accounts, most of which only have a few hundred MB to a few GB. But the occasional outlier with 100GB must work just as well.
  • #7: The different kinds of data we store can be largely separated into two groups.
  • #10: One internal (batch processing), One external (web app access)
  • #11: Mostly the time series data So we had to either duplicate lots data and synchronize changes. Or integrate both into one and make sure different parts of the system don’t get in each other’s way.
  • #12: We opted for the latter because it makes for a simpler system. We just have to make sure So far it turned out well and we havent looked back.
  • #17: Let’s have a peek into the past in order to understand how the system evolved.
  • #18: Our CTO is a mathematician Skunk works project
  • #25: PostgreSQL supports partitioning via inheritance [insert scheme] Use CHECK constraints to tell Query Planner where to look Cannot insert into parent table, must insert into child table Lot of effort goes to application logic Tried it on one table, weren’t it conviced
  • #30: The database or schema as a logical unit is a central part of PG with good tool support Easy to add, easy to drop Can be Backed up Restored Moved between machines Very Tangible from an ops view
  • #41: MainDB still replicated To enable quick failover Here we can’t afford extended downtime
  • #42: Can make availability / cost trade offs here
  • #43: Big cheap HDDs Bottle neck is Gigabit Ethernet
  • #44: Capacity doubled, cost reduced 40% The more servers, the faster the restore Gbit Ethernet on backup server is limiting factor
  • #45: Not really feasible: We rewrite lots of data every day (crude approach, but simpler code) Complex Administration (no dedicated DBA)
  • #49: From sequential reads to random reads The cause of the problem is only on one side ..
  • #50: Webapp-queries with humans waiting are quite fast Problematic queries done by the analysis jobs Frequent full table scans Queries with huge results Need way to synchronize queries, control concurrency Could use a connection pooler Or an external synchronization mechanism e.g. Zookeeper
  • #51: Webapp-queries with humans waiting are quite fast Problematic queries done by the analysis jobs Frequent full table scans Queries with huge results Need way to synchronize queries, control concurrency Could use a connection pooler Or an external synchronization mechanism e.g. Zookeeper
  • #52: Very simple mechanism Unfair, but that’s no problem
  • #53: However, it’s starting to spread with a tendency to be mis-used.
  • #57: An ALTER INDEX foo DISABLE would come in handy;
  • #61: We added a self-service signup 2-minute process to add AdWords account to the system OAuth  User Info  Optimization Bootstrap Biggest problem: CREATE DATABASE can take several minutes Depends on current amount of write activity More granular checkpoint (per db) would be cool?
  • #63: Restrict checkpoints to databases?
  • #64: So all of the drawbacks that came up could be worked around, more or less elegantly. In total, we’re very happy with the way the approach has turned out. Especially the scalability and isolation aspects of it have us very pleased. So much in fact, that we also used it for a second product and it feels very natural.
  • #65: Databases as a unit of abstraction on a client or account level level are very much tangible. Which makes it comfortable both from an development and operations point of view. They can be connected to, renamed, cloned, copied, moved, backed up and restored. When we remove a customer from the system we just dump the account databases and put them on S3 Glacier for some amount of time, instead of keeping the 100GB in the system.
  • #66: To manage capacity. Currently this is still a manual process because it’s not required very often. Making it automatic would require amongst other things a means to briefly disable the app from connecting to it. Does “ALTER DATABASE set CONNECTION LIMIT 0” work?
  • #67: Moving between hosts means we can also move it between PG versions. We upgraded from 9.0 to 9.3 without much effort by installing both on all machines and then dumping them one after another from 9.0 and restoring into 9.3. Over a period of 2-3 months. Memory is not a problem as shared_buffers is relatively low (a few gigabytes) and most memory is used by page and buffer cache and all files continue to exist only once. Used 9.3 in development for a few months Btw, I only remember one case where we needed to adapt code for 9.3, something with the order of a query result. Otherwise the ugprade was a breeze.
  • #68: But, even though this works very well with using databases as partitions. Would schemas have worked the same way?
  • #69: The biggest problem we would have had is, that we wouldnt be able to use schemas for other purposes anymore.
  • #72: This is become necessary
  • #74: It has grown quite a bit because we started with lots of Perl code and a “dumb” data store
  • #75: Up to 100GB memory in step 2
  • #76: Only works when we can limit concurrent the batch jobs per machine (advisory locks).
  • #77: But it’s not all sunshine and rainbows with that approach, of course. Because SQL is much harder to write and to read than procedural code. The notion that “code is a liability” has some truth to it. So the more we move into the database, the hard it becomes to manage. Python I just much more tangible and malleable than SQL. We have to compromise between easy to debug&test and performance.
  • #78: But, given a bit of time and quiet one can accomplish much with little code in SQL. Testing of individual snippets can be done by calling it from the application code, as part of an integrated test suite that has test data and expects certain results. Covering most of the code in tests is not the problem, but covering most data scenarios is much more work (Div by zero sneeks in from time to time). Those cases are postponed to …
  • #79: The SQL code decides how to spend millions of euros in advertising money every months. We can’t afford deploying any code changes (app or db) to all account databases at the same time. So we use schemas to manage multiple versions of the optimization code.
  • #80: The schema is filled with all the objects from a set of source .sql files. The application software version that uses the db and schema version are identical, app sets search path. We don’t use minor versions for fixes in the db code.
  • #81: What we do is, assign each version a stage. Unstable, testing, stable, borrowed from Debian. And we also can assign individual client accounts a stage.
  • #82: Typically test accounts or one with a pathological case that is fixed by the new release. Those are closely monitored (performance, errors, log files, debugging data). Brand new unstable: few, selected (test-)accounts Testing stage for incremental roll-out