SlideShare a Scribd company logo
1 of 27
Download to read offline
Not just UNIQUE:
Exclusion Constraints



       Jeff Davis
      Truviso, Inc.




                        1
Schedule Conflict
●   One person can't be in two places at the 
     same time
●   Two people can't use an exclusive 
     resource at the same time
●   Business constraint
●   Just one instance of an interesting class 
      of problems


                                                 2
PERIOD Type
●   Need a concept of a period of time, 
     otherwise the system doesn't know what 
     a “schedule conflict” is
●   PERIOD data type:
       –   http://pgfoundry.org/projects/temporal
●   Definite beginning and end time, e.g., the 
     period of time during which a professor 
     is teaching in a classroom

                                                    3
Constraints
●   Foreign Key
       –   Requires another tuple to exist
●   CHECK Constraint
       –   Only looks inside one tuple, can't compare 
            two tuples
       –   You can subvert the system by using a 
            UDF
               ●   Race conditions


                                                     4
Why is UNIQUE so unique?
●   Only constraint where two tuples can 
     conflict with eachother
       –   If x = 5 in one tuple, there can be no other 
              tuple where x = 5
●   Effectively a predicate lock on a very 
     simple predicate
       –   Transactions wait on other transactions 
             trying to insert the same value
●   Special code path inside Btree to enforce 
     uniqueness (doesn't work for GiST, etc.) 5
                         
Almost...
●   UNIQUE is almost what we need, but not 
     quite.
●   Need something that can understand 
     “overlaps”




                                              6
What's the Point?
●   Very common business constraint known 
     as a “schedule conflict”
●   Claims:
       –   Existing solutions in SQL are bad...




                                                  7
What's the Point?
●   Very common business constraint known 
     as a “schedule conflict”
●   Claims:
       –   Existing solutions in SQL are bad...
       –   ...except Exclusion Constraints in 
              PostgreSQL 9.0.




                                                  8
Non­Overlapping Constraint
●   Let's look at existing solutions for 
     schedule conflicts
●   How do you specify a non­overlapping 
     constraint in an SQL system?
       –   Any SQL system?
●   Ideas?



                                            9
Idea 1: Serialize
●   Only one writer
       –   Exclusive lock
●   Before updating any reservation, search 
     all existing reservations for conflicts
●   Horrible performance, availability 
     problems



                                               10
Idea 2: Quantize
●   Break into time slices, e.g. 1 hour.
●   Use UNIQUE constraint on beginning
●   Imposes unnecessary business constraint
       –   Nobody can reserve 1:30pm – 2:30pm
●   Code is not reusable for other businesses
       –   Hotels reserve by day
●   Not useful when quantum is too small
       –   Security, scientific apps, audit logs, etc.
                                                         11
Idea 3: Procedural Code
●   Triggers
●   Perhaps use dummy rows that exist only 
     for row­level locks
●   Perhaps application code
●   Probably will not perform well
●   Very business­specific, not reusable
●   Error prone
●   Good luck...
                                              12
Idea 4: Delayed Check
●   Record timestamp when reservation was 
     recorded
●   Make extra process check for conflicts 
     and notify victims asynchronously
●   Unhappy customers
●   Adds uncertainty after “commit”
●   Cascading problem

                                              13
Back to the Example
●   If the constraint is not enforced by the 
       DBMS...
●   ...then it will be enforced when two 
       professors each believe they have 
       reserved the same room
●   A duel?
●   Probably a less desirable constraint 
     enforcement mechanism than a friendly 
     error from the DBMS
                                                14
Exclusion Constraints
●   New feature in 9.0
●   Not constraint_exclusion!
●   Offers constraint enforcement mechanism 
     more general than UNIQUE
●   Declarative
●   Scalable
       –   Performance comparable to UNIQUE

                                              15
Example

CREATE TABLE reservation
(
  room      TEXT,
  professor TEXT,
  during    PERIOD,
  EXCLUDE   USING gist
    (room   WITH =,
     during WITH &&)
);
                           16
Example
CREATE TABLE reservation
(
  room      TEXT,
  professor TEXT,
  during    PERIOD,
  EXCLUDE   USING gist
    (room   WITH =,
     during WITH &&)
);

Can be arbitrary expression of fields in table.
                                                  17
Example
CREATE TABLE reservation
(
  room      TEXT,
  professor TEXT,
  during    PERIOD,
  EXCLUDE   USING gist
    (room   WITH =,
     during WITH &&)
);

Exclusion operator. In this case, “overlaps”.
                                                18
Example
CREATE TABLE reservation
(
  room      TEXT,
  professor TEXT,
  during    PERIOD,
  EXCLUDE   USING gist
    (room   WITH =,
     during WITH &&)
);

Type of index to build and use for 
enforcement.                          19
That was Easy
●   3 lines
●   Scalable
●   Flexible
●   Declarative
●   Robust
●   Safe during concurrent INSERTs and 
     UPDATEs

                                          20
Operator Detects Conflicts
●   The operator is used to search for 
     conflicts
●   Should return TRUE when two values 
     conflict
●   For example, the “overlaps” operator 
     (“&&”) would be used to enforce the 
     constraint that no two tuples contain 
     overlapping values

                                              21
Back to UNIQUE
●   If you specify all operators as “=”, the 
       semantics are identical to UNIQUE
●   Performance slightly worse, because one 
     additional index search is required
●   Can be used with GiST or Hash indexes




                                                22
UNUNIQUE
●   If you specify the operator as “<>”, then 
       constraint is the opposite of UNIQUE: all 
       values must be the same!
●   Use case: At the zoo, if you've already put 
     zebras in the cage, you can put more 
     zebras in ­­ but don't put lions in.




                                                23
Multi­Column Constraints
... EXCLUDE USING gist
       (a WITH =,
        b WITH &&) ...
Tuple1 conflicts with Tuple2 if and only if:
  Tuple1.a =  Tuple2.a AND
  Tuple1.b && Tuple2.b
Otherwise, both tuples can appear in the 
 table.

                                               24
Demo



DEMO



       25
Extra Capabilities
●   Support for predicates (WHERE)
    ●   Constraint on a subset of the table
●   Support for arbitrary expressions:
        ... EXCLUDE ((t::circle)
             WITH &&) ...
●   Deferrable
●   Doesn't work with GIN, yet.


                                              26
Conclusion
●   Constraints are always enforced
●   Sometimes by the DBMS (cheap), 
     sometimes by real life (expensive)
●   The very simple, very common “schedule 
     conflict” constraint is almost impossible 
     to enforce with most DBMSs
●   Let's make it easy, scalable, and flexible.
●   “Exclusion Constraints” in 9.0!
                                                  27

More Related Content

What's hot

Optimizing Performance in Rust for Low-Latency Database Drivers
Optimizing Performance in Rust for Low-Latency Database DriversOptimizing Performance in Rust for Low-Latency Database Drivers
Optimizing Performance in Rust for Low-Latency Database DriversScyllaDB
 
How Discord Migrated Trillions of Messages from Cassandra to ScyllaDB
How Discord Migrated Trillions of Messages from Cassandra to ScyllaDBHow Discord Migrated Trillions of Messages from Cassandra to ScyllaDB
How Discord Migrated Trillions of Messages from Cassandra to ScyllaDBScyllaDB
 
世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装Ryoma Sin'ya
 
Airflow - a data flow engine
Airflow - a data flow engineAirflow - a data flow engine
Airflow - a data flow engineWalter Liu
 
Hive 3 - a new horizon
Hive 3 - a new horizonHive 3 - a new horizon
Hive 3 - a new horizonThejas Nair
 
GitLab Premium 라이선스 기능소개 - 인포그랩
GitLab Premium 라이선스 기능소개 - 인포그랩GitLab Premium 라이선스 기능소개 - 인포그랩
GitLab Premium 라이선스 기능소개 - 인포그랩InfoGrab LC
 
Python for-unix-and-linux-system-administration
Python for-unix-and-linux-system-administrationPython for-unix-and-linux-system-administration
Python for-unix-and-linux-system-administrationVictor Marcelino
 
Building a Data Pipeline using Apache Airflow (on AWS / GCP)
Building a Data Pipeline using Apache Airflow (on AWS / GCP)Building a Data Pipeline using Apache Airflow (on AWS / GCP)
Building a Data Pipeline using Apache Airflow (on AWS / GCP)Yohei Onishi
 
Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...Flink Forward
 
TensorFlow XLAの可能性
TensorFlow XLAの可能性 TensorFlow XLAの可能性
TensorFlow XLAの可能性 Mr. Vengineer
 
A quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSA quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSYoshifumi Kawai
 
Batch Processing at Scale with Flink & Iceberg
Batch Processing at Scale with Flink & IcebergBatch Processing at Scale with Flink & Iceberg
Batch Processing at Scale with Flink & IcebergFlink Forward
 
오픈소스 개발을 위한 Git 사용법 실습
오픈소스 개발을 위한 Git 사용법 실습오픈소스 개발을 위한 Git 사용법 실습
오픈소스 개발을 위한 Git 사용법 실습BJ Jang
 
Introduction to git hub
Introduction to git hubIntroduction to git hub
Introduction to git hubNaveen Pandey
 
[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on Kubernetes[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on KubernetesBruno Borges
 
Practical learnings from running thousands of Flink jobs
Practical learnings from running thousands of Flink jobsPractical learnings from running thousands of Flink jobs
Practical learnings from running thousands of Flink jobsFlink Forward
 

What's hot (20)

Apache airflow
Apache airflowApache airflow
Apache airflow
 
Optimizing Performance in Rust for Low-Latency Database Drivers
Optimizing Performance in Rust for Low-Latency Database DriversOptimizing Performance in Rust for Low-Latency Database Drivers
Optimizing Performance in Rust for Low-Latency Database Drivers
 
How Discord Migrated Trillions of Messages from Cassandra to ScyllaDB
How Discord Migrated Trillions of Messages from Cassandra to ScyllaDBHow Discord Migrated Trillions of Messages from Cassandra to ScyllaDB
How Discord Migrated Trillions of Messages from Cassandra to ScyllaDB
 
Airflow for Beginners
Airflow for BeginnersAirflow for Beginners
Airflow for Beginners
 
世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装
 
Airflow - a data flow engine
Airflow - a data flow engineAirflow - a data flow engine
Airflow - a data flow engine
 
Hive 3 - a new horizon
Hive 3 - a new horizonHive 3 - a new horizon
Hive 3 - a new horizon
 
GitLab Premium 라이선스 기능소개 - 인포그랩
GitLab Premium 라이선스 기능소개 - 인포그랩GitLab Premium 라이선스 기능소개 - 인포그랩
GitLab Premium 라이선스 기능소개 - 인포그랩
 
Python for-unix-and-linux-system-administration
Python for-unix-and-linux-system-administrationPython for-unix-and-linux-system-administration
Python for-unix-and-linux-system-administration
 
Git and Github Session
Git and Github SessionGit and Github Session
Git and Github Session
 
Building a Data Pipeline using Apache Airflow (on AWS / GCP)
Building a Data Pipeline using Apache Airflow (on AWS / GCP)Building a Data Pipeline using Apache Airflow (on AWS / GCP)
Building a Data Pipeline using Apache Airflow (on AWS / GCP)
 
Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...
 
TensorFlow XLAの可能性
TensorFlow XLAの可能性 TensorFlow XLAの可能性
TensorFlow XLAの可能性
 
Gitlab ci-cd
Gitlab ci-cdGitlab ci-cd
Gitlab ci-cd
 
A quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSA quick tour of the Cysharp OSS
A quick tour of the Cysharp OSS
 
Batch Processing at Scale with Flink & Iceberg
Batch Processing at Scale with Flink & IcebergBatch Processing at Scale with Flink & Iceberg
Batch Processing at Scale with Flink & Iceberg
 
오픈소스 개발을 위한 Git 사용법 실습
오픈소스 개발을 위한 Git 사용법 실습오픈소스 개발을 위한 Git 사용법 실습
오픈소스 개발을 위한 Git 사용법 실습
 
Introduction to git hub
Introduction to git hubIntroduction to git hub
Introduction to git hub
 
[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on Kubernetes[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on Kubernetes
 
Practical learnings from running thousands of Flink jobs
Practical learnings from running thousands of Flink jobsPractical learnings from running thousands of Flink jobs
Practical learnings from running thousands of Flink jobs
 

Viewers also liked

Oracle Sandbox
Oracle SandboxOracle Sandbox
Oracle SandboxDatavail
 
The Renaissance of Stable Value: Capital Preservation in Defined Contribution
The Renaissance of Stable Value: Capital Preservation in Defined ContributionThe Renaissance of Stable Value: Capital Preservation in Defined Contribution
The Renaissance of Stable Value: Capital Preservation in Defined ContributionCallan
 
Video 2.2 investment strategies
Video 2.2   investment strategiesVideo 2.2   investment strategies
Video 2.2 investment strategiesJim Pellerin
 
Investment strategies-to-grow-your-assets
Investment strategies-to-grow-your-assetsInvestment strategies-to-grow-your-assets
Investment strategies-to-grow-your-assetsRoger Jirves
 
The Process Of Portfolio Management
The Process Of Portfolio ManagementThe Process Of Portfolio Management
The Process Of Portfolio ManagementHitesh Kukreja
 
Investment strategies-to-grow-your-income
Investment strategies-to-grow-your-incomeInvestment strategies-to-grow-your-income
Investment strategies-to-grow-your-incomeRoger Jirves
 
Investment strategies of famous investment gurus
Investment strategies of famous investment gurusInvestment strategies of famous investment gurus
Investment strategies of famous investment gurusHarish Manchala
 
Investment alternative
Investment alternativeInvestment alternative
Investment alternativeDharmik
 
2015.01.21 ACG cup (M&A case competition)
2015.01.21 ACG cup (M&A case competition)2015.01.21 ACG cup (M&A case competition)
2015.01.21 ACG cup (M&A case competition)Allison Noel
 
ACG Cup 2nd round case competition final presentation
ACG Cup 2nd round case competition final presentationACG Cup 2nd round case competition final presentation
ACG Cup 2nd round case competition final presentationliujingyi
 
Portfolio management process
Portfolio management processPortfolio management process
Portfolio management processNagarjuna Kalluru
 
Investment meaning nature
Investment meaning natureInvestment meaning nature
Investment meaning naturereema21
 
Equality & Equity
Equality & EquityEquality & Equity
Equality & EquitySam walker
 
Project Portfolio Management
Project Portfolio ManagementProject Portfolio Management
Project Portfolio ManagementAnand Subramaniam
 
Theory of constraints
Theory of constraintsTheory of constraints
Theory of constraintsMOHD ARISH
 

Viewers also liked (19)

Microsoft SQL Server Analysis Services Multidimensional
Microsoft SQL Server Analysis Services MultidimensionalMicrosoft SQL Server Analysis Services Multidimensional
Microsoft SQL Server Analysis Services Multidimensional
 
Oracle Sandbox
Oracle SandboxOracle Sandbox
Oracle Sandbox
 
The Renaissance of Stable Value: Capital Preservation in Defined Contribution
The Renaissance of Stable Value: Capital Preservation in Defined ContributionThe Renaissance of Stable Value: Capital Preservation in Defined Contribution
The Renaissance of Stable Value: Capital Preservation in Defined Contribution
 
Video 2.2 investment strategies
Video 2.2   investment strategiesVideo 2.2   investment strategies
Video 2.2 investment strategies
 
Investment strategies-to-grow-your-assets
Investment strategies-to-grow-your-assetsInvestment strategies-to-grow-your-assets
Investment strategies-to-grow-your-assets
 
The Process Of Portfolio Management
The Process Of Portfolio ManagementThe Process Of Portfolio Management
The Process Of Portfolio Management
 
Investment strategies-to-grow-your-income
Investment strategies-to-grow-your-incomeInvestment strategies-to-grow-your-income
Investment strategies-to-grow-your-income
 
Investment strategies of famous investment gurus
Investment strategies of famous investment gurusInvestment strategies of famous investment gurus
Investment strategies of famous investment gurus
 
Investment alternative
Investment alternativeInvestment alternative
Investment alternative
 
2015.01.21 ACG cup (M&A case competition)
2015.01.21 ACG cup (M&A case competition)2015.01.21 ACG cup (M&A case competition)
2015.01.21 ACG cup (M&A case competition)
 
ACG Cup 2nd round case competition final presentation
ACG Cup 2nd round case competition final presentationACG Cup 2nd round case competition final presentation
ACG Cup 2nd round case competition final presentation
 
Portfolio management process
Portfolio management processPortfolio management process
Portfolio management process
 
investment
investmentinvestment
investment
 
Global Marketing
Global MarketingGlobal Marketing
Global Marketing
 
Investment meaning nature
Investment meaning natureInvestment meaning nature
Investment meaning nature
 
Equality & Equity
Equality & EquityEquality & Equity
Equality & Equity
 
Project Portfolio Management
Project Portfolio ManagementProject Portfolio Management
Project Portfolio Management
 
Theory of constraints
Theory of constraintsTheory of constraints
Theory of constraints
 
Types of investment
Types of investmentTypes of investment
Types of investment
 

Similar to Not Just UNIQUE: Exclusion Constraints

Not Just UNIQUE: Generalized Index Constraints
Not Just UNIQUE: Generalized Index ConstraintsNot Just UNIQUE: Generalized Index Constraints
Not Just UNIQUE: Generalized Index ConstraintsCommand Prompt., Inc
 
Concurrency - Why it's hard ?
Concurrency - Why it's hard ?Concurrency - Why it's hard ?
Concurrency - Why it's hard ?Ramith Jayasinghe
 
Modern Java Concurrency
Modern Java ConcurrencyModern Java Concurrency
Modern Java ConcurrencyBen Evans
 
Cassandra in production
Cassandra in productionCassandra in production
Cassandra in productionvalstadsve
 
Elephant grooming: quality with Hadoop
Elephant grooming: quality with HadoopElephant grooming: quality with Hadoop
Elephant grooming: quality with HadoopRoman Nikitchenko
 
Clean Code - Part 2
Clean Code - Part 2Clean Code - Part 2
Clean Code - Part 2Knoldus Inc.
 
The View - Lotusscript coding best practices
The View - Lotusscript coding best practicesThe View - Lotusscript coding best practices
The View - Lotusscript coding best practicesBill Buchan
 
Mongo nyc nyt + mongodb
Mongo nyc nyt + mongodbMongo nyc nyt + mongodb
Mongo nyc nyt + mongodbDeep Kapadia
 
(3) c sharp introduction_basics_part_ii
(3) c sharp introduction_basics_part_ii(3) c sharp introduction_basics_part_ii
(3) c sharp introduction_basics_part_iiNico Ludwig
 
TS 5341 Rethinking the ESB
TS 5341 Rethinking the ESBTS 5341 Rethinking the ESB
TS 5341 Rethinking the ESBaegloff
 
Series of Unfortunate Netflix Container Events - QConNYC17
Series of Unfortunate Netflix Container Events - QConNYC17Series of Unfortunate Netflix Container Events - QConNYC17
Series of Unfortunate Netflix Container Events - QConNYC17aspyker
 
The Future of zHeap
The Future of zHeapThe Future of zHeap
The Future of zHeapEDB
 
Benchmarks, performance, scalability, and capacity what's behind the numbers
Benchmarks, performance, scalability, and capacity what's behind the numbersBenchmarks, performance, scalability, and capacity what's behind the numbers
Benchmarks, performance, scalability, and capacity what's behind the numbersJustin Dorfman
 
Benchmarks, performance, scalability, and capacity what s behind the numbers...
Benchmarks, performance, scalability, and capacity  what s behind the numbers...Benchmarks, performance, scalability, and capacity  what s behind the numbers...
Benchmarks, performance, scalability, and capacity what s behind the numbers...james tong
 
Parallel builds in Eclipse IDE workspace
Parallel builds in Eclipse IDE workspaceParallel builds in Eclipse IDE workspace
Parallel builds in Eclipse IDE workspaceMickael Istria
 
Rules Programming tutorial
Rules Programming tutorialRules Programming tutorial
Rules Programming tutorialSrinath Perera
 

Similar to Not Just UNIQUE: Exclusion Constraints (20)

Not Just UNIQUE: Generalized Index Constraints
Not Just UNIQUE: Generalized Index ConstraintsNot Just UNIQUE: Generalized Index Constraints
Not Just UNIQUE: Generalized Index Constraints
 
Concurrency - Why it's hard ?
Concurrency - Why it's hard ?Concurrency - Why it's hard ?
Concurrency - Why it's hard ?
 
Why Concurrency is hard ?
Why Concurrency is hard ?Why Concurrency is hard ?
Why Concurrency is hard ?
 
Modern Java Concurrency
Modern Java ConcurrencyModern Java Concurrency
Modern Java Concurrency
 
Cassandra in production
Cassandra in productionCassandra in production
Cassandra in production
 
Elephant grooming: quality with Hadoop
Elephant grooming: quality with HadoopElephant grooming: quality with Hadoop
Elephant grooming: quality with Hadoop
 
Clean Code - Part 2
Clean Code - Part 2Clean Code - Part 2
Clean Code - Part 2
 
The View - Lotusscript coding best practices
The View - Lotusscript coding best practicesThe View - Lotusscript coding best practices
The View - Lotusscript coding best practices
 
Mongo nyc nyt + mongodb
Mongo nyc nyt + mongodbMongo nyc nyt + mongodb
Mongo nyc nyt + mongodb
 
(3) c sharp introduction_basics_part_ii
(3) c sharp introduction_basics_part_ii(3) c sharp introduction_basics_part_ii
(3) c sharp introduction_basics_part_ii
 
TS 5341 Rethinking the ESB
TS 5341 Rethinking the ESBTS 5341 Rethinking the ESB
TS 5341 Rethinking the ESB
 
Series of Unfortunate Netflix Container Events - QConNYC17
Series of Unfortunate Netflix Container Events - QConNYC17Series of Unfortunate Netflix Container Events - QConNYC17
Series of Unfortunate Netflix Container Events - QConNYC17
 
The Future of zHeap
The Future of zHeapThe Future of zHeap
The Future of zHeap
 
Cassandra On EC2
Cassandra On EC2Cassandra On EC2
Cassandra On EC2
 
Lect04
Lect04Lect04
Lect04
 
Benchmarks, performance, scalability, and capacity what's behind the numbers
Benchmarks, performance, scalability, and capacity what's behind the numbersBenchmarks, performance, scalability, and capacity what's behind the numbers
Benchmarks, performance, scalability, and capacity what's behind the numbers
 
Benchmarks, performance, scalability, and capacity what s behind the numbers...
Benchmarks, performance, scalability, and capacity  what s behind the numbers...Benchmarks, performance, scalability, and capacity  what s behind the numbers...
Benchmarks, performance, scalability, and capacity what s behind the numbers...
 
Parallel builds in Eclipse IDE workspace
Parallel builds in Eclipse IDE workspaceParallel builds in Eclipse IDE workspace
Parallel builds in Eclipse IDE workspace
 
Making Strongly-typed NETCONF Usable
Making Strongly-typed NETCONF UsableMaking Strongly-typed NETCONF Usable
Making Strongly-typed NETCONF Usable
 
Rules Programming tutorial
Rules Programming tutorialRules Programming tutorial
Rules Programming tutorial
 

More from Command Prompt., Inc

Howdah - An Application using Pylons, PostgreSQL, Simpycity and Exceptable
Howdah - An Application using Pylons, PostgreSQL, Simpycity and ExceptableHowdah - An Application using Pylons, PostgreSQL, Simpycity and Exceptable
Howdah - An Application using Pylons, PostgreSQL, Simpycity and ExceptableCommand Prompt., Inc
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL AdministrationCommand Prompt., Inc
 
Replication using PostgreSQL Replicator
Replication using PostgreSQL ReplicatorReplication using PostgreSQL Replicator
Replication using PostgreSQL ReplicatorCommand Prompt., Inc
 
Python utilities for data presentation
Python utilities for data presentationPython utilities for data presentation
Python utilities for data presentationCommand Prompt., Inc
 
PostgreSQL, Extensible to the Nth Degree: Functions, Languages, Types, Rules,...
PostgreSQL, Extensible to the Nth Degree: Functions, Languages, Types, Rules,...PostgreSQL, Extensible to the Nth Degree: Functions, Languages, Types, Rules,...
PostgreSQL, Extensible to the Nth Degree: Functions, Languages, Types, Rules,...Command Prompt., Inc
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLCommand Prompt., Inc
 
Implementing the Future of PostgreSQL Clustering with Tungsten
Implementing the Future of PostgreSQL Clustering with TungstenImplementing the Future of PostgreSQL Clustering with Tungsten
Implementing the Future of PostgreSQL Clustering with TungstenCommand Prompt., Inc
 
Elephant Roads: a tour of Postgres forks
Elephant Roads: a tour of Postgres forksElephant Roads: a tour of Postgres forks
Elephant Roads: a tour of Postgres forksCommand Prompt., Inc
 
configuring a warm standby, the easy way
configuring a warm standby, the easy wayconfiguring a warm standby, the easy way
configuring a warm standby, the easy wayCommand Prompt., Inc
 
Normalization: A Workshop for Everybody Pt. 2
Normalization: A Workshop for Everybody Pt. 2Normalization: A Workshop for Everybody Pt. 2
Normalization: A Workshop for Everybody Pt. 2Command Prompt., Inc
 
Normalization: A Workshop for Everybody Pt. 1
Normalization: A Workshop for Everybody Pt. 1Normalization: A Workshop for Everybody Pt. 1
Normalization: A Workshop for Everybody Pt. 1Command Prompt., Inc
 
Integrating PostGIS in Web Applications
Integrating PostGIS in Web ApplicationsIntegrating PostGIS in Web Applications
Integrating PostGIS in Web ApplicationsCommand Prompt., Inc
 

More from Command Prompt., Inc (20)

Howdah - An Application using Pylons, PostgreSQL, Simpycity and Exceptable
Howdah - An Application using Pylons, PostgreSQL, Simpycity and ExceptableHowdah - An Application using Pylons, PostgreSQL, Simpycity and Exceptable
Howdah - An Application using Pylons, PostgreSQL, Simpycity and Exceptable
 
Backup and-recovery2
Backup and-recovery2Backup and-recovery2
Backup and-recovery2
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
 
Temporal Data
Temporal DataTemporal Data
Temporal Data
 
Replication using PostgreSQL Replicator
Replication using PostgreSQL ReplicatorReplication using PostgreSQL Replicator
Replication using PostgreSQL Replicator
 
Go replicator
Go replicatorGo replicator
Go replicator
 
Pg migrator
Pg migratorPg migrator
Pg migrator
 
Python utilities for data presentation
Python utilities for data presentationPython utilities for data presentation
Python utilities for data presentation
 
PostgreSQL, Extensible to the Nth Degree: Functions, Languages, Types, Rules,...
PostgreSQL, Extensible to the Nth Degree: Functions, Languages, Types, Rules,...PostgreSQL, Extensible to the Nth Degree: Functions, Languages, Types, Rules,...
PostgreSQL, Extensible to the Nth Degree: Functions, Languages, Types, Rules,...
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQL
 
Implementing the Future of PostgreSQL Clustering with Tungsten
Implementing the Future of PostgreSQL Clustering with TungstenImplementing the Future of PostgreSQL Clustering with Tungsten
Implementing the Future of PostgreSQL Clustering with Tungsten
 
Elephant Roads: a tour of Postgres forks
Elephant Roads: a tour of Postgres forksElephant Roads: a tour of Postgres forks
Elephant Roads: a tour of Postgres forks
 
configuring a warm standby, the easy way
configuring a warm standby, the easy wayconfiguring a warm standby, the easy way
configuring a warm standby, the easy way
 
Bucardo
BucardoBucardo
Bucardo
 
Basic Query Tuning Primer
Basic Query Tuning PrimerBasic Query Tuning Primer
Basic Query Tuning Primer
 
A Practical Multi-Tenant Cluster
A Practical Multi-Tenant ClusterA Practical Multi-Tenant Cluster
A Practical Multi-Tenant Cluster
 
5 Steps to PostgreSQL Performance
5 Steps to PostgreSQL Performance5 Steps to PostgreSQL Performance
5 Steps to PostgreSQL Performance
 
Normalization: A Workshop for Everybody Pt. 2
Normalization: A Workshop for Everybody Pt. 2Normalization: A Workshop for Everybody Pt. 2
Normalization: A Workshop for Everybody Pt. 2
 
Normalization: A Workshop for Everybody Pt. 1
Normalization: A Workshop for Everybody Pt. 1Normalization: A Workshop for Everybody Pt. 1
Normalization: A Workshop for Everybody Pt. 1
 
Integrating PostGIS in Web Applications
Integrating PostGIS in Web ApplicationsIntegrating PostGIS in Web Applications
Integrating PostGIS in Web Applications
 

Not Just UNIQUE: Exclusion Constraints