Temporal Data in PostgreSQL




Scott Bailey
The Evergreen State College
PostgreSQL Conference West 2009
http://scottrbailey.wordpress.com
Agenda
✗   Provided data types
✗   Extended data types
✗   Temporal Databases
✗   What is in store for PostgreSQL
✗   Tips, tricks and questions
Thinking About Time
✗   Temporal Quiz
      ✗   How many minutes in a day?
      ✗   How many seconds in a day?
      ✗   How long does it take the Earth to complete one
           rotation?
      ✗   Actually, what is a second?
      ✗   What number should be at the top of the clock?
✗   Extremely complicated!
Basic Data Types
✗   Timestamp &Timestamp with time zone
      ✗   Granularity 1 microsecond
      ✗   Can only subtract two timestamps and
           add/subtract with intervals.
      ✗   Timestamp with out time zone is default for
            compliance with SQL specification.
      ✗   Which should you use?
✗   Date
      ✗   Granularity 1 day
      ✗   Can add/subtract dates & integers
Basic Types Cont.
✗   Interval – a duration of time
       ✗   Granularity 1 microsecond
       ✗   Add/Subtract/Multiply/Divide
✗   Time / Time with time zone
       ✗   Granularity 1 microsecond
       ✗   Acts like both time and a (small) interval
       ✗   Timezone info is useless without date
✗   Depricated types
       ✗   abstime (Unix timestamp), reltime (limited
            interval), timespan (interval), tinterval
            (period)
Period Data Type
✗   Period – defines an anchored interval or timespan
      ✗   Often what we are modeling is not an instantaneous
           event but a period over which some state is true.
      ✗   Typically implemented as a start and end timestamp.
           Could be implemented with an anchor time and an
           interval.
      ✗   Theory has been around for a while.
      ✗   Current implementations – PgTemporal, Chronos
      ✗   Write down a period representing today.
      ✗   Can be open or closed intervals but are typically half-
           open.
      ✗   [ ] indicates endpoints are contained () not contained.
Period Data Type
✗   Why a half open interval?
✗   Period functions
      ✗   Positional
             ✗   before(), after(), adjacent(), overlaps(), overleft(), over-
                  right(), starts(), ends()
      ✗   Containment
             ✗   contains(), contained_by()
      ✗   Manipulation
             ✗   shift(), grow(), shrink()
      ✗   Set functions – periods are contiguous sets
             ✗   period_union(), period_intersect(), period_minus(),
                  period_exclude()
Period Issues
✗   When one end point is unknown
       ✗   Since – period(timestamp, NULL)
       ✗   Until – period(NULL, timestamp) not as common
       ✗   Hard to do much with infinity.
✗   Referential integrity
       ✗   Primary keys – exclusion, can't be two places at
            once.
       ✗   Foreign keys – containment, lifetime of child item
            must be contained by parent's lifetime.
Non-contiguous Time Sets
✗   Why would we need non-contiguous sets?
✗   Set functions for periods can be applied to
    arrays of periods!
✗   Now we can solve (pretty easily) in SQL what
    would have taken LOTS of procedural code.
✗   Period Arrays vs Non-Contiguous Sets
           Period Array




              NCS
Bitemporal Data
✗   “Temporal Database” vs temporal data
      ✗   Both Valid Time (VT) and Transaction Time (TT).
✗   Valid Time – A period for which a fact is true.
      ✗   Employee X was in position Y from A to B.
      ✗   Store not just the current fact but a historical record.
✗   Transaction Time – Records the time a row was
    inserted and superseded
      ✗   Provides time travel or temporal rollback.
      ✗   Very much like the MVCC approach in PostgreSQL.
      ✗   Logging transaction ids with timestamp would let us
           map xmin & xmax to times.
Current Implementations
✗   Lots of theory out there, very few actual
    implementations.
✗   Oracle – Currently the best implementation in a
    general purpose database.
      ✗   Workspace Manager – version enable tables
             ✗   Automatically renames table, adds versioning
                  metadata (VT), creates view w/ original table name,
                  and defines INSTEAD OF triggers for DML.
             ✗   Handles temporal constraints.
             ✗   Provides a period data type and a subset of the
                  functions provided in pgTemporal, Chronos.
             ✗   Great implementation but solves only a single problem
                  domain and does not allow you to reuse them.
The Future for PostgreSQL
✗   Version 8.5
      ✗   Temporal keys and constraints
      ✗   Changes to the type system
      ✗   Period data type either added to core or as a
           contrib module!
✗   Version 8.6?
      ✗   Full support for periods, NCS, table versioning and
           time travel!
      ✗   Hands down the most complete temporal
           implementation of ANY general purpose
           database.
Additional Resources
✗   TSQL2 Specification -
    http://www.cs.arizona.edu/~rts/tsql2.html

✗   Developing Time-Oriented Database
    Applications – Snodgrass
    http://www.cs.arizona.edu/~rts/tdbbook.pdf

✗   Temporal Data and the Relational Model – Date,
    Darwen, Lorentzos
    http://books.google.com/books?isbn=1558608559

✗   TimeDB – For Oracle and IBM Cloudscape
    http://www.timeconsult.com/Software/Software.html

