From 78454c2744a9a748a096815d083528fae889b573 Mon Sep 17 00:00:00 2001 From: "Marc G. Fournier" Date: Sun, 27 Apr 1997 03:56:23 +0000 Subject: [PATCH] *shrug* --- src/test/regress/sql/datetime.sql | 149 ++++++++++++++++++++ src/test/regress/sql/destroy.sql | 285 ++++++++++++++++++++++++++++++++++++++ src/test/regress/sql/errors.sql | 275 ++++++++++++++++++++++++++++++++++++ src/test/regress/sql/timespan.sql | 43 ++++++ 4 files changed, 752 insertions(+) create mode 100644 src/test/regress/sql/datetime.sql create mode 100644 src/test/regress/sql/destroy.sql create mode 100644 src/test/regress/sql/errors.sql create mode 100644 src/test/regress/sql/timespan.sql diff --git a/src/test/regress/sql/datetime.sql b/src/test/regress/sql/datetime.sql new file mode 100644 index 0000000000..b09109496e --- /dev/null +++ b/src/test/regress/sql/datetime.sql @@ -0,0 +1,149 @@ +-- *** testing new built-in time types: datetime, timespan *** + +CREATE TABLE DATETIME_TBL( d1 datetime); + +-- Shorthand values +-- Not testable since these are not constant for regression testing. +-- So, just try to test parser and hope for the best - tgl 97/04/26 +INSERT INTO DATETIME_TBL VALUES ('current'); +INSERT INTO DATETIME_TBL VALUES ('now'); +INSERT INTO DATETIME_TBL VALUES ('today'); +INSERT INTO DATETIME_TBL VALUES ('yesterday'); +INSERT INTO DATETIME_TBL VALUES ('tomorrow'); +INSERT INTO DATETIME_TBL VALUES ('tomorrow PST'); +INSERT INTO DATETIME_TBL VALUES ('tomorrow zulu'); + +SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'today'::datetime; +SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'tomorrow'::datetime; +SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'yesterday'::datetime; +SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'today'::datetime + '1 day'::timespan; +SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'today'::datetime - '1 day'::timespan; + +INSERT INTO DATETIME_TBL VALUES ('current'); +BEGIN; +INSERT INTO DATETIME_TBL VALUES ('now'); +SELECT count(*) AS one FROM DATETIME_TBL WHERE d1 = 'now'::datetime; +END; +DELETE FROM DATETIME_TBL; + +-- Special values +INSERT INTO DATETIME_TBL VALUES ('invalid'); +INSERT INTO DATETIME_TBL VALUES ('-infinity'); +INSERT INTO DATETIME_TBL VALUES ('infinity'); +INSERT INTO DATETIME_TBL VALUES ('epoch'); + +-- Postgres v6.0 standard output format +INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01 1997 PST'); +INSERT INTO DATETIME_TBL VALUES ('Invalid Abstime'); +INSERT INTO DATETIME_TBL VALUES ('Undefined Abstime'); + +-- Variations on Postgres v6.1 standard output format +INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01.000001 1997 PST'); +INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01.999999 1997 PST'); +INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01.4 1997 PST'); +INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01.5 1997 PST'); +INSERT INTO DATETIME_TBL VALUES ('Mon Feb 10 17:32:01.6 1997 PST'); + +-- ISO 8601 format +INSERT INTO DATETIME_TBL VALUES ('1997-01-02'); +INSERT INTO DATETIME_TBL VALUES ('1997-01-02 03:04:05'); +INSERT INTO DATETIME_TBL VALUES ('1997-02-10 17:32:01-08'); +INSERT INTO DATETIME_TBL VALUES ('1997-02-10 17:32:01-0800'); +INSERT INTO DATETIME_TBL VALUES ('1997-02-10 17:32:01 -08:00'); +INSERT INTO DATETIME_TBL VALUES ('19970210 173201 -0800'); +INSERT INTO DATETIME_TBL VALUES ('1997-06-10 17:32:01 -07:00'); + +-- Variations for acceptable input formats +INSERT INTO DATETIME_TBL VALUES ('Feb 10 17:32:01 1997 -0800'); +INSERT INTO DATETIME_TBL VALUES ('Feb 10 17:32:01 1997'); +INSERT INTO DATETIME_TBL VALUES ('Feb 10 5:32PM 1997'); +INSERT INTO DATETIME_TBL VALUES ('1997/02/10 17:32:01-0800'); +INSERT INTO DATETIME_TBL VALUES ('1997-02-10 17:32:01 PST'); +INSERT INTO DATETIME_TBL VALUES ('Feb-10-1997 17:32:01 PST'); +INSERT INTO DATETIME_TBL VALUES ('02-10-1997 17:32:01 PST'); +INSERT INTO DATETIME_TBL VALUES ('19970210 173201 PST'); +INSERT INTO DATETIME_TBL VALUES ('97FEB10 5:32:01PM UTC'); +INSERT INTO DATETIME_TBL VALUES ('97/02/10 17:32:01 UTC'); +INSERT INTO DATETIME_TBL VALUES ('97.041 17:32:01 UTC'); + +-- Check date conversion and date arithmetic +INSERT INTO DATETIME_TBL VALUES ('1997-06-10 18:32:01 PDT'); + +INSERT INTO DATETIME_TBL VALUES ('Feb 10 17:32:01 1997'); +INSERT INTO DATETIME_TBL VALUES ('Feb 11 17:32:01 1997'); +INSERT INTO DATETIME_TBL VALUES ('Feb 12 17:32:01 1997'); +INSERT INTO DATETIME_TBL VALUES ('Feb 13 17:32:01 1997'); +INSERT INTO DATETIME_TBL VALUES ('Feb 14 17:32:01 1997'); +INSERT INTO DATETIME_TBL VALUES ('Feb 15 17:32:01 1997'); +INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1997'); + +INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 0097 BC'); +INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 0097'); +INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 0597'); +INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1097'); +INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1697'); +INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1797'); +INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1897'); +INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 1997'); +INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 2097'); + +INSERT INTO DATETIME_TBL VALUES ('Feb 28 17:32:01 1996'); +INSERT INTO DATETIME_TBL VALUES ('Feb 29 17:32:01 1996'); +INSERT INTO DATETIME_TBL VALUES ('Mar 01 17:32:01 1996'); +INSERT INTO DATETIME_TBL VALUES ('Dec 30 17:32:01 1996'); +INSERT INTO DATETIME_TBL VALUES ('Dec 31 17:32:01 1996'); +INSERT INTO DATETIME_TBL VALUES ('Jan 01 17:32:01 1997'); +INSERT INTO DATETIME_TBL VALUES ('Feb 28 17:32:01 1997'); +INSERT INTO DATETIME_TBL VALUES ('Feb 29 17:32:01 1997'); +INSERT INTO DATETIME_TBL VALUES ('Mar 01 17:32:01 1997'); +INSERT INTO DATETIME_TBL VALUES ('Dec 30 17:32:01 1997'); +INSERT INTO DATETIME_TBL VALUES ('Dec 31 17:32:01 1997'); +INSERT INTO DATETIME_TBL VALUES ('Dec 31 17:32:01 1999'); +INSERT INTO DATETIME_TBL VALUES ('Jan 01 17:32:01 2000'); +INSERT INTO DATETIME_TBL VALUES ('Dec 31 17:32:01 2000'); +INSERT INTO DATETIME_TBL VALUES ('Jan 01 17:32:01 2001'); + +-- Currently unsupported syntax and ranges +INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 -0097'); +INSERT INTO DATETIME_TBL VALUES ('Feb 16 17:32:01 5097 BC'); + +SELECT '' AS sixtythree, d1 FROM DATETIME_TBL; + +-- Demonstrate functions and operators +SELECT '' AS fortythree, d1 FROM DATETIME_TBL + WHERE d1 > '1997-01-02'::datetime and d1 != 'current'::datetime; + +SELECT '' AS fifteen, d1 FROM DATETIME_TBL + WHERE d1 < '1997-01-02'::datetime and d1 != 'current'::datetime; + +SELECT '' AS one, d1 FROM DATETIME_TBL + WHERE d1 = '1997-01-02'::datetime and d1 != 'current'::datetime; + +SELECT '' AS fiftyeight, d1 FROM DATETIME_TBL + WHERE d1 != '1997-01-02'::datetime and d1 != 'current'::datetime; + +SELECT '' AS sixteen, d1 FROM DATETIME_TBL + WHERE d1 <= '1997-01-02'::datetime and d1 != 'current'::datetime; + +SELECT '' AS fortyfour, d1 FROM DATETIME_TBL + WHERE d1 >= '1997-01-02'::datetime and d1 != 'current'::datetime; + +SELECT '' AS sixtythree, d1 + '1 year'::timespan AS one_year FROM DATETIME_TBL; + +SELECT '' AS sixtythree, d1 - '1 year'::timespan AS one_year FROM DATETIME_TBL; + +-- Casting within a BETWEEN qualifier should probably be allowed by the parser. - tgl 97/04/26 +--SELECT '' AS fifty, d1 - '1997-01-02'::datetime AS diff +-- FROM DATETIME_TBL WHERE d1 BETWEEN '1902-01-01'::datetime AND '2038-01-01'::datetime; +SELECT '' AS fifty, d1 - '1997-01-02'::datetime AS diff + FROM DATETIME_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01'; + +SELECT '' AS fortynine, date_part( 'year', d1) AS year, date_part( 'month', d1) AS month, + date_part( 'day', d1) AS day, date_part( 'hour', d1) AS hour, + date_part( 'minute', d1) AS minute, date_part( 'second', d1) AS second + FROM DATETIME_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01'; + +SELECT '' AS fortynine, date_part( 'quarter', d1) AS quarter, date_part( 'msec', d1) AS msec, + date_part( 'usec', d1) AS usec + FROM DATETIME_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01'; + diff --git a/src/test/regress/sql/destroy.sql b/src/test/regress/sql/destroy.sql new file mode 100644 index 0000000000..8f32eb5d8b --- /dev/null +++ b/src/test/regress/sql/destroy.sql @@ -0,0 +1,285 @@ +-- +-- destroy.source +-- +-- $Header: /cvsroot/pgsql/src/test/regress/sql/Attic/destroy.sql,v 1.1 1997/04/27 03:56:20 scrappy Exp $ +-- + +-- +-- this will fail if the user is not the postgres superuser. +-- if it does, don't worry about it (you can turn usersuper +-- back on as "postgres"). too many people don't follow +-- directions and run this as "postgres", though... +-- +UPDATE pg_user + SET usesuper = 't'::bool + WHERE usename = 'postgres'; + + +-- +-- FUNCTION REMOVAL +-- +DROP FUNCTION hobbies(person); + +DROP FUNCTION hobby_construct(text,text); + +DROP FUNCTION equipment(hobbies_r); + +DROP FUNCTION user_relns(); + +DROP FUNCTION widget_in(opaque); + +DROP FUNCTION widget_out(opaque); + +DROP FUNCTION pt_in_widget(point,widget); + +DROP FUNCTION overpaid(emp); + +DROP FUNCTION boxarea(box); + +DROP FUNCTION interpt_pp(path,path); + +DROP FUNCTION reverse_c16(char16); + + +-- +-- OPERATOR REMOVAL +-- +DROP OPERATOR ## (path, path); + +DROP OPERATOR <% (point, widget); + +-- left unary +DROP OPERATOR @#@ (none, int4); + +-- right unary +DROP OPERATOR #@# (int4, none); + +-- right unary +DROP OPERATOR #%# (int4, none); + + +-- +-- ABSTRACT DATA TYPE REMOVAL +-- +DROP TYPE city_budget; + +DROP TYPE widget; + + +-- +-- RULE REMOVAL +-- (is also tested in queries.source) +-- + +-- +-- AGGREGATE REMOVAL +-- +DROP AGGREGATE newavg; + +DROP AGGREGATE newsum; + +DROP AGGREGATE newcnt; + + +-- +-- CLASS REMOVAL +-- (inheritance hierarchies are deleted in reverse order) +-- + +-- +-- DROP ancillary data structures (i.e. indices) +-- +DROP INDEX onek_unique1; + +DROP INDEX onek_unique2; + +DROP INDEX onek_hundred; + +DROP INDEX onek_stringu1; + +DROP INDEX tenk1_unique1; + +DROP INDEX tenk1_unique2; + +DROP INDEX tenk1_hundred; + +DROP INDEX tenk2_unique1; + +DROP INDEX tenk2_unique2; + +DROP INDEX tenk2_hundred; + +-- DROP INDEX onek2_u1_prtl; + +-- DROP INDEX onek2_u2_prtl; + +-- DROP INDEX onek2_stu1_prtl; + +DROP INDEX rect2ind; + +DROP INDEX rix; + +DROP INDEX iix; + +DROP INDEX six; + +DROP INDEX hash_i4_index; + +DROP INDEX hash_c16_index; + +DROP INDEX hash_txt_index; + +DROP INDEX hash_f8_index; + +-- DROP INDEX hash_ovfl_index; + +DROP INDEX bt_i4_index; + +DROP INDEX bt_c16_index; + +DROP INDEX bt_txt_index; + +DROP INDEX bt_f8_index; + + +DROP TABLE onek; + +DROP TABLE onek2; + +DROP TABLE tenk1; + +DROP TABLE tenk2; + +DROP TABLE Bprime; + + +DROP TABLE hobbies_r; + +DROP TABLE equipment_r; + + +DROP TABLE aggtest; + +DROP TABLE xacttest; + +DROP TABLE arrtest; + +DROP TABLE iportaltest; + + +DROP TABLE f_star; + +DROP TABLE e_star; + +DROP TABLE d_star; + +DROP TABLE c_star; + +DROP TABLE b_star; + +DROP TABLE a_star; + + +-- +-- must be in reverse inheritance order +-- +DROP TABLE stud_emp; + +DROP TABLE student; + +DROP TABLE slow_emp4000; + +DROP TABLE fast_emp4000; + +DROP TABLE emp; + +DROP TABLE person; + + +DROP TABLE ramp; + +DROP TABLE real_city; + +DROP TABLE dept; + +DROP TABLE ihighway; + +DROP TABLE shighway; + +DROP TABLE road; + +DROP TABLE city; + + +DROP TABLE hash_i4_heap; + +DROP TABLE hash_c16_heap; + +DROP TABLE hash_txt_heap; + +DROP TABLE hash_f8_heap; + +-- DROP TABLE hash_ovfl_heap; + +DROP TABLE bt_i4_heap; + +DROP TABLE bt_c16_heap; + +DROP TABLE bt_txt_heap; + +DROP TABLE bt_f8_heap; + + +DROP TABLE BOOLTBL1; + +DROP TABLE BOOLTBL2; + +DROP TABLE ABSTIME_TBL; + +DROP TABLE RELTIME_TBL; + +DROP TABLE TINTERVAL_TBL; + +DROP TABLE BOX_TBL; + +DROP TABLE CHAR_TBL; + +DROP TABLE CHAR2_TBL; + +DROP TABLE CHAR4_TBL; + +DROP TABLE CHAR8_TBL; + +DROP TABLE CHAR16_TBL; + +DROP TABLE FLOAT4_TBL; + +DROP TABLE FLOAT8_TBL; + +DROP TABLE INT2_TBL; + +DROP TABLE INT4_TBL; + +DROP TABLE OID_TBL; + +DROP TABLE OIDNAME_TBL; + +DROP TABLE OIDINT2_TBL; + +DROP TABLE OIDINT4_TBL; + +DROP TABLE POINT_TBL; + +DROP TABLE POLYGON_TBL; + + +-- +-- VIRTUAL CLASS REMOVAL +-- (also tests removal of rewrite rules) +-- +DROP VIEW street; + +DROP VIEW iexit; + +DROP VIEW toyemp; + diff --git a/src/test/regress/sql/errors.sql b/src/test/regress/sql/errors.sql new file mode 100644 index 0000000000..e3a080e02a --- /dev/null +++ b/src/test/regress/sql/errors.sql @@ -0,0 +1,275 @@ +-- +-- errors.source +-- +-- $Header: /cvsroot/pgsql/src/test/regress/sql/errors.sql,v 1.1 1997/04/27 03:56:21 scrappy Exp $ + + +-- bad in postquel, but ok in postsql +select 1 + + +-- +-- UNSUPPORTED STUFF + +-- doesn't work +-- attachas nonesuch +-- +-- doesn't work +-- notify pg_class +-- + +-- +-- RETRIEVE + +-- missing relation name +select + +-- no such relation +select * from nonesuch; + +-- bad name in target list +select nonesuch from pg_database; +-- bad attribute name on lhs of operator +select * from pg_database where nonesuch = pg_database.datname; + +-- bad attribute name on rhs of operator +select * from pg_database where pg_database.datname = nonesuch; + + +-- bad select distinct on syntax, distinct attribute missing +select distinct on foobar from pg_database; + + +-- bad select distinct on syntax, distinct attribute not in target list +select distinct on foobar * from pg_database; + + +-- +-- DELETE + +-- missing relation name (this had better not wildcard!) +delete from; + +-- no such relation +delete from nonesuch; + + +-- +-- DESTROY + +-- missing relation name (this had better not wildcard!) +drop table; + +-- no such relation +drop table nonesuch; + + +-- +-- RENAME + + +-- relation renaming + +-- missing relation name +alter table rename; + +-- no such relation +alter table nonesuch rename to newnonesuch; + +-- no such relation +alter table nonesuch rename to stud_emp; + +-- system relation +alter table stud_emp rename to pg_stud_emp; + +-- conflict +alter table stud_emp rename to aggtest; + +-- self-conflict +alter table stud_emp rename to stud_emp; + + +-- attribute renaming + +-- no such relation +alter table nonesuchrel rename column nonesuchatt to newnonesuchatt; + +-- no such attribute +alter table emp rename column nonesuchatt to newnonesuchatt; + +-- conflict +alter table emp rename column salary to manager; + +-- conflict +alter table emp rename column salary to oid; + + +-- +-- TRANSACTION STUFF + +-- not in a xact +abort; + +-- not in a xact +end; + + +-- +-- DEFINE AGGREGATE + +-- left out finalfunc +create aggregate newavg1 (sfunc1 = int4pl, + basetype = int4, + stype1 = int4, + sfunc2 = int4inc, + stype2 = int4, + initcond1 = '0', + initcond2 = '0'); + +-- sfunc return type disagreement +create aggregate newavg2 (sfunc1 = int4pl, + basetype = int4, + stype1 = int4, + sfunc2 = int2inc, + stype2 = int2, + finalfunc = int4div, + initcond1 = '0', + initcond2 = '0'); + +-- sfunc/finalfunc type disagreement +create aggregate newavg3 (sfunc1 = int4pl, + basetype = int4, + stype1 = int4, + sfunc2 = int4inc, + stype2 = int4, + finalfunc = int2div, + initcond1 = '0', + initcond2 = '0'); + +-- left out basetype +create aggregate newcnt1 (sfunc2 = int4inc, + stype2 = int4, + initcond2 = '0'); + +-- left out initcond2 (for sfunc2) +create aggregate newcnt1 (sfunc2 = int4inc, + basetype = int4, + stype2 = int4); + + +-- +-- REMOVE INDEX + +-- missing index name +drop index; + +-- bad index name +drop index 314159; + +-- no such index +drop index nonesuch; + + +-- +-- REMOVE AGGREGATE + +-- missing aggregate name +drop aggregate; + +-- bad aggregate name +drop aggregate 314159; + +-- no such aggregate +drop aggregate nonesuch; + + +-- +-- REMOVE FUNCTION + +-- missing function name +drop function (); + +-- bad function name +drop function 314159(); + +-- no such function +drop function nonesuch(); + + +-- +-- REMOVE TYPE + +-- missing type name +drop type; + +-- bad type name +drop type 314159; + +-- no such type +drop type nonesuch; + + +-- +-- DROP OPERATOR + +-- missing everything +drop operator; + +-- bad operator name +drop operator equals; + +-- missing type list +drop operator ===; + +-- missing parentheses +drop operator int4, int4; + +-- missing operator name +drop operator (int4, int4); + +-- missing type list contents +drop operator === (); + +-- no such operator +drop operator === (int4); + +-- no such operator by that name +drop operator === (int4, int4); + +-- no such type1 +drop operator = (nonesuch); + +-- no such type1 +drop operator = ( , int4); + +-- no such type1 +drop operator = (nonesuch, int4); + +-- no such type2 +drop operator = (int4, nonesuch); + +-- no such type2 +drop operator = (int4, ); + + +-- +-- DROP RULE + +-- missing rule name +drop rule; + +-- bad rule name +drop rule 314159; + +-- no such rule +drop rule nonesuch; + +-- bad keyword +drop tuple rule nonesuch; + +-- no such rule +drop instance rule nonesuch; + +-- no such rule +drop rewrite rule nonesuch; + diff --git a/src/test/regress/sql/timespan.sql b/src/test/regress/sql/timespan.sql new file mode 100644 index 0000000000..32eb893d07 --- /dev/null +++ b/src/test/regress/sql/timespan.sql @@ -0,0 +1,43 @@ +CREATE TABLE TIMESPAN_TBL (f1 timespan); + +INSERT INTO TIMESPAN_TBL (f1) VALUES ('@ 1 minute'); +INSERT INTO TIMESPAN_TBL (f1) VALUES ('@ 5 hour'); +INSERT INTO TIMESPAN_TBL (f1) VALUES ('@ 10 day'); +INSERT INTO TIMESPAN_TBL (f1) VALUES ('@ 34 year'); +INSERT INTO TIMESPAN_TBL (f1) VALUES ('@ 3 months'); +INSERT INTO TIMESPAN_TBL (f1) VALUES ('@ 14 seconds ago'); +INSERT INTO TIMESPAN_TBL (f1) VALUES ('1 day 2 hours 3 minutes 4 seconds'); +INSERT INTO TIMESPAN_TBL (f1) VALUES ('6 years'); +INSERT INTO TIMESPAN_TBL (f1) VALUES ('5 months'); +INSERT INTO TIMESPAN_TBL (f1) VALUES ('5 months 12 hours'); + +-- badly formatted timespan: +INSERT INTO TIMESPAN_TBL (f1) VALUES ('badly formatted timespan'); +INSERT INTO TIMESPAN_TBL (f1) VALUES ('@ 30 eons ago'); + +-- test timespan operators + +SELECT '' AS ten, TIMESPAN_TBL.*; + +SELECT '' AS nine, TIMESPAN_TBL.* + WHERE TIMESPAN_TBL.f1 <> '@ 10 days'::timespan; + +SELECT '' AS three, TIMESPAN_TBL.* + WHERE TIMESPAN_TBL.f1 <= '@ 5 hours'::timespan; + +SELECT '' AS three, TIMESPAN_TBL.* + WHERE TIMESPAN_TBL.f1 < '@ 1 day'::timespan; + +SELECT '' AS one, TIMESPAN_TBL.* + WHERE TIMESPAN_TBL.f1 = '@ 34 years'::timespan; + +SELECT '' AS five, TIMESPAN_TBL.* + WHERE TIMESPAN_TBL.f1 >= '@ 1 month'::timespan; + +SELECT '' AS nine, TIMESPAN_TBL.* + WHERE TIMESPAN_TBL.f1 > '@ 3 seconds ago'::timespan; + +SELECT '' AS fortyfive, r1.*, r2.* + FROM TIMESPAN_TBL r1, TIMESPAN_TBL r2 + WHERE r1.f1 > r2.f1; + -- 2.11.0