✗   Oracle Workspace Manager -
    http://www.oracle.com/technology/products/database/workspace_manager/index.html

Temporal Data

  • 1.
    Temporal Data inPostgreSQL Scott Bailey The Evergreen State College PostgreSQL Conference West 2009 http://scottrbailey.wordpress.com
  • 2.
    Agenda ✗ Provided data types ✗ Extended data types ✗ Temporal Databases ✗ What is in store for PostgreSQL ✗ Tips, tricks and questions
  • 3.
    Thinking About Time ✗ Temporal Quiz ✗ How many minutes in a day? ✗ How many seconds in a day? ✗ How long does it take the Earth to complete one rotation? ✗ Actually, what is a second? ✗ What number should be at the top of the clock? ✗ Extremely complicated!
  • 4.
    Basic Data Types ✗ Timestamp &Timestamp with time zone ✗ Granularity 1 microsecond ✗ Can only subtract two timestamps and add/subtract with intervals. ✗ Timestamp with out time zone is default for compliance with SQL specification. ✗ Which should you use? ✗ Date ✗ Granularity 1 day ✗ Can add/subtract dates & integers
  • 5.
    Basic Types Cont. ✗ Interval – a duration of time ✗ Granularity 1 microsecond ✗ Add/Subtract/Multiply/Divide ✗ Time / Time with time zone ✗ Granularity 1 microsecond ✗ Acts like both time and a (small) interval ✗ Timezone info is useless without date ✗ Depricated types ✗ abstime (Unix timestamp), reltime (limited interval), timespan (interval), tinterval (period)
  • 6.
    Period Data Type ✗ Period – defines an anchored interval or timespan ✗ Often what we are modeling is not an instantaneous event but a period over which some state is true. ✗ Typically implemented as a start and end timestamp. Could be implemented with an anchor time and an interval. ✗ Theory has been around for a while. ✗ Current implementations – PgTemporal, Chronos ✗ Write down a period representing today. ✗ Can be open or closed intervals but are typically half- open. ✗ [ ] indicates endpoints are contained () not contained.
  • 7.
    Period Data Type ✗ Why a half open interval? ✗ Period functions ✗ Positional ✗ before(), after(), adjacent(), overlaps(), overleft(), over- right(), starts(), ends() ✗ Containment ✗ contains(), contained_by() ✗ Manipulation ✗ shift(), grow(), shrink() ✗ Set functions – periods are contiguous sets ✗ period_union(), period_intersect(), period_minus(), period_exclude()
  • 8.
    Period Issues ✗ When one end point is unknown ✗ Since – period(timestamp, NULL) ✗ Until – period(NULL, timestamp) not as common ✗ Hard to do much with infinity. ✗ Referential integrity ✗ Primary keys – exclusion, can't be two places at once. ✗ Foreign keys – containment, lifetime of child item must be contained by parent's lifetime.
  • 9.
    Non-contiguous Time Sets ✗ Why would we need non-contiguous sets? ✗ Set functions for periods can be applied to arrays of periods! ✗ Now we can solve (pretty easily) in SQL what would have taken LOTS of procedural code. ✗ Period Arrays vs Non-Contiguous Sets Period Array NCS
  • 10.
    Bitemporal Data ✗ “Temporal Database” vs temporal data ✗ Both Valid Time (VT) and Transaction Time (TT). ✗ Valid Time – A period for which a fact is true. ✗ Employee X was in position Y from A to B. ✗ Store not just the current fact but a historical record. ✗ Transaction Time – Records the time a row was inserted and superseded ✗ Provides time travel or temporal rollback. ✗ Very much like the MVCC approach in PostgreSQL. ✗ Logging transaction ids with timestamp would let us map xmin & xmax to times.
  • 11.
    Current Implementations ✗ Lots of theory out there, very few actual implementations. ✗ Oracle – Currently the best implementation in a general purpose database. ✗ Workspace Manager – version enable tables ✗ Automatically renames table, adds versioning metadata (VT), creates view w/ original table name, and defines INSTEAD OF triggers for DML. ✗ Handles temporal constraints. ✗ Provides a period data type and a subset of the functions provided in pgTemporal, Chronos. ✗ Great implementation but solves only a single problem domain and does not allow you to reuse them.
  • 12.
    The Future forPostgreSQL ✗ Version 8.5 ✗ Temporal keys and constraints ✗ Changes to the type system ✗ Period data type either added to core or as a contrib module! ✗ Version 8.6? ✗ Full support for periods, NCS, table versioning and time travel! ✗ Hands down the most complete temporal implementation of ANY general purpose database.
  • 13.
    Additional Resources ✗ TSQL2 Specification - http://www.cs.arizona.edu/~rts/tsql2.html ✗ Developing Time-Oriented Database Applications – Snodgrass http://www.cs.arizona.edu/~rts/tdbbook.pdf ✗ Temporal Data and the Relational Model – Date, Darwen, Lorentzos http://books.google.com/books?isbn=1558608559 ✗ TimeDB – For Oracle and IBM Cloudscape http://www.timeconsult.com/Software/Software.html ✗ Oracle Workspace Manager - http://www.oracle.com/technology/products/database/workspace_manager/index.html