mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	That allows to run those tests against a postmaster listening on a nonstandard port without requiring to export PGPORT in postmaster's environment. This still doesn't support connecting to a nondefault host without configuring it in postmaster's environment. That's harder and less frequently used though. So this is a useful step.
		
			
				
	
	
		
			3073 lines
		
	
	
		
			173 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			3073 lines
		
	
	
		
			173 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| -- ===================================================================
 | |
| -- create FDW objects
 | |
| -- ===================================================================
 | |
| CREATE EXTENSION postgres_fdw;
 | |
| CREATE SERVER testserver1 FOREIGN DATA WRAPPER postgres_fdw;
 | |
| DO $d$
 | |
|     BEGIN
 | |
|         EXECUTE $$CREATE SERVER loopback FOREIGN DATA WRAPPER postgres_fdw
 | |
|             OPTIONS (dbname '$$||current_database()||$$',
 | |
|                      port '$$||current_setting('port')||$$'
 | |
|             )$$;
 | |
|     END;
 | |
| $d$;
 | |
| CREATE USER MAPPING FOR public SERVER testserver1
 | |
| 	OPTIONS (user 'value', password 'value');
 | |
| CREATE USER MAPPING FOR CURRENT_USER SERVER loopback;
 | |
| -- ===================================================================
 | |
| -- create objects used through FDW loopback server
 | |
| -- ===================================================================
 | |
| CREATE TYPE user_enum AS ENUM ('foo', 'bar', 'buz');
 | |
| CREATE SCHEMA "S 1";
 | |
| CREATE TABLE "S 1"."T 1" (
 | |
| 	"C 1" int NOT NULL,
 | |
| 	c2 int NOT NULL,
 | |
| 	c3 text,
 | |
| 	c4 timestamptz,
 | |
| 	c5 timestamp,
 | |
| 	c6 varchar(10),
 | |
| 	c7 char(10),
 | |
| 	c8 user_enum,
 | |
| 	CONSTRAINT t1_pkey PRIMARY KEY ("C 1")
 | |
| );
 | |
| CREATE TABLE "S 1"."T 2" (
 | |
| 	c1 int NOT NULL,
 | |
| 	c2 text,
 | |
| 	CONSTRAINT t2_pkey PRIMARY KEY (c1)
 | |
| );
 | |
| INSERT INTO "S 1"."T 1"
 | |
| 	SELECT id,
 | |
| 	       id % 10,
 | |
| 	       to_char(id, 'FM00000'),
 | |
| 	       '1970-01-01'::timestamptz + ((id % 100) || ' days')::interval,
 | |
| 	       '1970-01-01'::timestamp + ((id % 100) || ' days')::interval,
 | |
| 	       id % 10,
 | |
| 	       id % 10,
 | |
| 	       'foo'::user_enum
 | |
| 	FROM generate_series(1, 1000) id;
 | |
| INSERT INTO "S 1"."T 2"
 | |
| 	SELECT id,
 | |
| 	       'AAA' || to_char(id, 'FM000')
 | |
| 	FROM generate_series(1, 100) id;
 | |
| ANALYZE "S 1"."T 1";
 | |
| ANALYZE "S 1"."T 2";
 | |
| -- ===================================================================
 | |
| -- create foreign tables
 | |
| -- ===================================================================
 | |
| CREATE FOREIGN TABLE ft1 (
 | |
| 	c0 int,
 | |
| 	c1 int NOT NULL,
 | |
| 	c2 int NOT NULL,
 | |
| 	c3 text,
 | |
| 	c4 timestamptz,
 | |
| 	c5 timestamp,
 | |
| 	c6 varchar(10),
 | |
| 	c7 char(10) default 'ft1',
 | |
| 	c8 user_enum
 | |
| ) SERVER loopback;
 | |
| ALTER FOREIGN TABLE ft1 DROP COLUMN c0;
 | |
| CREATE FOREIGN TABLE ft2 (
 | |
| 	c1 int NOT NULL,
 | |
| 	c2 int NOT NULL,
 | |
| 	cx int,
 | |
| 	c3 text,
 | |
| 	c4 timestamptz,
 | |
| 	c5 timestamp,
 | |
| 	c6 varchar(10),
 | |
| 	c7 char(10) default 'ft2',
 | |
| 	c8 user_enum
 | |
| ) SERVER loopback;
 | |
| ALTER FOREIGN TABLE ft2 DROP COLUMN cx;
 | |
| -- ===================================================================
 | |
| -- tests for validator
 | |
| -- ===================================================================
 | |
| -- requiressl, krbsrvname and gsslib are omitted because they depend on
 | |
| -- configure options
 | |
| ALTER SERVER testserver1 OPTIONS (
 | |
| 	use_remote_estimate 'false',
 | |
| 	updatable 'true',
 | |
| 	fdw_startup_cost '123.456',
 | |
| 	fdw_tuple_cost '0.123',
 | |
| 	service 'value',
 | |
| 	connect_timeout 'value',
 | |
| 	dbname 'value',
 | |
| 	host 'value',
 | |
| 	hostaddr 'value',
 | |
| 	port 'value',
 | |
| 	--client_encoding 'value',
 | |
| 	application_name 'value',
 | |
| 	--fallback_application_name 'value',
 | |
| 	keepalives 'value',
 | |
| 	keepalives_idle 'value',
 | |
| 	keepalives_interval 'value',
 | |
| 	-- requiressl 'value',
 | |
| 	sslcompression 'value',
 | |
| 	sslmode 'value',
 | |
| 	sslcert 'value',
 | |
| 	sslkey 'value',
 | |
| 	sslrootcert 'value',
 | |
| 	sslcrl 'value'
 | |
| 	--requirepeer 'value',
 | |
| 	-- krbsrvname 'value',
 | |
| 	-- gsslib 'value',
 | |
| 	--replication 'value'
 | |
| );
 | |
| ALTER USER MAPPING FOR public SERVER testserver1
 | |
| 	OPTIONS (DROP user, DROP password);
 | |
| ALTER FOREIGN TABLE ft1 OPTIONS (schema_name 'S 1', table_name 'T 1');
 | |
| ALTER FOREIGN TABLE ft2 OPTIONS (schema_name 'S 1', table_name 'T 1');
 | |
| ALTER FOREIGN TABLE ft1 ALTER COLUMN c1 OPTIONS (column_name 'C 1');
 | |
| ALTER FOREIGN TABLE ft2 ALTER COLUMN c1 OPTIONS (column_name 'C 1');
 | |
| \det+
 | |
|                              List of foreign tables
 | |
|  Schema | Table |  Server  |              FDW Options              | Description 
 | |
| --------+-------+----------+---------------------------------------+-------------
 | |
|  public | ft1   | loopback | (schema_name 'S 1', table_name 'T 1') | 
 | |
|  public | ft2   | loopback | (schema_name 'S 1', table_name 'T 1') | 
 | |
| (2 rows)
 | |
| 
 | |
| -- Now we should be able to run ANALYZE.
 | |
| -- To exercise multiple code paths, we use local stats on ft1
 | |
| -- and remote-estimate mode on ft2.
 | |
| ANALYZE ft1;
 | |
| ALTER FOREIGN TABLE ft2 OPTIONS (use_remote_estimate 'true');
 | |
| -- ===================================================================
 | |
| -- simple queries
 | |
| -- ===================================================================
 | |
| -- single table, with/without alias
 | |
| EXPLAIN (COSTS false) SELECT * FROM ft1 ORDER BY c3, c1 OFFSET 100 LIMIT 10;
 | |
|            QUERY PLAN            
 | |
| ---------------------------------
 | |
|  Limit
 | |
|    ->  Sort
 | |
|          Sort Key: c3, c1
 | |
|          ->  Foreign Scan on ft1
 | |
| (4 rows)
 | |
| 
 | |
| SELECT * FROM ft1 ORDER BY c3, c1 OFFSET 100 LIMIT 10;
 | |
|  c1  | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| -----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|  101 |  1 | 00101 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1  | 1          | foo
 | |
|  102 |  2 | 00102 | Sat Jan 03 00:00:00 1970 PST | Sat Jan 03 00:00:00 1970 | 2  | 2          | foo
 | |
|  103 |  3 | 00103 | Sun Jan 04 00:00:00 1970 PST | Sun Jan 04 00:00:00 1970 | 3  | 3          | foo
 | |
|  104 |  4 | 00104 | Mon Jan 05 00:00:00 1970 PST | Mon Jan 05 00:00:00 1970 | 4  | 4          | foo
 | |
|  105 |  5 | 00105 | Tue Jan 06 00:00:00 1970 PST | Tue Jan 06 00:00:00 1970 | 5  | 5          | foo
 | |
|  106 |  6 | 00106 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  107 |  7 | 00107 | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7  | 7          | foo
 | |
|  108 |  8 | 00108 | Fri Jan 09 00:00:00 1970 PST | Fri Jan 09 00:00:00 1970 | 8  | 8          | foo
 | |
|  109 |  9 | 00109 | Sat Jan 10 00:00:00 1970 PST | Sat Jan 10 00:00:00 1970 | 9  | 9          | foo
 | |
|  110 |  0 | 00110 | Sun Jan 11 00:00:00 1970 PST | Sun Jan 11 00:00:00 1970 | 0  | 0          | foo
 | |
| (10 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;
 | |
|                                      QUERY PLAN                                      
 | |
| -------------------------------------------------------------------------------------
 | |
|  Limit
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    ->  Sort
 | |
|          Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|          Sort Key: t1.c3, t1.c1
 | |
|          ->  Foreign Scan on public.ft1 t1
 | |
|                Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|                Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1"
 | |
| (8 rows)
 | |
| 
 | |
| SELECT * FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;
 | |
|  c1  | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| -----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|  101 |  1 | 00101 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1  | 1          | foo
 | |
|  102 |  2 | 00102 | Sat Jan 03 00:00:00 1970 PST | Sat Jan 03 00:00:00 1970 | 2  | 2          | foo
 | |
|  103 |  3 | 00103 | Sun Jan 04 00:00:00 1970 PST | Sun Jan 04 00:00:00 1970 | 3  | 3          | foo
 | |
|  104 |  4 | 00104 | Mon Jan 05 00:00:00 1970 PST | Mon Jan 05 00:00:00 1970 | 4  | 4          | foo
 | |
|  105 |  5 | 00105 | Tue Jan 06 00:00:00 1970 PST | Tue Jan 06 00:00:00 1970 | 5  | 5          | foo
 | |
|  106 |  6 | 00106 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  107 |  7 | 00107 | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7  | 7          | foo
 | |
|  108 |  8 | 00108 | Fri Jan 09 00:00:00 1970 PST | Fri Jan 09 00:00:00 1970 | 8  | 8          | foo
 | |
|  109 |  9 | 00109 | Sat Jan 10 00:00:00 1970 PST | Sat Jan 10 00:00:00 1970 | 9  | 9          | foo
 | |
|  110 |  0 | 00110 | Sun Jan 11 00:00:00 1970 PST | Sun Jan 11 00:00:00 1970 | 0  | 0          | foo
 | |
| (10 rows)
 | |
| 
 | |
| -- whole-row reference
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT t1 FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;
 | |
|                                      QUERY PLAN                                      
 | |
| -------------------------------------------------------------------------------------
 | |
|  Limit
 | |
|    Output: t1.*, c3, c1
 | |
|    ->  Sort
 | |
|          Output: t1.*, c3, c1
 | |
|          Sort Key: t1.c3, t1.c1
 | |
|          ->  Foreign Scan on public.ft1 t1
 | |
|                Output: t1.*, c3, c1
 | |
|                Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1"
 | |
| (8 rows)
 | |
| 
 | |
| SELECT t1 FROM ft1 t1 ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;
 | |
|                                              t1                                             
 | |
| --------------------------------------------------------------------------------------------
 | |
|  (101,1,00101,"Fri Jan 02 00:00:00 1970 PST","Fri Jan 02 00:00:00 1970",1,"1         ",foo)
 | |
|  (102,2,00102,"Sat Jan 03 00:00:00 1970 PST","Sat Jan 03 00:00:00 1970",2,"2         ",foo)
 | |
|  (103,3,00103,"Sun Jan 04 00:00:00 1970 PST","Sun Jan 04 00:00:00 1970",3,"3         ",foo)
 | |
|  (104,4,00104,"Mon Jan 05 00:00:00 1970 PST","Mon Jan 05 00:00:00 1970",4,"4         ",foo)
 | |
|  (105,5,00105,"Tue Jan 06 00:00:00 1970 PST","Tue Jan 06 00:00:00 1970",5,"5         ",foo)
 | |
|  (106,6,00106,"Wed Jan 07 00:00:00 1970 PST","Wed Jan 07 00:00:00 1970",6,"6         ",foo)
 | |
|  (107,7,00107,"Thu Jan 08 00:00:00 1970 PST","Thu Jan 08 00:00:00 1970",7,"7         ",foo)
 | |
|  (108,8,00108,"Fri Jan 09 00:00:00 1970 PST","Fri Jan 09 00:00:00 1970",8,"8         ",foo)
 | |
|  (109,9,00109,"Sat Jan 10 00:00:00 1970 PST","Sat Jan 10 00:00:00 1970",9,"9         ",foo)
 | |
|  (110,0,00110,"Sun Jan 11 00:00:00 1970 PST","Sun Jan 11 00:00:00 1970",0,"0         ",foo)
 | |
| (10 rows)
 | |
| 
 | |
| -- empty result
 | |
| SELECT * FROM ft1 WHERE false;
 | |
|  c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 
 | |
| ----+----+----+----+----+----+----+----
 | |
| (0 rows)
 | |
| 
 | |
| -- with WHERE clause
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE t1.c1 = 101 AND t1.c6 = '1' AND t1.c7 >= '1';
 | |
|                                                                    QUERY PLAN                                                                   
 | |
| ------------------------------------------------------------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE ((c7 >= '1'::bpchar)) AND (("C 1" = 101)) AND ((c6 = '1'::text))
 | |
| (3 rows)
 | |
| 
 | |
| SELECT * FROM ft1 t1 WHERE t1.c1 = 101 AND t1.c6 = '1' AND t1.c7 >= '1';
 | |
|  c1  | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| -----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|  101 |  1 | 00101 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1  | 1          | foo
 | |
| (1 row)
 | |
| 
 | |
| -- aggregate
 | |
| SELECT COUNT(*) FROM ft1 t1;
 | |
|  count 
 | |
| -------
 | |
|   1000
 | |
| (1 row)
 | |
| 
 | |
| -- join two tables
 | |
| SELECT t1.c1 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) ORDER BY t1.c3, t1.c1 OFFSET 100 LIMIT 10;
 | |
|  c1  
 | |
| -----
 | |
|  101
 | |
|  102
 | |
|  103
 | |
|  104
 | |
|  105
 | |
|  106
 | |
|  107
 | |
|  108
 | |
|  109
 | |
|  110
 | |
| (10 rows)
 | |
| 
 | |
| -- subquery
 | |
| SELECT * FROM ft1 t1 WHERE t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 <= 10) ORDER BY c1;
 | |
|  c1 | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| ----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|   1 |  1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1  | 1          | foo
 | |
|   2 |  2 | 00002 | Sat Jan 03 00:00:00 1970 PST | Sat Jan 03 00:00:00 1970 | 2  | 2          | foo
 | |
|   3 |  3 | 00003 | Sun Jan 04 00:00:00 1970 PST | Sun Jan 04 00:00:00 1970 | 3  | 3          | foo
 | |
|   4 |  4 | 00004 | Mon Jan 05 00:00:00 1970 PST | Mon Jan 05 00:00:00 1970 | 4  | 4          | foo
 | |
|   5 |  5 | 00005 | Tue Jan 06 00:00:00 1970 PST | Tue Jan 06 00:00:00 1970 | 5  | 5          | foo
 | |
|   6 |  6 | 00006 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo
 | |
|   7 |  7 | 00007 | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   8 |  8 | 00008 | Fri Jan 09 00:00:00 1970 PST | Fri Jan 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   9 |  9 | 00009 | Sat Jan 10 00:00:00 1970 PST | Sat Jan 10 00:00:00 1970 | 9  | 9          | foo
 | |
|  10 |  0 | 00010 | Sun Jan 11 00:00:00 1970 PST | Sun Jan 11 00:00:00 1970 | 0  | 0          | foo
 | |
| (10 rows)
 | |
| 
 | |
| -- subquery+MAX
 | |
| SELECT * FROM ft1 t1 WHERE t1.c3 = (SELECT MAX(c3) FROM ft2 t2) ORDER BY c1;
 | |
|   c1  | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| ------+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|  1000 |  0 | 01000 | Thu Jan 01 00:00:00 1970 PST | Thu Jan 01 00:00:00 1970 | 0  | 0          | foo
 | |
| (1 row)
 | |
| 
 | |
| -- used in CTE
 | |
| WITH t1 AS (SELECT * FROM ft1 WHERE c1 <= 10) SELECT t2.c1, t2.c2, t2.c3, t2.c4 FROM t1, ft2 t2 WHERE t1.c1 = t2.c1 ORDER BY t1.c1;
 | |
|  c1 | c2 |  c3   |              c4              
 | |
| ----+----+-------+------------------------------
 | |
|   1 |  1 | 00001 | Fri Jan 02 00:00:00 1970 PST
 | |
|   2 |  2 | 00002 | Sat Jan 03 00:00:00 1970 PST
 | |
|   3 |  3 | 00003 | Sun Jan 04 00:00:00 1970 PST
 | |
|   4 |  4 | 00004 | Mon Jan 05 00:00:00 1970 PST
 | |
|   5 |  5 | 00005 | Tue Jan 06 00:00:00 1970 PST
 | |
|   6 |  6 | 00006 | Wed Jan 07 00:00:00 1970 PST
 | |
|   7 |  7 | 00007 | Thu Jan 08 00:00:00 1970 PST
 | |
|   8 |  8 | 00008 | Fri Jan 09 00:00:00 1970 PST
 | |
|   9 |  9 | 00009 | Sat Jan 10 00:00:00 1970 PST
 | |
|  10 |  0 | 00010 | Sun Jan 11 00:00:00 1970 PST
 | |
| (10 rows)
 | |
| 
 | |
| -- fixed values
 | |
| SELECT 'fixed', NULL FROM ft1 t1 WHERE c1 = 1;
 | |
|  ?column? | ?column? 
 | |
| ----------+----------
 | |
|  fixed    | 
 | |
| (1 row)
 | |
| 
 | |
| -- user-defined operator/function
 | |
| CREATE FUNCTION postgres_fdw_abs(int) RETURNS int AS $$
 | |
| BEGIN
 | |
| RETURN abs($1);
 | |
| END
 | |
| $$ LANGUAGE plpgsql IMMUTABLE;
 | |
| CREATE OPERATOR === (
 | |
|     LEFTARG = int,
 | |
|     RIGHTARG = int,
 | |
|     PROCEDURE = int4eq,
 | |
|     COMMUTATOR = ===,
 | |
|     NEGATOR = !==
 | |
| );
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE t1.c1 = postgres_fdw_abs(t1.c2);
 | |
|                                QUERY PLAN                                
 | |
| -------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Filter: (t1.c1 = postgres_fdw_abs(t1.c2))
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1"
 | |
| (4 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2;
 | |
|                                QUERY PLAN                                
 | |
| -------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Filter: (t1.c1 === t1.c2)
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1"
 | |
| (4 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE t1.c1 = abs(t1.c2);
 | |
|                                             QUERY PLAN                                             
 | |
| ---------------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = abs(c2)))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE t1.c1 = t1.c2;
 | |
|                                           QUERY PLAN                                          
 | |
| ----------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = c2))
 | |
| (3 rows)
 | |
| 
 | |
| -- ===================================================================
 | |
| -- WHERE with remotely-executable conditions
 | |
| -- ===================================================================
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE t1.c1 = 1;         -- Var, OpExpr(b), Const
 | |
|                                          QUERY PLAN                                          
 | |
| ---------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = 1))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE t1.c1 = 100 AND t1.c2 = 0; -- BoolExpr
 | |
|                                                   QUERY PLAN                                                  
 | |
| --------------------------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = 100)) AND ((c2 = 0))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE c1 IS NULL;        -- NullTest
 | |
|                                            QUERY PLAN                                            
 | |
| -------------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" IS NULL))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE c1 IS NOT NULL;    -- NullTest
 | |
|                                              QUERY PLAN                                              
 | |
| -----------------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" IS NOT NULL))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE round(abs(c1), 0) = 1; -- FuncExpr
 | |
|                                                      QUERY PLAN                                                      
 | |
| ---------------------------------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE ((round(abs("C 1"), 0) = 1::numeric))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE c1 = -c1;          -- OpExpr(l)
 | |
|                                              QUERY PLAN                                              
 | |
| -----------------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = (- "C 1")))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE 1 = c1!;           -- OpExpr(r)
 | |
|                                                 QUERY PLAN                                                
 | |
| ----------------------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE ((1::numeric = ("C 1" !)))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE (c1 IS NOT NULL) IS DISTINCT FROM (c1 IS NOT NULL); -- DistinctExpr
 | |
|                                                                  QUERY PLAN                                                                 
 | |
| --------------------------------------------------------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE ((("C 1" IS NOT NULL) IS DISTINCT FROM ("C 1" IS NOT NULL)))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE c1 = ANY(ARRAY[c2, 1, c1 + 0]); -- ScalarArrayOpExpr
 | |
|                                                         QUERY PLAN                                                         
 | |
| ---------------------------------------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = ANY (ARRAY[c2, 1, ("C 1" + 0)])))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE c1 = (ARRAY[c1,c2,3])[1]; -- ArrayRef
 | |
|                                                       QUERY PLAN                                                      
 | |
| ----------------------------------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = ((ARRAY["C 1", c2, 3])[1])))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE c6 = E'foo''s\\bar';  -- check special chars
 | |
|                                                  QUERY PLAN                                                  
 | |
| -------------------------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE ((c6 = E'foo''s\\bar'::text))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) SELECT * FROM ft1 t1 WHERE c8 = 'foo';  -- can't be sent to remote
 | |
|                                QUERY PLAN                                
 | |
| -------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Filter: (t1.c8 = 'foo'::user_enum)
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1"
 | |
| (4 rows)
 | |
| 
 | |
| -- parameterized remote path
 | |
| EXPLAIN (VERBOSE, COSTS false)
 | |
|   SELECT * FROM ft2 a, ft2 b WHERE a.c1 = 47 AND b.c1 = a.c2;
 | |
|                                                  QUERY PLAN                                                  
 | |
| -------------------------------------------------------------------------------------------------------------
 | |
|  Nested Loop
 | |
|    Output: a.c1, a.c2, a.c3, a.c4, a.c5, a.c6, a.c7, a.c8, b.c1, b.c2, b.c3, b.c4, b.c5, b.c6, b.c7, b.c8
 | |
|    ->  Foreign Scan on public.ft2 a
 | |
|          Output: a.c1, a.c2, a.c3, a.c4, a.c5, a.c6, a.c7, a.c8
 | |
|          Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = 47))
 | |
|    ->  Foreign Scan on public.ft2 b
 | |
|          Output: b.c1, b.c2, b.c3, b.c4, b.c5, b.c6, b.c7, b.c8
 | |
|          Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (($1::integer = "C 1"))
 | |
| (8 rows)
 | |
| 
 | |
| SELECT * FROM ft2 a, ft2 b WHERE a.c1 = 47 AND b.c1 = a.c2;
 | |
|  c1 | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  | c1 | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| ----+----+-------+------------------------------+--------------------------+----+------------+-----+----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|  47 |  7 | 00047 | Tue Feb 17 00:00:00 1970 PST | Tue Feb 17 00:00:00 1970 | 7  | 7          | foo |  7 |  7 | 00007 | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7  | 7          | foo
 | |
| (1 row)
 | |
| 
 | |
| -- check both safe and unsafe join conditions
 | |
| EXPLAIN (VERBOSE, COSTS false)
 | |
|   SELECT * FROM ft2 a, ft2 b
 | |
|   WHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7);
 | |
|                                                  QUERY PLAN                                                  
 | |
| -------------------------------------------------------------------------------------------------------------
 | |
|  Nested Loop
 | |
|    Output: a.c1, a.c2, a.c3, a.c4, a.c5, a.c6, a.c7, a.c8, b.c1, b.c2, b.c3, b.c4, b.c5, b.c6, b.c7, b.c8
 | |
|    ->  Foreign Scan on public.ft2 a
 | |
|          Output: a.c1, a.c2, a.c3, a.c4, a.c5, a.c6, a.c7, a.c8
 | |
|          Filter: (a.c8 = 'foo'::user_enum)
 | |
|          Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE ((c2 = 6))
 | |
|    ->  Foreign Scan on public.ft2 b
 | |
|          Output: b.c1, b.c2, b.c3, b.c4, b.c5, b.c6, b.c7, b.c8
 | |
|          Filter: (upper((a.c7)::text) = (b.c7)::text)
 | |
|          Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (($1::integer = "C 1"))
 | |
| (10 rows)
 | |
| 
 | |
| SELECT * FROM ft2 a, ft2 b
 | |
| WHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7);
 | |
|  c1  | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  | c1  | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| -----+----+-------+------------------------------+--------------------------+----+------------+-----+-----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|    6 |  6 | 00006 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo |   6 |  6 | 00006 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo
 | |
|   16 |  6 | 00016 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo |  16 |  6 | 00016 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo
 | |
|   26 |  6 | 00026 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo |  26 |  6 | 00026 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo
 | |
|   36 |  6 | 00036 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo |  36 |  6 | 00036 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo
 | |
|   46 |  6 | 00046 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo |  46 |  6 | 00046 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo
 | |
|   56 |  6 | 00056 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo |  56 |  6 | 00056 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo
 | |
|   66 |  6 | 00066 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo |  66 |  6 | 00066 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo
 | |
|   76 |  6 | 00076 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo |  76 |  6 | 00076 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo
 | |
|   86 |  6 | 00086 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo |  86 |  6 | 00086 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo
 | |
|   96 |  6 | 00096 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo |  96 |  6 | 00096 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  106 |  6 | 00106 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo | 106 |  6 | 00106 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  116 |  6 | 00116 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo | 116 |  6 | 00116 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo
 | |
|  126 |  6 | 00126 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo | 126 |  6 | 00126 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo
 | |
|  136 |  6 | 00136 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo | 136 |  6 | 00136 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo
 | |
|  146 |  6 | 00146 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo | 146 |  6 | 00146 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo
 | |
|  156 |  6 | 00156 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo | 156 |  6 | 00156 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo
 | |
|  166 |  6 | 00166 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo | 166 |  6 | 00166 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo
 | |
|  176 |  6 | 00176 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo | 176 |  6 | 00176 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo
 | |
|  186 |  6 | 00186 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo | 186 |  6 | 00186 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo
 | |
|  196 |  6 | 00196 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo | 196 |  6 | 00196 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  206 |  6 | 00206 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo | 206 |  6 | 00206 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  216 |  6 | 00216 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo | 216 |  6 | 00216 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo
 | |
|  226 |  6 | 00226 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo | 226 |  6 | 00226 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo
 | |
|  236 |  6 | 00236 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo | 236 |  6 | 00236 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo
 | |
|  246 |  6 | 00246 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo | 246 |  6 | 00246 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo
 | |
|  256 |  6 | 00256 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo | 256 |  6 | 00256 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo
 | |
|  266 |  6 | 00266 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo | 266 |  6 | 00266 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo
 | |
|  276 |  6 | 00276 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo | 276 |  6 | 00276 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo
 | |
|  286 |  6 | 00286 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo | 286 |  6 | 00286 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo
 | |
|  296 |  6 | 00296 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo | 296 |  6 | 00296 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  306 |  6 | 00306 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo | 306 |  6 | 00306 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  316 |  6 | 00316 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo | 316 |  6 | 00316 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo
 | |
|  326 |  6 | 00326 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo | 326 |  6 | 00326 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo
 | |
|  336 |  6 | 00336 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo | 336 |  6 | 00336 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo
 | |
|  346 |  6 | 00346 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo | 346 |  6 | 00346 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo
 | |
|  356 |  6 | 00356 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo | 356 |  6 | 00356 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo
 | |
|  366 |  6 | 00366 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo | 366 |  6 | 00366 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo
 | |
|  376 |  6 | 00376 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo | 376 |  6 | 00376 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo
 | |
|  386 |  6 | 00386 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo | 386 |  6 | 00386 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo
 | |
|  396 |  6 | 00396 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo | 396 |  6 | 00396 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  406 |  6 | 00406 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo | 406 |  6 | 00406 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  416 |  6 | 00416 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo | 416 |  6 | 00416 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo
 | |
|  426 |  6 | 00426 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo | 426 |  6 | 00426 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo
 | |
|  436 |  6 | 00436 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo | 436 |  6 | 00436 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo
 | |
|  446 |  6 | 00446 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo | 446 |  6 | 00446 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo
 | |
|  456 |  6 | 00456 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo | 456 |  6 | 00456 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo
 | |
|  466 |  6 | 00466 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo | 466 |  6 | 00466 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo
 | |
|  476 |  6 | 00476 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo | 476 |  6 | 00476 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo
 | |
|  486 |  6 | 00486 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo | 486 |  6 | 00486 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo
 | |
|  496 |  6 | 00496 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo | 496 |  6 | 00496 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  506 |  6 | 00506 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo | 506 |  6 | 00506 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  516 |  6 | 00516 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo | 516 |  6 | 00516 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo
 | |
|  526 |  6 | 00526 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo | 526 |  6 | 00526 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo
 | |
|  536 |  6 | 00536 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo | 536 |  6 | 00536 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo
 | |
|  546 |  6 | 00546 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo | 546 |  6 | 00546 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo
 | |
|  556 |  6 | 00556 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo | 556 |  6 | 00556 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo
 | |
|  566 |  6 | 00566 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo | 566 |  6 | 00566 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo
 | |
|  576 |  6 | 00576 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo | 576 |  6 | 00576 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo
 | |
|  586 |  6 | 00586 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo | 586 |  6 | 00586 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo
 | |
|  596 |  6 | 00596 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo | 596 |  6 | 00596 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  606 |  6 | 00606 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo | 606 |  6 | 00606 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  616 |  6 | 00616 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo | 616 |  6 | 00616 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo
 | |
|  626 |  6 | 00626 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo | 626 |  6 | 00626 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo
 | |
|  636 |  6 | 00636 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo | 636 |  6 | 00636 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo
 | |
|  646 |  6 | 00646 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo | 646 |  6 | 00646 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo
 | |
|  656 |  6 | 00656 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo | 656 |  6 | 00656 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo
 | |
|  666 |  6 | 00666 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo | 666 |  6 | 00666 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo
 | |
|  676 |  6 | 00676 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo | 676 |  6 | 00676 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo
 | |
|  686 |  6 | 00686 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo | 686 |  6 | 00686 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo
 | |
|  696 |  6 | 00696 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo | 696 |  6 | 00696 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  706 |  6 | 00706 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo | 706 |  6 | 00706 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  716 |  6 | 00716 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo | 716 |  6 | 00716 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo
 | |
|  726 |  6 | 00726 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo | 726 |  6 | 00726 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo
 | |
|  736 |  6 | 00736 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo | 736 |  6 | 00736 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo
 | |
|  746 |  6 | 00746 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo | 746 |  6 | 00746 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo
 | |
|  756 |  6 | 00756 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo | 756 |  6 | 00756 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo
 | |
|  766 |  6 | 00766 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo | 766 |  6 | 00766 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo
 | |
|  776 |  6 | 00776 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo | 776 |  6 | 00776 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo
 | |
|  786 |  6 | 00786 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo | 786 |  6 | 00786 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo
 | |
|  796 |  6 | 00796 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo | 796 |  6 | 00796 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  806 |  6 | 00806 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo | 806 |  6 | 00806 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  816 |  6 | 00816 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo | 816 |  6 | 00816 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo
 | |
|  826 |  6 | 00826 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo | 826 |  6 | 00826 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo
 | |
|  836 |  6 | 00836 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo | 836 |  6 | 00836 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo
 | |
|  846 |  6 | 00846 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo | 846 |  6 | 00846 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo
 | |
|  856 |  6 | 00856 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo | 856 |  6 | 00856 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo
 | |
|  866 |  6 | 00866 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo | 866 |  6 | 00866 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo
 | |
|  876 |  6 | 00876 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo | 876 |  6 | 00876 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo
 | |
|  886 |  6 | 00886 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo | 886 |  6 | 00886 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo
 | |
|  896 |  6 | 00896 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo | 896 |  6 | 00896 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  906 |  6 | 00906 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo | 906 |  6 | 00906 | Wed Jan 07 00:00:00 1970 PST | Wed Jan 07 00:00:00 1970 | 6  | 6          | foo
 | |
|  916 |  6 | 00916 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo | 916 |  6 | 00916 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo
 | |
|  926 |  6 | 00926 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo | 926 |  6 | 00926 | Tue Jan 27 00:00:00 1970 PST | Tue Jan 27 00:00:00 1970 | 6  | 6          | foo
 | |
|  936 |  6 | 00936 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo | 936 |  6 | 00936 | Fri Feb 06 00:00:00 1970 PST | Fri Feb 06 00:00:00 1970 | 6  | 6          | foo
 | |
|  946 |  6 | 00946 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo | 946 |  6 | 00946 | Mon Feb 16 00:00:00 1970 PST | Mon Feb 16 00:00:00 1970 | 6  | 6          | foo
 | |
|  956 |  6 | 00956 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo | 956 |  6 | 00956 | Thu Feb 26 00:00:00 1970 PST | Thu Feb 26 00:00:00 1970 | 6  | 6          | foo
 | |
|  966 |  6 | 00966 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo | 966 |  6 | 00966 | Sun Mar 08 00:00:00 1970 PST | Sun Mar 08 00:00:00 1970 | 6  | 6          | foo
 | |
|  976 |  6 | 00976 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo | 976 |  6 | 00976 | Wed Mar 18 00:00:00 1970 PST | Wed Mar 18 00:00:00 1970 | 6  | 6          | foo
 | |
|  986 |  6 | 00986 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo | 986 |  6 | 00986 | Sat Mar 28 00:00:00 1970 PST | Sat Mar 28 00:00:00 1970 | 6  | 6          | foo
 | |
|  996 |  6 | 00996 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo | 996 |  6 | 00996 | Tue Apr 07 00:00:00 1970 PST | Tue Apr 07 00:00:00 1970 | 6  | 6          | foo
 | |
| (100 rows)
 | |
| 
 | |
| -- bug before 9.3.5 due to sloppy handling of remote-estimate parameters
 | |
| SELECT * FROM ft1 WHERE c1 = ANY (ARRAY(SELECT c1 FROM ft2 WHERE c1 < 5));
 | |
|  c1 | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| ----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|   1 |  1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1  | 1          | foo
 | |
|   2 |  2 | 00002 | Sat Jan 03 00:00:00 1970 PST | Sat Jan 03 00:00:00 1970 | 2  | 2          | foo
 | |
|   3 |  3 | 00003 | Sun Jan 04 00:00:00 1970 PST | Sun Jan 04 00:00:00 1970 | 3  | 3          | foo
 | |
|   4 |  4 | 00004 | Mon Jan 05 00:00:00 1970 PST | Mon Jan 05 00:00:00 1970 | 4  | 4          | foo
 | |
| (4 rows)
 | |
| 
 | |
| SELECT * FROM ft2 WHERE c1 = ANY (ARRAY(SELECT c1 FROM ft1 WHERE c1 < 5));
 | |
|  c1 | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| ----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|   1 |  1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1  | 1          | foo
 | |
|   2 |  2 | 00002 | Sat Jan 03 00:00:00 1970 PST | Sat Jan 03 00:00:00 1970 | 2  | 2          | foo
 | |
|   3 |  3 | 00003 | Sun Jan 04 00:00:00 1970 PST | Sun Jan 04 00:00:00 1970 | 3  | 3          | foo
 | |
|   4 |  4 | 00004 | Mon Jan 05 00:00:00 1970 PST | Mon Jan 05 00:00:00 1970 | 4  | 4          | foo
 | |
| (4 rows)
 | |
| 
 | |
| -- ===================================================================
 | |
| -- parameterized queries
 | |
| -- ===================================================================
 | |
| -- simple join
 | |
| PREPARE st1(int, int) AS SELECT t1.c3, t2.c3 FROM ft1 t1, ft2 t2 WHERE t1.c1 = $1 AND t2.c1 = $2;
 | |
| EXPLAIN (VERBOSE, COSTS false) EXECUTE st1(1, 2);
 | |
|                              QUERY PLAN                             
 | |
| --------------------------------------------------------------------
 | |
|  Nested Loop
 | |
|    Output: t1.c3, t2.c3
 | |
|    ->  Foreign Scan on public.ft1 t1
 | |
|          Output: t1.c3
 | |
|          Remote SQL: SELECT c3 FROM "S 1"."T 1" WHERE (("C 1" = 1))
 | |
|    ->  Foreign Scan on public.ft2 t2
 | |
|          Output: t2.c3
 | |
|          Remote SQL: SELECT c3 FROM "S 1"."T 1" WHERE (("C 1" = 2))
 | |
| (8 rows)
 | |
| 
 | |
| EXECUTE st1(1, 1);
 | |
|   c3   |  c3   
 | |
| -------+-------
 | |
|  00001 | 00001
 | |
| (1 row)
 | |
| 
 | |
| EXECUTE st1(101, 101);
 | |
|   c3   |  c3   
 | |
| -------+-------
 | |
|  00101 | 00101
 | |
| (1 row)
 | |
| 
 | |
| -- subquery using stable function (can't be sent to remote)
 | |
| PREPARE st2(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c4) = '1970-01-17'::date) ORDER BY c1;
 | |
| EXPLAIN (VERBOSE, COSTS false) EXECUTE st2(10, 20);
 | |
|                                                 QUERY PLAN                                                
 | |
| ----------------------------------------------------------------------------------------------------------
 | |
|  Sort
 | |
|    Output: t1.c1, t1.c2, t1.c3, t1.c4, t1.c5, t1.c6, t1.c7, t1.c8
 | |
|    Sort Key: t1.c1
 | |
|    ->  Nested Loop Semi Join
 | |
|          Output: t1.c1, t1.c2, t1.c3, t1.c4, t1.c5, t1.c6, t1.c7, t1.c8
 | |
|          Join Filter: (t1.c3 = t2.c3)
 | |
|          ->  Foreign Scan on public.ft1 t1
 | |
|                Output: t1.c1, t1.c2, t1.c3, t1.c4, t1.c5, t1.c6, t1.c7, t1.c8
 | |
|                Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" < 20))
 | |
|          ->  Materialize
 | |
|                Output: t2.c3
 | |
|                ->  Foreign Scan on public.ft2 t2
 | |
|                      Output: t2.c3
 | |
|                      Filter: (date(t2.c4) = '01-17-1970'::date)
 | |
|                      Remote SQL: SELECT c3, c4 FROM "S 1"."T 1" WHERE (("C 1" > 10))
 | |
| (15 rows)
 | |
| 
 | |
| EXECUTE st2(10, 20);
 | |
|  c1 | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| ----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|  16 |  6 | 00016 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo
 | |
| (1 row)
 | |
| 
 | |
| EXECUTE st2(101, 121);
 | |
|  c1  | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| -----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|  116 |  6 | 00116 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo
 | |
| (1 row)
 | |
| 
 | |
| -- subquery using immutable function (can be sent to remote)
 | |
| PREPARE st3(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 < $2 AND t1.c3 IN (SELECT c3 FROM ft2 t2 WHERE c1 > $1 AND date(c5) = '1970-01-17'::date) ORDER BY c1;
 | |
| EXPLAIN (VERBOSE, COSTS false) EXECUTE st3(10, 20);
 | |
|                                                       QUERY PLAN                                                       
 | |
| -----------------------------------------------------------------------------------------------------------------------
 | |
|  Sort
 | |
|    Output: t1.c1, t1.c2, t1.c3, t1.c4, t1.c5, t1.c6, t1.c7, t1.c8
 | |
|    Sort Key: t1.c1
 | |
|    ->  Nested Loop Semi Join
 | |
|          Output: t1.c1, t1.c2, t1.c3, t1.c4, t1.c5, t1.c6, t1.c7, t1.c8
 | |
|          Join Filter: (t1.c3 = t2.c3)
 | |
|          ->  Foreign Scan on public.ft1 t1
 | |
|                Output: t1.c1, t1.c2, t1.c3, t1.c4, t1.c5, t1.c6, t1.c7, t1.c8
 | |
|                Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" < 20))
 | |
|          ->  Materialize
 | |
|                Output: t2.c3
 | |
|                ->  Foreign Scan on public.ft2 t2
 | |
|                      Output: t2.c3
 | |
|                      Remote SQL: SELECT c3 FROM "S 1"."T 1" WHERE (("C 1" > 10)) AND ((date(c5) = '1970-01-17'::date))
 | |
| (14 rows)
 | |
| 
 | |
| EXECUTE st3(10, 20);
 | |
|  c1 | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| ----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|  16 |  6 | 00016 | Sat Jan 17 00:00:00 1970 PST | Sat Jan 17 00:00:00 1970 | 6  | 6          | foo
 | |
| (1 row)
 | |
| 
 | |
| EXECUTE st3(20, 30);
 | |
|  c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 
 | |
| ----+----+----+----+----+----+----+----
 | |
| (0 rows)
 | |
| 
 | |
| -- custom plan should be chosen initially
 | |
| PREPARE st4(int) AS SELECT * FROM ft1 t1 WHERE t1.c1 = $1;
 | |
| EXPLAIN (VERBOSE, COSTS false) EXECUTE st4(1);
 | |
|                                          QUERY PLAN                                          
 | |
| ---------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = 1))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) EXECUTE st4(1);
 | |
|                                          QUERY PLAN                                          
 | |
| ---------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = 1))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) EXECUTE st4(1);
 | |
|                                          QUERY PLAN                                          
 | |
| ---------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = 1))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) EXECUTE st4(1);
 | |
|                                          QUERY PLAN                                          
 | |
| ---------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = 1))
 | |
| (3 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) EXECUTE st4(1);
 | |
|                                          QUERY PLAN                                          
 | |
| ---------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = 1))
 | |
| (3 rows)
 | |
| 
 | |
| -- once we try it enough times, should switch to generic plan
 | |
| EXPLAIN (VERBOSE, COSTS false) EXECUTE st4(1);
 | |
|                                               QUERY PLAN                                               
 | |
| -------------------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = $1::integer))
 | |
| (3 rows)
 | |
| 
 | |
| -- value of $1 should not be sent to remote
 | |
| PREPARE st5(user_enum,int) AS SELECT * FROM ft1 t1 WHERE c8 = $1 and c1 = $2;
 | |
| EXPLAIN (VERBOSE, COSTS false) EXECUTE st5('foo', 1);
 | |
|                                          QUERY PLAN                                          
 | |
| ---------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Filter: (t1.c8 = 'foo'::user_enum)
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = 1))
 | |
| (4 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) EXECUTE st5('foo', 1);
 | |
|                                          QUERY PLAN                                          
 | |
| ---------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Filter: (t1.c8 = 'foo'::user_enum)
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = 1))
 | |
| (4 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) EXECUTE st5('foo', 1);
 | |
|                                          QUERY PLAN                                          
 | |
| ---------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Filter: (t1.c8 = 'foo'::user_enum)
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = 1))
 | |
| (4 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) EXECUTE st5('foo', 1);
 | |
|                                          QUERY PLAN                                          
 | |
| ---------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Filter: (t1.c8 = 'foo'::user_enum)
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = 1))
 | |
| (4 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) EXECUTE st5('foo', 1);
 | |
|                                          QUERY PLAN                                          
 | |
| ---------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Filter: (t1.c8 = 'foo'::user_enum)
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = 1))
 | |
| (4 rows)
 | |
| 
 | |
| EXPLAIN (VERBOSE, COSTS false) EXECUTE st5('foo', 1);
 | |
|                                               QUERY PLAN                                               
 | |
| -------------------------------------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft1 t1
 | |
|    Output: c1, c2, c3, c4, c5, c6, c7, c8
 | |
|    Filter: (t1.c8 = $1)
 | |
|    Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = $1::integer))
 | |
| (4 rows)
 | |
| 
 | |
| EXECUTE st5('foo', 1);
 | |
|  c1 | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| ----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|   1 |  1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1  | 1          | foo
 | |
| (1 row)
 | |
| 
 | |
| -- cleanup
 | |
| DEALLOCATE st1;
 | |
| DEALLOCATE st2;
 | |
| DEALLOCATE st3;
 | |
| DEALLOCATE st4;
 | |
| DEALLOCATE st5;
 | |
| -- ===================================================================
 | |
| -- used in pl/pgsql function
 | |
| -- ===================================================================
 | |
| CREATE OR REPLACE FUNCTION f_test(p_c1 int) RETURNS int AS $$
 | |
| DECLARE
 | |
| 	v_c1 int;
 | |
| BEGIN
 | |
|     SELECT c1 INTO v_c1 FROM ft1 WHERE c1 = p_c1 LIMIT 1;
 | |
|     PERFORM c1 FROM ft1 WHERE c1 = p_c1 AND p_c1 = v_c1 LIMIT 1;
 | |
|     RETURN v_c1;
 | |
| END;
 | |
| $$ LANGUAGE plpgsql;
 | |
| SELECT f_test(100);
 | |
|  f_test 
 | |
| --------
 | |
|     100
 | |
| (1 row)
 | |
| 
 | |
| DROP FUNCTION f_test(int);
 | |
| -- ===================================================================
 | |
| -- conversion error
 | |
| -- ===================================================================
 | |
| ALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE int;
 | |
| SELECT * FROM ft1 WHERE c1 = 1;  -- ERROR
 | |
| ERROR:  invalid input syntax for integer: "foo"
 | |
| CONTEXT:  column "c8" of foreign table "ft1"
 | |
| ALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE user_enum;
 | |
| -- ===================================================================
 | |
| -- subtransaction
 | |
| --  + local/remote error doesn't break cursor
 | |
| -- ===================================================================
 | |
| BEGIN;
 | |
| DECLARE c CURSOR FOR SELECT * FROM ft1 ORDER BY c1;
 | |
| FETCH c;
 | |
|  c1 | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| ----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|   1 |  1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1  | 1          | foo
 | |
| (1 row)
 | |
| 
 | |
| SAVEPOINT s;
 | |
| ERROR OUT;          -- ERROR
 | |
| ERROR:  syntax error at or near "ERROR"
 | |
| LINE 1: ERROR OUT;
 | |
|         ^
 | |
| ROLLBACK TO s;
 | |
| FETCH c;
 | |
|  c1 | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| ----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|   2 |  2 | 00002 | Sat Jan 03 00:00:00 1970 PST | Sat Jan 03 00:00:00 1970 | 2  | 2          | foo
 | |
| (1 row)
 | |
| 
 | |
| SAVEPOINT s;
 | |
| SELECT * FROM ft1 WHERE 1 / (c1 - 1) > 0;  -- ERROR
 | |
| ERROR:  division by zero
 | |
| CONTEXT:  Remote SQL command: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (((1 / ("C 1" - 1)) > 0))
 | |
| ROLLBACK TO s;
 | |
| FETCH c;
 | |
|  c1 | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| ----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|   3 |  3 | 00003 | Sun Jan 04 00:00:00 1970 PST | Sun Jan 04 00:00:00 1970 | 3  | 3          | foo
 | |
| (1 row)
 | |
| 
 | |
| SELECT * FROM ft1 ORDER BY c1 LIMIT 1;
 | |
|  c1 | c2 |  c3   |              c4              |            c5            | c6 |     c7     | c8  
 | |
| ----+----+-------+------------------------------+--------------------------+----+------------+-----
 | |
|   1 |  1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1  | 1          | foo
 | |
| (1 row)
 | |
| 
 | |
| COMMIT;
 | |
| -- ===================================================================
 | |
| -- test handling of collations
 | |
| -- ===================================================================
 | |
| create table loct3 (f1 text collate "C", f2 text);
 | |
| create foreign table ft3 (f1 text collate "C", f2 text)
 | |
|   server loopback options (table_name 'loct3');
 | |
| -- can be sent to remote
 | |
| explain (verbose, costs off) select * from ft3 where f1 = 'foo';
 | |
|                                 QUERY PLAN                                
 | |
| --------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft3
 | |
|    Output: f1, f2
 | |
|    Remote SQL: SELECT f1, f2 FROM public.loct3 WHERE ((f1 = 'foo'::text))
 | |
| (3 rows)
 | |
| 
 | |
| explain (verbose, costs off) select * from ft3 where f1 COLLATE "C" = 'foo';
 | |
|                                 QUERY PLAN                                
 | |
| --------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft3
 | |
|    Output: f1, f2
 | |
|    Remote SQL: SELECT f1, f2 FROM public.loct3 WHERE ((f1 = 'foo'::text))
 | |
| (3 rows)
 | |
| 
 | |
| explain (verbose, costs off) select * from ft3 where f2 = 'foo';
 | |
|                                 QUERY PLAN                                
 | |
| --------------------------------------------------------------------------
 | |
|  Foreign Scan on public.ft3
 | |
|    Output: f1, f2
 | |
|    Remote SQL: SELECT f1, f2 FROM public.loct3 WHERE ((f2 = 'foo'::text))
 | |
| (3 rows)
 | |
| 
 | |
| -- can't be sent to remote
 | |
| explain (verbose, costs off) select * from ft3 where f1 COLLATE "POSIX" = 'foo';
 | |
|                   QUERY PLAN                   
 | |
| -----------------------------------------------
 | |
|  Foreign Scan on public.ft3
 | |
|    Output: f1, f2
 | |
|    Filter: ((ft3.f1)::text = 'foo'::text)
 | |
|    Remote SQL: SELECT f1, f2 FROM public.loct3
 | |
| (4 rows)
 | |
| 
 | |
| explain (verbose, costs off) select * from ft3 where f1 = 'foo' COLLATE "C";
 | |
|                   QUERY PLAN                   
 | |
| -----------------------------------------------
 | |
|  Foreign Scan on public.ft3
 | |
|    Output: f1, f2
 | |
|    Filter: (ft3.f1 = 'foo'::text COLLATE "C")
 | |
|    Remote SQL: SELECT f1, f2 FROM public.loct3
 | |
| (4 rows)
 | |
| 
 | |
| explain (verbose, costs off) select * from ft3 where f2 COLLATE "C" = 'foo';
 | |
|                   QUERY PLAN                   
 | |
| -----------------------------------------------
 | |
|  Foreign Scan on public.ft3
 | |
|    Output: f1, f2
 | |
|    Filter: ((ft3.f2)::text = 'foo'::text)
 | |
|    Remote SQL: SELECT f1, f2 FROM public.loct3
 | |
| (4 rows)
 | |
| 
 | |
| explain (verbose, costs off) select * from ft3 where f2 = 'foo' COLLATE "C";
 | |
|                   QUERY PLAN                   
 | |
| -----------------------------------------------
 | |
|  Foreign Scan on public.ft3
 | |
|    Output: f1, f2
 | |
|    Filter: (ft3.f2 = 'foo'::text COLLATE "C")
 | |
|    Remote SQL: SELECT f1, f2 FROM public.loct3
 | |
| (4 rows)
 | |
| 
 | |
| -- ===================================================================
 | |
| -- test writable foreign table stuff
 | |
| -- ===================================================================
 | |
| EXPLAIN (verbose, costs off)
 | |
| INSERT INTO ft2 (c1,c2,c3) SELECT c1+1000,c2+100, c3 || c3 FROM ft2 LIMIT 20;
 | |
|                                                                                                                     QUERY PLAN                                                                                                                    
 | |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 | |
|  Insert on public.ft2
 | |
|    Remote SQL: INSERT INTO "S 1"."T 1"("C 1", c2, c3, c4, c5, c6, c7, c8) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
 | |
|    ->  Subquery Scan on "*SELECT*"
 | |
|          Output: "*SELECT*"."?column?", "*SELECT*"."?column?_1", NULL::integer, "*SELECT*"."?column?_2", NULL::timestamp with time zone, NULL::timestamp without time zone, NULL::character varying, 'ft2       '::character(10), NULL::user_enum
 | |
|          ->  Limit
 | |
|                Output: ((ft2_1.c1 + 1000)), ((ft2_1.c2 + 100)), ((ft2_1.c3 || ft2_1.c3))
 | |
|                ->  Foreign Scan on public.ft2 ft2_1
 | |
|                      Output: (ft2_1.c1 + 1000), (ft2_1.c2 + 100), (ft2_1.c3 || ft2_1.c3)
 | |
|                      Remote SQL: SELECT "C 1", c2, c3 FROM "S 1"."T 1"
 | |
| (9 rows)
 | |
| 
 | |
| INSERT INTO ft2 (c1,c2,c3) SELECT c1+1000,c2+100, c3 || c3 FROM ft2 LIMIT 20;
 | |
| INSERT INTO ft2 (c1,c2,c3)
 | |
|   VALUES (1101,201,'aaa'), (1102,202,'bbb'), (1103,203,'ccc') RETURNING *;
 | |
|   c1  | c2  | c3  | c4 | c5 | c6 |     c7     | c8 
 | |
| ------+-----+-----+----+----+----+------------+----
 | |
|  1101 | 201 | aaa |    |    |    | ft2        | 
 | |
|  1102 | 202 | bbb |    |    |    | ft2        | 
 | |
|  1103 | 203 | ccc |    |    |    | ft2        | 
 | |
| (3 rows)
 | |
| 
 | |
| INSERT INTO ft2 (c1,c2,c3) VALUES (1104,204,'ddd'), (1105,205,'eee');
 | |
| UPDATE ft2 SET c2 = c2 + 300, c3 = c3 || '_update3' WHERE c1 % 10 = 3;
 | |
| UPDATE ft2 SET c2 = c2 + 400, c3 = c3 || '_update7' WHERE c1 % 10 = 7 RETURNING *;
 | |
|   c1  | c2  |         c3         |              c4              |            c5            | c6 |     c7     | c8  
 | |
| ------+-----+--------------------+------------------------------+--------------------------+----+------------+-----
 | |
|     7 | 407 | 00007_update7      | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7  | 7          | foo
 | |
|    17 | 407 | 00017_update7      | Sun Jan 18 00:00:00 1970 PST | Sun Jan 18 00:00:00 1970 | 7  | 7          | foo
 | |
|    27 | 407 | 00027_update7      | Wed Jan 28 00:00:00 1970 PST | Wed Jan 28 00:00:00 1970 | 7  | 7          | foo
 | |
|    37 | 407 | 00037_update7      | Sat Feb 07 00:00:00 1970 PST | Sat Feb 07 00:00:00 1970 | 7  | 7          | foo
 | |
|    47 | 407 | 00047_update7      | Tue Feb 17 00:00:00 1970 PST | Tue Feb 17 00:00:00 1970 | 7  | 7          | foo
 | |
|    57 | 407 | 00057_update7      | Fri Feb 27 00:00:00 1970 PST | Fri Feb 27 00:00:00 1970 | 7  | 7          | foo
 | |
|    67 | 407 | 00067_update7      | Mon Mar 09 00:00:00 1970 PST | Mon Mar 09 00:00:00 1970 | 7  | 7          | foo
 | |
|    77 | 407 | 00077_update7      | Thu Mar 19 00:00:00 1970 PST | Thu Mar 19 00:00:00 1970 | 7  | 7          | foo
 | |
|    87 | 407 | 00087_update7      | Sun Mar 29 00:00:00 1970 PST | Sun Mar 29 00:00:00 1970 | 7  | 7          | foo
 | |
|    97 | 407 | 00097_update7      | Wed Apr 08 00:00:00 1970 PST | Wed Apr 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   107 | 407 | 00107_update7      | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   117 | 407 | 00117_update7      | Sun Jan 18 00:00:00 1970 PST | Sun Jan 18 00:00:00 1970 | 7  | 7          | foo
 | |
|   127 | 407 | 00127_update7      | Wed Jan 28 00:00:00 1970 PST | Wed Jan 28 00:00:00 1970 | 7  | 7          | foo
 | |
|   137 | 407 | 00137_update7      | Sat Feb 07 00:00:00 1970 PST | Sat Feb 07 00:00:00 1970 | 7  | 7          | foo
 | |
|   147 | 407 | 00147_update7      | Tue Feb 17 00:00:00 1970 PST | Tue Feb 17 00:00:00 1970 | 7  | 7          | foo
 | |
|   157 | 407 | 00157_update7      | Fri Feb 27 00:00:00 1970 PST | Fri Feb 27 00:00:00 1970 | 7  | 7          | foo
 | |
|   167 | 407 | 00167_update7      | Mon Mar 09 00:00:00 1970 PST | Mon Mar 09 00:00:00 1970 | 7  | 7          | foo
 | |
|   177 | 407 | 00177_update7      | Thu Mar 19 00:00:00 1970 PST | Thu Mar 19 00:00:00 1970 | 7  | 7          | foo
 | |
|   187 | 407 | 00187_update7      | Sun Mar 29 00:00:00 1970 PST | Sun Mar 29 00:00:00 1970 | 7  | 7          | foo
 | |
|   197 | 407 | 00197_update7      | Wed Apr 08 00:00:00 1970 PST | Wed Apr 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   207 | 407 | 00207_update7      | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   217 | 407 | 00217_update7      | Sun Jan 18 00:00:00 1970 PST | Sun Jan 18 00:00:00 1970 | 7  | 7          | foo
 | |
|   227 | 407 | 00227_update7      | Wed Jan 28 00:00:00 1970 PST | Wed Jan 28 00:00:00 1970 | 7  | 7          | foo
 | |
|   237 | 407 | 00237_update7      | Sat Feb 07 00:00:00 1970 PST | Sat Feb 07 00:00:00 1970 | 7  | 7          | foo
 | |
|   247 | 407 | 00247_update7      | Tue Feb 17 00:00:00 1970 PST | Tue Feb 17 00:00:00 1970 | 7  | 7          | foo
 | |
|   257 | 407 | 00257_update7      | Fri Feb 27 00:00:00 1970 PST | Fri Feb 27 00:00:00 1970 | 7  | 7          | foo
 | |
|   267 | 407 | 00267_update7      | Mon Mar 09 00:00:00 1970 PST | Mon Mar 09 00:00:00 1970 | 7  | 7          | foo
 | |
|   277 | 407 | 00277_update7      | Thu Mar 19 00:00:00 1970 PST | Thu Mar 19 00:00:00 1970 | 7  | 7          | foo
 | |
|   287 | 407 | 00287_update7      | Sun Mar 29 00:00:00 1970 PST | Sun Mar 29 00:00:00 1970 | 7  | 7          | foo
 | |
|   297 | 407 | 00297_update7      | Wed Apr 08 00:00:00 1970 PST | Wed Apr 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   307 | 407 | 00307_update7      | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   317 | 407 | 00317_update7      | Sun Jan 18 00:00:00 1970 PST | Sun Jan 18 00:00:00 1970 | 7  | 7          | foo
 | |
|   327 | 407 | 00327_update7      | Wed Jan 28 00:00:00 1970 PST | Wed Jan 28 00:00:00 1970 | 7  | 7          | foo
 | |
|   337 | 407 | 00337_update7      | Sat Feb 07 00:00:00 1970 PST | Sat Feb 07 00:00:00 1970 | 7  | 7          | foo
 | |
|   347 | 407 | 00347_update7      | Tue Feb 17 00:00:00 1970 PST | Tue Feb 17 00:00:00 1970 | 7  | 7          | foo
 | |
|   357 | 407 | 00357_update7      | Fri Feb 27 00:00:00 1970 PST | Fri Feb 27 00:00:00 1970 | 7  | 7          | foo
 | |
|   367 | 407 | 00367_update7      | Mon Mar 09 00:00:00 1970 PST | Mon Mar 09 00:00:00 1970 | 7  | 7          | foo
 | |
|   377 | 407 | 00377_update7      | Thu Mar 19 00:00:00 1970 PST | Thu Mar 19 00:00:00 1970 | 7  | 7          | foo
 | |
|   387 | 407 | 00387_update7      | Sun Mar 29 00:00:00 1970 PST | Sun Mar 29 00:00:00 1970 | 7  | 7          | foo
 | |
|   397 | 407 | 00397_update7      | Wed Apr 08 00:00:00 1970 PST | Wed Apr 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   407 | 407 | 00407_update7      | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   417 | 407 | 00417_update7      | Sun Jan 18 00:00:00 1970 PST | Sun Jan 18 00:00:00 1970 | 7  | 7          | foo
 | |
|   427 | 407 | 00427_update7      | Wed Jan 28 00:00:00 1970 PST | Wed Jan 28 00:00:00 1970 | 7  | 7          | foo
 | |
|   437 | 407 | 00437_update7      | Sat Feb 07 00:00:00 1970 PST | Sat Feb 07 00:00:00 1970 | 7  | 7          | foo
 | |
|   447 | 407 | 00447_update7      | Tue Feb 17 00:00:00 1970 PST | Tue Feb 17 00:00:00 1970 | 7  | 7          | foo
 | |
|   457 | 407 | 00457_update7      | Fri Feb 27 00:00:00 1970 PST | Fri Feb 27 00:00:00 1970 | 7  | 7          | foo
 | |
|   467 | 407 | 00467_update7      | Mon Mar 09 00:00:00 1970 PST | Mon Mar 09 00:00:00 1970 | 7  | 7          | foo
 | |
|   477 | 407 | 00477_update7      | Thu Mar 19 00:00:00 1970 PST | Thu Mar 19 00:00:00 1970 | 7  | 7          | foo
 | |
|   487 | 407 | 00487_update7      | Sun Mar 29 00:00:00 1970 PST | Sun Mar 29 00:00:00 1970 | 7  | 7          | foo
 | |
|   497 | 407 | 00497_update7      | Wed Apr 08 00:00:00 1970 PST | Wed Apr 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   507 | 407 | 00507_update7      | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   517 | 407 | 00517_update7      | Sun Jan 18 00:00:00 1970 PST | Sun Jan 18 00:00:00 1970 | 7  | 7          | foo
 | |
|   527 | 407 | 00527_update7      | Wed Jan 28 00:00:00 1970 PST | Wed Jan 28 00:00:00 1970 | 7  | 7          | foo
 | |
|   537 | 407 | 00537_update7      | Sat Feb 07 00:00:00 1970 PST | Sat Feb 07 00:00:00 1970 | 7  | 7          | foo
 | |
|   547 | 407 | 00547_update7      | Tue Feb 17 00:00:00 1970 PST | Tue Feb 17 00:00:00 1970 | 7  | 7          | foo
 | |
|   557 | 407 | 00557_update7      | Fri Feb 27 00:00:00 1970 PST | Fri Feb 27 00:00:00 1970 | 7  | 7          | foo
 | |
|   567 | 407 | 00567_update7      | Mon Mar 09 00:00:00 1970 PST | Mon Mar 09 00:00:00 1970 | 7  | 7          | foo
 | |
|   577 | 407 | 00577_update7      | Thu Mar 19 00:00:00 1970 PST | Thu Mar 19 00:00:00 1970 | 7  | 7          | foo
 | |
|   587 | 407 | 00587_update7      | Sun Mar 29 00:00:00 1970 PST | Sun Mar 29 00:00:00 1970 | 7  | 7          | foo
 | |
|   597 | 407 | 00597_update7      | Wed Apr 08 00:00:00 1970 PST | Wed Apr 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   607 | 407 | 00607_update7      | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   617 | 407 | 00617_update7      | Sun Jan 18 00:00:00 1970 PST | Sun Jan 18 00:00:00 1970 | 7  | 7          | foo
 | |
|   627 | 407 | 00627_update7      | Wed Jan 28 00:00:00 1970 PST | Wed Jan 28 00:00:00 1970 | 7  | 7          | foo
 | |
|   637 | 407 | 00637_update7      | Sat Feb 07 00:00:00 1970 PST | Sat Feb 07 00:00:00 1970 | 7  | 7          | foo
 | |
|   647 | 407 | 00647_update7      | Tue Feb 17 00:00:00 1970 PST | Tue Feb 17 00:00:00 1970 | 7  | 7          | foo
 | |
|   657 | 407 | 00657_update7      | Fri Feb 27 00:00:00 1970 PST | Fri Feb 27 00:00:00 1970 | 7  | 7          | foo
 | |
|   667 | 407 | 00667_update7      | Mon Mar 09 00:00:00 1970 PST | Mon Mar 09 00:00:00 1970 | 7  | 7          | foo
 | |
|   677 | 407 | 00677_update7      | Thu Mar 19 00:00:00 1970 PST | Thu Mar 19 00:00:00 1970 | 7  | 7          | foo
 | |
|   687 | 407 | 00687_update7      | Sun Mar 29 00:00:00 1970 PST | Sun Mar 29 00:00:00 1970 | 7  | 7          | foo
 | |
|   697 | 407 | 00697_update7      | Wed Apr 08 00:00:00 1970 PST | Wed Apr 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   707 | 407 | 00707_update7      | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   717 | 407 | 00717_update7      | Sun Jan 18 00:00:00 1970 PST | Sun Jan 18 00:00:00 1970 | 7  | 7          | foo
 | |
|   727 | 407 | 00727_update7      | Wed Jan 28 00:00:00 1970 PST | Wed Jan 28 00:00:00 1970 | 7  | 7          | foo
 | |
|   737 | 407 | 00737_update7      | Sat Feb 07 00:00:00 1970 PST | Sat Feb 07 00:00:00 1970 | 7  | 7          | foo
 | |
|   747 | 407 | 00747_update7      | Tue Feb 17 00:00:00 1970 PST | Tue Feb 17 00:00:00 1970 | 7  | 7          | foo
 | |
|   757 | 407 | 00757_update7      | Fri Feb 27 00:00:00 1970 PST | Fri Feb 27 00:00:00 1970 | 7  | 7          | foo
 | |
|   767 | 407 | 00767_update7      | Mon Mar 09 00:00:00 1970 PST | Mon Mar 09 00:00:00 1970 | 7  | 7          | foo
 | |
|   777 | 407 | 00777_update7      | Thu Mar 19 00:00:00 1970 PST | Thu Mar 19 00:00:00 1970 | 7  | 7          | foo
 | |
|   787 | 407 | 00787_update7      | Sun Mar 29 00:00:00 1970 PST | Sun Mar 29 00:00:00 1970 | 7  | 7          | foo
 | |
|   797 | 407 | 00797_update7      | Wed Apr 08 00:00:00 1970 PST | Wed Apr 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   807 | 407 | 00807_update7      | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   817 | 407 | 00817_update7      | Sun Jan 18 00:00:00 1970 PST | Sun Jan 18 00:00:00 1970 | 7  | 7          | foo
 | |
|   827 | 407 | 00827_update7      | Wed Jan 28 00:00:00 1970 PST | Wed Jan 28 00:00:00 1970 | 7  | 7          | foo
 | |
|   837 | 407 | 00837_update7      | Sat Feb 07 00:00:00 1970 PST | Sat Feb 07 00:00:00 1970 | 7  | 7          | foo
 | |
|   847 | 407 | 00847_update7      | Tue Feb 17 00:00:00 1970 PST | Tue Feb 17 00:00:00 1970 | 7  | 7          | foo
 | |
|   857 | 407 | 00857_update7      | Fri Feb 27 00:00:00 1970 PST | Fri Feb 27 00:00:00 1970 | 7  | 7          | foo
 | |
|   867 | 407 | 00867_update7      | Mon Mar 09 00:00:00 1970 PST | Mon Mar 09 00:00:00 1970 | 7  | 7          | foo
 | |
|   877 | 407 | 00877_update7      | Thu Mar 19 00:00:00 1970 PST | Thu Mar 19 00:00:00 1970 | 7  | 7          | foo
 | |
|   887 | 407 | 00887_update7      | Sun Mar 29 00:00:00 1970 PST | Sun Mar 29 00:00:00 1970 | 7  | 7          | foo
 | |
|   897 | 407 | 00897_update7      | Wed Apr 08 00:00:00 1970 PST | Wed Apr 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   907 | 407 | 00907_update7      | Thu Jan 08 00:00:00 1970 PST | Thu Jan 08 00:00:00 1970 | 7  | 7          | foo
 | |
|   917 | 407 | 00917_update7      | Sun Jan 18 00:00:00 1970 PST | Sun Jan 18 00:00:00 1970 | 7  | 7          | foo
 | |
|   927 | 407 | 00927_update7      | Wed Jan 28 00:00:00 1970 PST | Wed Jan 28 00:00:00 1970 | 7  | 7          | foo
 | |
|   937 | 407 | 00937_update7      | Sat Feb 07 00:00:00 1970 PST | Sat Feb 07 00:00:00 1970 | 7  | 7          | foo
 | |
|   947 | 407 | 00947_update7      | Tue Feb 17 00:00:00 1970 PST | Tue Feb 17 00:00:00 1970 | 7  | 7          | foo
 | |
|   957 | 407 | 00957_update7      | Fri Feb 27 00:00:00 1970 PST | Fri Feb 27 00:00:00 1970 | 7  | 7          | foo
 | |
|   967 | 407 | 00967_update7      | Mon Mar 09 00:00:00 1970 PST | Mon Mar 09 00:00:00 1970 | 7  | 7          | foo
 | |
|   977 | 407 | 00977_update7      | Thu Mar 19 00:00:00 1970 PST | Thu Mar 19 00:00:00 1970 | 7  | 7          | foo
 | |
|   987 | 407 | 00987_update7      | Sun Mar 29 00:00:00 1970 PST | Sun Mar 29 00:00:00 1970 | 7  | 7          | foo
 | |
|   997 | 407 | 00997_update7      | Wed Apr 08 00:00:00 1970 PST | Wed Apr 08 00:00:00 1970 | 7  | 7          | foo
 | |
|  1007 | 507 | 0000700007_update7 |                              |                          |    | ft2        | 
 | |
|  1017 | 507 | 0001700017_update7 |                              |                          |    | ft2        | 
 | |
| (102 rows)
 | |
| 
 | |
| EXPLAIN (verbose, costs off)
 | |
| UPDATE ft2 SET c2 = ft2.c2 + 500, c3 = ft2.c3 || '_update9', c7 = DEFAULT
 | |
|   FROM ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 9;
 | |
|                                                                             QUERY PLAN                                                                             
 | |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------
 | |
|  Update on public.ft2
 | |
|    Remote SQL: UPDATE "S 1"."T 1" SET c2 = $2, c3 = $3, c7 = $4 WHERE ctid = $1
 | |
|    ->  Hash Join
 | |
|          Output: ft2.c1, (ft2.c2 + 500), NULL::integer, (ft2.c3 || '_update9'::text), ft2.c4, ft2.c5, ft2.c6, 'ft2       '::character(10), ft2.c8, ft2.ctid, ft1.*
 | |
|          Hash Cond: (ft2.c2 = ft1.c1)
 | |
|          ->  Foreign Scan on public.ft2
 | |
|                Output: ft2.c1, ft2.c2, ft2.c3, ft2.c4, ft2.c5, ft2.c6, ft2.c8, ft2.ctid
 | |
|                Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c8, ctid FROM "S 1"."T 1" FOR UPDATE
 | |
|          ->  Hash
 | |
|                Output: ft1.*, ft1.c1
 | |
|                ->  Foreign Scan on public.ft1
 | |
|                      Output: ft1.*, ft1.c1
 | |
|                      Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE ((("C 1" % 10) = 9))
 | |
| (13 rows)
 | |
| 
 | |
| UPDATE ft2 SET c2 = ft2.c2 + 500, c3 = ft2.c3 || '_update9', c7 = DEFAULT
 | |
|   FROM ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 9;
 | |
| EXPLAIN (verbose, costs off)
 | |
|   DELETE FROM ft2 WHERE c1 % 10 = 5 RETURNING c1, c4;
 | |
|                                        QUERY PLAN                                       
 | |
| ----------------------------------------------------------------------------------------
 | |
|  Delete on public.ft2
 | |
|    Output: c1, c4
 | |
|    Remote SQL: DELETE FROM "S 1"."T 1" WHERE ctid = $1 RETURNING "C 1", c4
 | |
|    ->  Foreign Scan on public.ft2
 | |
|          Output: ctid
 | |
|          Remote SQL: SELECT ctid FROM "S 1"."T 1" WHERE ((("C 1" % 10) = 5)) FOR UPDATE
 | |
| (6 rows)
 | |
| 
 | |
| DELETE FROM ft2 WHERE c1 % 10 = 5 RETURNING c1, c4;
 | |
|   c1  |              c4              
 | |
| ------+------------------------------
 | |
|     5 | Tue Jan 06 00:00:00 1970 PST
 | |
|    15 | Fri Jan 16 00:00:00 1970 PST
 | |
|    25 | Mon Jan 26 00:00:00 1970 PST
 | |
|    35 | Thu Feb 05 00:00:00 1970 PST
 | |
|    45 | Sun Feb 15 00:00:00 1970 PST
 | |
|    55 | Wed Feb 25 00:00:00 1970 PST
 | |
|    65 | Sat Mar 07 00:00:00 1970 PST
 | |
|    75 | Tue Mar 17 00:00:00 1970 PST
 | |
|    85 | Fri Mar 27 00:00:00 1970 PST
 | |
|    95 | Mon Apr 06 00:00:00 1970 PST
 | |
|   105 | Tue Jan 06 00:00:00 1970 PST
 | |
|   115 | Fri Jan 16 00:00:00 1970 PST
 | |
|   125 | Mon Jan 26 00:00:00 1970 PST
 | |
|   135 | Thu Feb 05 00:00:00 1970 PST
 | |
|   145 | Sun Feb 15 00:00:00 1970 PST
 | |
|   155 | Wed Feb 25 00:00:00 1970 PST
 | |
|   165 | Sat Mar 07 00:00:00 1970 PST
 | |
|   175 | Tue Mar 17 00:00:00 1970 PST
 | |
|   185 | Fri Mar 27 00:00:00 1970 PST
 | |
|   195 | Mon Apr 06 00:00:00 1970 PST
 | |
|   205 | Tue Jan 06 00:00:00 1970 PST
 | |
|   215 | Fri Jan 16 00:00:00 1970 PST
 | |
|   225 | Mon Jan 26 00:00:00 1970 PST
 | |
|   235 | Thu Feb 05 00:00:00 1970 PST
 | |
|   245 | Sun Feb 15 00:00:00 1970 PST
 | |
|   255 | Wed Feb 25 00:00:00 1970 PST
 | |
|   265 | Sat Mar 07 00:00:00 1970 PST
 | |
|   275 | Tue Mar 17 00:00:00 1970 PST
 | |
|   285 | Fri Mar 27 00:00:00 1970 PST
 | |
|   295 | Mon Apr 06 00:00:00 1970 PST
 | |
|   305 | Tue Jan 06 00:00:00 1970 PST
 | |
|   315 | Fri Jan 16 00:00:00 1970 PST
 | |
|   325 | Mon Jan 26 00:00:00 1970 PST
 | |
|   335 | Thu Feb 05 00:00:00 1970 PST
 | |
|   345 | Sun Feb 15 00:00:00 1970 PST
 | |
|   355 | Wed Feb 25 00:00:00 1970 PST
 | |
|   365 | Sat Mar 07 00:00:00 1970 PST
 | |
|   375 | Tue Mar 17 00:00:00 1970 PST
 | |
|   385 | Fri Mar 27 00:00:00 1970 PST
 | |
|   395 | Mon Apr 06 00:00:00 1970 PST
 | |
|   405 | Tue Jan 06 00:00:00 1970 PST
 | |
|   415 | Fri Jan 16 00:00:00 1970 PST
 | |
|   425 | Mon Jan 26 00:00:00 1970 PST
 | |
|   435 | Thu Feb 05 00:00:00 1970 PST
 | |
|   445 | Sun Feb 15 00:00:00 1970 PST
 | |
|   455 | Wed Feb 25 00:00:00 1970 PST
 | |
|   465 | Sat Mar 07 00:00:00 1970 PST
 | |
|   475 | Tue Mar 17 00:00:00 1970 PST
 | |
|   485 | Fri Mar 27 00:00:00 1970 PST
 | |
|   495 | Mon Apr 06 00:00:00 1970 PST
 | |
|   505 | Tue Jan 06 00:00:00 1970 PST
 | |
|   515 | Fri Jan 16 00:00:00 1970 PST
 | |
|   525 | Mon Jan 26 00:00:00 1970 PST
 | |
|   535 | Thu Feb 05 00:00:00 1970 PST
 | |
|   545 | Sun Feb 15 00:00:00 1970 PST
 | |
|   555 | Wed Feb 25 00:00:00 1970 PST
 | |
|   565 | Sat Mar 07 00:00:00 1970 PST
 | |
|   575 | Tue Mar 17 00:00:00 1970 PST
 | |
|   585 | Fri Mar 27 00:00:00 1970 PST
 | |
|   595 | Mon Apr 06 00:00:00 1970 PST
 | |
|   605 | Tue Jan 06 00:00:00 1970 PST
 | |
|   615 | Fri Jan 16 00:00:00 1970 PST
 | |
|   625 | Mon Jan 26 00:00:00 1970 PST
 | |
|   635 | Thu Feb 05 00:00:00 1970 PST
 | |
|   645 | Sun Feb 15 00:00:00 1970 PST
 | |
|   655 | Wed Feb 25 00:00:00 1970 PST
 | |
|   665 | Sat Mar 07 00:00:00 1970 PST
 | |
|   675 | Tue Mar 17 00:00:00 1970 PST
 | |
|   685 | Fri Mar 27 00:00:00 1970 PST
 | |
|   695 | Mon Apr 06 00:00:00 1970 PST
 | |
|   705 | Tue Jan 06 00:00:00 1970 PST
 | |
|   715 | Fri Jan 16 00:00:00 1970 PST
 | |
|   725 | Mon Jan 26 00:00:00 1970 PST
 | |
|   735 | Thu Feb 05 00:00:00 1970 PST
 | |
|   745 | Sun Feb 15 00:00:00 1970 PST
 | |
|   755 | Wed Feb 25 00:00:00 1970 PST
 | |
|   765 | Sat Mar 07 00:00:00 1970 PST
 | |
|   775 | Tue Mar 17 00:00:00 1970 PST
 | |
|   785 | Fri Mar 27 00:00:00 1970 PST
 | |
|   795 | Mon Apr 06 00:00:00 1970 PST
 | |
|   805 | Tue Jan 06 00:00:00 1970 PST
 | |
|   815 | Fri Jan 16 00:00:00 1970 PST
 | |
|   825 | Mon Jan 26 00:00:00 1970 PST
 | |
|   835 | Thu Feb 05 00:00:00 1970 PST
 | |
|   845 | Sun Feb 15 00:00:00 1970 PST
 | |
|   855 | Wed Feb 25 00:00:00 1970 PST
 | |
|   865 | Sat Mar 07 00:00:00 1970 PST
 | |
|   875 | Tue Mar 17 00:00:00 1970 PST
 | |
|   885 | Fri Mar 27 00:00:00 1970 PST
 | |
|   895 | Mon Apr 06 00:00:00 1970 PST
 | |
|   905 | Tue Jan 06 00:00:00 1970 PST
 | |
|   915 | Fri Jan 16 00:00:00 1970 PST
 | |
|   925 | Mon Jan 26 00:00:00 1970 PST
 | |
|   935 | Thu Feb 05 00:00:00 1970 PST
 | |
|   945 | Sun Feb 15 00:00:00 1970 PST
 | |
|   955 | Wed Feb 25 00:00:00 1970 PST
 | |
|   965 | Sat Mar 07 00:00:00 1970 PST
 | |
|   975 | Tue Mar 17 00:00:00 1970 PST
 | |
|   985 | Fri Mar 27 00:00:00 1970 PST
 | |
|   995 | Mon Apr 06 00:00:00 1970 PST
 | |
|  1005 | 
 | |
|  1015 | 
 | |
|  1105 | 
 | |
| (103 rows)
 | |
| 
 | |
| EXPLAIN (verbose, costs off)
 | |
| DELETE FROM ft2 USING ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 2;
 | |
|                                                       QUERY PLAN                                                      
 | |
| ----------------------------------------------------------------------------------------------------------------------
 | |
|  Delete on public.ft2
 | |
|    Remote SQL: DELETE FROM "S 1"."T 1" WHERE ctid = $1
 | |
|    ->  Hash Join
 | |
|          Output: ft2.ctid, ft1.*
 | |
|          Hash Cond: (ft2.c2 = ft1.c1)
 | |
|          ->  Foreign Scan on public.ft2
 | |
|                Output: ft2.ctid, ft2.c2
 | |
|                Remote SQL: SELECT c2, ctid FROM "S 1"."T 1" FOR UPDATE
 | |
|          ->  Hash
 | |
|                Output: ft1.*, ft1.c1
 | |
|                ->  Foreign Scan on public.ft1
 | |
|                      Output: ft1.*, ft1.c1
 | |
|                      Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE ((("C 1" % 10) = 2))
 | |
| (13 rows)
 | |
| 
 | |
| DELETE FROM ft2 USING ft1 WHERE ft1.c1 = ft2.c2 AND ft1.c1 % 10 = 2;
 | |
| SELECT c1,c2,c3,c4 FROM ft2 ORDER BY c1;
 | |
|   c1  | c2  |         c3         |              c4              
 | |
| ------+-----+--------------------+------------------------------
 | |
|     1 |   1 | 00001              | Fri Jan 02 00:00:00 1970 PST
 | |
|     3 | 303 | 00003_update3      | Sun Jan 04 00:00:00 1970 PST
 | |
|     4 |   4 | 00004              | Mon Jan 05 00:00:00 1970 PST
 | |
|     6 |   6 | 00006              | Wed Jan 07 00:00:00 1970 PST
 | |
|     7 | 407 | 00007_update7      | Thu Jan 08 00:00:00 1970 PST
 | |
|     8 |   8 | 00008              | Fri Jan 09 00:00:00 1970 PST
 | |
|     9 | 509 | 00009_update9      | Sat Jan 10 00:00:00 1970 PST
 | |
|    10 |   0 | 00010              | Sun Jan 11 00:00:00 1970 PST
 | |
|    11 |   1 | 00011              | Mon Jan 12 00:00:00 1970 PST
 | |
|    13 | 303 | 00013_update3      | Wed Jan 14 00:00:00 1970 PST
 | |
|    14 |   4 | 00014              | Thu Jan 15 00:00:00 1970 PST
 | |
|    16 |   6 | 00016              | Sat Jan 17 00:00:00 1970 PST
 | |
|    17 | 407 | 00017_update7      | Sun Jan 18 00:00:00 1970 PST
 | |
|    18 |   8 | 00018              | Mon Jan 19 00:00:00 1970 PST
 | |
|    19 | 509 | 00019_update9      | Tue Jan 20 00:00:00 1970 PST
 | |
|    20 |   0 | 00020              | Wed Jan 21 00:00:00 1970 PST
 | |
|    21 |   1 | 00021              | Thu Jan 22 00:00:00 1970 PST
 | |
|    23 | 303 | 00023_update3      | Sat Jan 24 00:00:00 1970 PST
 | |
|    24 |   4 | 00024              | Sun Jan 25 00:00:00 1970 PST
 | |
|    26 |   6 | 00026              | Tue Jan 27 00:00:00 1970 PST
 | |
|    27 | 407 | 00027_update7      | Wed Jan 28 00:00:00 1970 PST
 | |
|    28 |   8 | 00028              | Thu Jan 29 00:00:00 1970 PST
 | |
|    29 | 509 | 00029_update9      | Fri Jan 30 00:00:00 1970 PST
 | |
|    30 |   0 | 00030              | Sat Jan 31 00:00:00 1970 PST
 | |
|    31 |   1 | 00031              | Sun Feb 01 00:00:00 1970 PST
 | |
|    33 | 303 | 00033_update3      | Tue Feb 03 00:00:00 1970 PST
 | |
|    34 |   4 | 00034              | Wed Feb 04 00:00:00 1970 PST
 | |
|    36 |   6 | 00036              | Fri Feb 06 00:00:00 1970 PST
 | |
|    37 | 407 | 00037_update7      | Sat Feb 07 00:00:00 1970 PST
 | |
|    38 |   8 | 00038              | Sun Feb 08 00:00:00 1970 PST
 | |
|    39 | 509 | 00039_update9      | Mon Feb 09 00:00:00 1970 PST
 | |
|    40 |   0 | 00040              | Tue Feb 10 00:00:00 1970 PST
 | |
|    41 |   1 | 00041              | Wed Feb 11 00:00:00 1970 PST
 | |
|    43 | 303 | 00043_update3      | Fri Feb 13 00:00:00 1970 PST
 | |
|    44 |   4 | 00044              | Sat Feb 14 00:00:00 1970 PST
 | |
|    46 |   6 | 00046              | Mon Feb 16 00:00:00 1970 PST
 | |
|    47 | 407 | 00047_update7      | Tue Feb 17 00:00:00 1970 PST
 | |
|    48 |   8 | 00048              | Wed Feb 18 00:00:00 1970 PST
 | |
|    49 | 509 | 00049_update9      | Thu Feb 19 00:00:00 1970 PST
 | |
|    50 |   0 | 00050              | Fri Feb 20 00:00:00 1970 PST
 | |
|    51 |   1 | 00051              | Sat Feb 21 00:00:00 1970 PST
 | |
|    53 | 303 | 00053_update3      | Mon Feb 23 00:00:00 1970 PST
 | |
|    54 |   4 | 00054              | Tue Feb 24 00:00:00 1970 PST
 | |
|    56 |   6 | 00056              | Thu Feb 26 00:00:00 1970 PST
 | |
|    57 | 407 | 00057_update7      | Fri Feb 27 00:00:00 1970 PST
 | |
|    58 |   8 | 00058              | Sat Feb 28 00:00:00 1970 PST
 | |
|    59 | 509 | 00059_update9      | Sun Mar 01 00:00:00 1970 PST
 | |
|    60 |   0 | 00060              | Mon Mar 02 00:00:00 1970 PST
 | |
|    61 |   1 | 00061              | Tue Mar 03 00:00:00 1970 PST
 | |
|    63 | 303 | 00063_update3      | Thu Mar 05 00:00:00 1970 PST
 | |
|    64 |   4 | 00064              | Fri Mar 06 00:00:00 1970 PST
 | |
|    66 |   6 | 00066              | Sun Mar 08 00:00:00 1970 PST
 | |
|    67 | 407 | 00067_update7      | Mon Mar 09 00:00:00 1970 PST
 | |
|    68 |   8 | 00068              | Tue Mar 10 00:00:00 1970 PST
 | |
|    69 | 509 | 00069_update9      | Wed Mar 11 00:00:00 1970 PST
 | |
|    70 |   0 | 00070              | Thu Mar 12 00:00:00 1970 PST
 | |
|    71 |   1 | 00071              | Fri Mar 13 00:00:00 1970 PST
 | |
|    73 | 303 | 00073_update3      | Sun Mar 15 00:00:00 1970 PST
 | |
|    74 |   4 | 00074              | Mon Mar 16 00:00:00 1970 PST
 | |
|    76 |   6 | 00076              | Wed Mar 18 00:00:00 1970 PST
 | |
|    77 | 407 | 00077_update7      | Thu Mar 19 00:00:00 1970 PST
 | |
|    78 |   8 | 00078              | Fri Mar 20 00:00:00 1970 PST
 | |
|    79 | 509 | 00079_update9      | Sat Mar 21 00:00:00 1970 PST
 | |
|    80 |   0 | 00080              | Sun Mar 22 00:00:00 1970 PST
 | |
|    81 |   1 | 00081              | Mon Mar 23 00:00:00 1970 PST
 | |
|    83 | 303 | 00083_update3      | Wed Mar 25 00:00:00 1970 PST
 | |
|    84 |   4 | 00084              | Thu Mar 26 00:00:00 1970 PST
 | |
|    86 |   6 | 00086              | Sat Mar 28 00:00:00 1970 PST
 | |
|    87 | 407 | 00087_update7      | Sun Mar 29 00:00:00 1970 PST
 | |
|    88 |   8 | 00088              | Mon Mar 30 00:00:00 1970 PST
 | |
|    89 | 509 | 00089_update9      | Tue Mar 31 00:00:00 1970 PST
 | |
|    90 |   0 | 00090              | Wed Apr 01 00:00:00 1970 PST
 | |
|    91 |   1 | 00091              | Thu Apr 02 00:00:00 1970 PST
 | |
|    93 | 303 | 00093_update3      | Sat Apr 04 00:00:00 1970 PST
 | |
|    94 |   4 | 00094              | Sun Apr 05 00:00:00 1970 PST
 | |
|    96 |   6 | 00096              | Tue Apr 07 00:00:00 1970 PST
 | |
|    97 | 407 | 00097_update7      | Wed Apr 08 00:00:00 1970 PST
 | |
|    98 |   8 | 00098              | Thu Apr 09 00:00:00 1970 PST
 | |
|    99 | 509 | 00099_update9      | Fri Apr 10 00:00:00 1970 PST
 | |
|   100 |   0 | 00100              | Thu Jan 01 00:00:00 1970 PST
 | |
|   101 |   1 | 00101              | Fri Jan 02 00:00:00 1970 PST
 | |
|   103 | 303 | 00103_update3      | Sun Jan 04 00:00:00 1970 PST
 | |
|   104 |   4 | 00104              | Mon Jan 05 00:00:00 1970 PST
 | |
|   106 |   6 | 00106              | Wed Jan 07 00:00:00 1970 PST
 | |
|   107 | 407 | 00107_update7      | Thu Jan 08 00:00:00 1970 PST
 | |
|   108 |   8 | 00108              | Fri Jan 09 00:00:00 1970 PST
 | |
|   109 | 509 | 00109_update9      | Sat Jan 10 00:00:00 1970 PST
 | |
|   110 |   0 | 00110              | Sun Jan 11 00:00:00 1970 PST
 | |
|   111 |   1 | 00111              | Mon Jan 12 00:00:00 1970 PST
 | |
|   113 | 303 | 00113_update3      | Wed Jan 14 00:00:00 1970 PST
 | |
|   114 |   4 | 00114              | Thu Jan 15 00:00:00 1970 PST
 | |
|   116 |   6 | 00116              | Sat Jan 17 00:00:00 1970 PST
 | |
|   117 | 407 | 00117_update7      | Sun Jan 18 00:00:00 1970 PST
 | |
|   118 |   8 | 00118              | Mon Jan 19 00:00:00 1970 PST
 | |
|   119 | 509 | 00119_update9      | Tue Jan 20 00:00:00 1970 PST
 | |
|   120 |   0 | 00120              | Wed Jan 21 00:00:00 1970 PST
 | |
|   121 |   1 | 00121              | Thu Jan 22 00:00:00 1970 PST
 | |
|   123 | 303 | 00123_update3      | Sat Jan 24 00:00:00 1970 PST
 | |
|   124 |   4 | 00124              | Sun Jan 25 00:00:00 1970 PST
 | |
|   126 |   6 | 00126              | Tue Jan 27 00:00:00 1970 PST
 | |
|   127 | 407 | 00127_update7      | Wed Jan 28 00:00:00 1970 PST
 | |
|   128 |   8 | 00128              | Thu Jan 29 00:00:00 1970 PST
 | |
|   129 | 509 | 00129_update9      | Fri Jan 30 00:00:00 1970 PST
 | |
|   130 |   0 | 00130              | Sat Jan 31 00:00:00 1970 PST
 | |
|   131 |   1 | 00131              | Sun Feb 01 00:00:00 1970 PST
 | |
|   133 | 303 | 00133_update3      | Tue Feb 03 00:00:00 1970 PST
 | |
|   134 |   4 | 00134              | Wed Feb 04 00:00:00 1970 PST
 | |
|   136 |   6 | 00136              | Fri Feb 06 00:00:00 1970 PST
 | |
|   137 | 407 | 00137_update7      | Sat Feb 07 00:00:00 1970 PST
 | |
|   138 |   8 | 00138              | Sun Feb 08 00:00:00 1970 PST
 | |
|   139 | 509 | 00139_update9      | Mon Feb 09 00:00:00 1970 PST
 | |
|   140 |   0 | 00140              | Tue Feb 10 00:00:00 1970 PST
 | |
|   141 |   1 | 00141              | Wed Feb 11 00:00:00 1970 PST
 | |
|   143 | 303 | 00143_update3      | Fri Feb 13 00:00:00 1970 PST
 | |
|   144 |   4 | 00144              | Sat Feb 14 00:00:00 1970 PST
 | |
|   146 |   6 | 00146              | Mon Feb 16 00:00:00 1970 PST
 | |
|   147 | 407 | 00147_update7      | Tue Feb 17 00:00:00 1970 PST
 | |
|   148 |   8 | 00148              | Wed Feb 18 00:00:00 1970 PST
 | |
|   149 | 509 | 00149_update9      | Thu Feb 19 00:00:00 1970 PST
 | |
|   150 |   0 | 00150              | Fri Feb 20 00:00:00 1970 PST
 | |
|   151 |   1 | 00151              | Sat Feb 21 00:00:00 1970 PST
 | |
|   153 | 303 | 00153_update3      | Mon Feb 23 00:00:00 1970 PST
 | |
|   154 |   4 | 00154              | Tue Feb 24 00:00:00 1970 PST
 | |
|   156 |   6 | 00156              | Thu Feb 26 00:00:00 1970 PST
 | |
|   157 | 407 | 00157_update7      | Fri Feb 27 00:00:00 1970 PST
 | |
|   158 |   8 | 00158              | Sat Feb 28 00:00:00 1970 PST
 | |
|   159 | 509 | 00159_update9      | Sun Mar 01 00:00:00 1970 PST
 | |
|   160 |   0 | 00160              | Mon Mar 02 00:00:00 1970 PST
 | |
|   161 |   1 | 00161              | Tue Mar 03 00:00:00 1970 PST
 | |
|   163 | 303 | 00163_update3      | Thu Mar 05 00:00:00 1970 PST
 | |
|   164 |   4 | 00164              | Fri Mar 06 00:00:00 1970 PST
 | |
|   166 |   6 | 00166              | Sun Mar 08 00:00:00 1970 PST
 | |
|   167 | 407 | 00167_update7      | Mon Mar 09 00:00:00 1970 PST
 | |
|   168 |   8 | 00168              | Tue Mar 10 00:00:00 1970 PST
 | |
|   169 | 509 | 00169_update9      | Wed Mar 11 00:00:00 1970 PST
 | |
|   170 |   0 | 00170              | Thu Mar 12 00:00:00 1970 PST
 | |
|   171 |   1 | 00171              | Fri Mar 13 00:00:00 1970 PST
 | |
|   173 | 303 | 00173_update3      | Sun Mar 15 00:00:00 1970 PST
 | |
|   174 |   4 | 00174              | Mon Mar 16 00:00:00 1970 PST
 | |
|   176 |   6 | 00176              | Wed Mar 18 00:00:00 1970 PST
 | |
|   177 | 407 | 00177_update7      | Thu Mar 19 00:00:00 1970 PST
 | |
|   178 |   8 | 00178              | Fri Mar 20 00:00:00 1970 PST
 | |
|   179 | 509 | 00179_update9      | Sat Mar 21 00:00:00 1970 PST
 | |
|   180 |   0 | 00180              | Sun Mar 22 00:00:00 1970 PST
 | |
|   181 |   1 | 00181              | Mon Mar 23 00:00:00 1970 PST
 | |
|   183 | 303 | 00183_update3      | Wed Mar 25 00:00:00 1970 PST
 | |
|   184 |   4 | 00184              | Thu Mar 26 00:00:00 1970 PST
 | |
|   186 |   6 | 00186              | Sat Mar 28 00:00:00 1970 PST
 | |
|   187 | 407 | 00187_update7      | Sun Mar 29 00:00:00 1970 PST
 | |
|   188 |   8 | 00188              | Mon Mar 30 00:00:00 1970 PST
 | |
|   189 | 509 | 00189_update9      | Tue Mar 31 00:00:00 1970 PST
 | |
|   190 |   0 | 00190              | Wed Apr 01 00:00:00 1970 PST
 | |
|   191 |   1 | 00191              | Thu Apr 02 00:00:00 1970 PST
 | |
|   193 | 303 | 00193_update3      | Sat Apr 04 00:00:00 1970 PST
 | |
|   194 |   4 | 00194              | Sun Apr 05 00:00:00 1970 PST
 | |
|   196 |   6 | 00196              | Tue Apr 07 00:00:00 1970 PST
 | |
|   197 | 407 | 00197_update7      | Wed Apr 08 00:00:00 1970 PST
 | |
|   198 |   8 | 00198              | Thu Apr 09 00:00:00 1970 PST
 | |
|   199 | 509 | 00199_update9      | Fri Apr 10 00:00:00 1970 PST
 | |
|   200 |   0 | 00200              | Thu Jan 01 00:00:00 1970 PST
 | |
|   201 |   1 | 00201              | Fri Jan 02 00:00:00 1970 PST
 | |
|   203 | 303 | 00203_update3      | Sun Jan 04 00:00:00 1970 PST
 | |
|   204 |   4 | 00204              | Mon Jan 05 00:00:00 1970 PST
 | |
|   206 |   6 | 00206              | Wed Jan 07 00:00:00 1970 PST
 | |
|   207 | 407 | 00207_update7      | Thu Jan 08 00:00:00 1970 PST
 | |
|   208 |   8 | 00208              | Fri Jan 09 00:00:00 1970 PST
 | |
|   209 | 509 | 00209_update9      | Sat Jan 10 00:00:00 1970 PST
 | |
|   210 |   0 | 00210              | Sun Jan 11 00:00:00 1970 PST
 | |
|   211 |   1 | 00211              | Mon Jan 12 00:00:00 1970 PST
 | |
|   213 | 303 | 00213_update3      | Wed Jan 14 00:00:00 1970 PST
 | |
|   214 |   4 | 00214              | Thu Jan 15 00:00:00 1970 PST
 | |
|   216 |   6 | 00216              | Sat Jan 17 00:00:00 1970 PST
 | |
|   217 | 407 | 00217_update7      | Sun Jan 18 00:00:00 1970 PST
 | |
|   218 |   8 | 00218              | Mon Jan 19 00:00:00 1970 PST
 | |
|   219 | 509 | 00219_update9      | Tue Jan 20 00:00:00 1970 PST
 | |
|   220 |   0 | 00220              | Wed Jan 21 00:00:00 1970 PST
 | |
|   221 |   1 | 00221              | Thu Jan 22 00:00:00 1970 PST
 | |
|   223 | 303 | 00223_update3      | Sat Jan 24 00:00:00 1970 PST
 | |
|   224 |   4 | 00224              | Sun Jan 25 00:00:00 1970 PST
 | |
|   226 |   6 | 00226              | Tue Jan 27 00:00:00 1970 PST
 | |
|   227 | 407 | 00227_update7      | Wed Jan 28 00:00:00 1970 PST
 | |
|   228 |   8 | 00228              | Thu Jan 29 00:00:00 1970 PST
 | |
|   229 | 509 | 00229_update9      | Fri Jan 30 00:00:00 1970 PST
 | |
|   230 |   0 | 00230              | Sat Jan 31 00:00:00 1970 PST
 | |
|   231 |   1 | 00231              | Sun Feb 01 00:00:00 1970 PST
 | |
|   233 | 303 | 00233_update3      | Tue Feb 03 00:00:00 1970 PST
 | |
|   234 |   4 | 00234              | Wed Feb 04 00:00:00 1970 PST
 | |
|   236 |   6 | 00236              | Fri Feb 06 00:00:00 1970 PST
 | |
|   237 | 407 | 00237_update7      | Sat Feb 07 00:00:00 1970 PST
 | |
|   238 |   8 | 00238              | Sun Feb 08 00:00:00 1970 PST
 | |
|   239 | 509 | 00239_update9      | Mon Feb 09 00:00:00 1970 PST
 | |
|   240 |   0 | 00240              | Tue Feb 10 00:00:00 1970 PST
 | |
|   241 |   1 | 00241              | Wed Feb 11 00:00:00 1970 PST
 | |
|   243 | 303 | 00243_update3      | Fri Feb 13 00:00:00 1970 PST
 | |
|   244 |   4 | 00244              | Sat Feb 14 00:00:00 1970 PST
 | |
|   246 |   6 | 00246              | Mon Feb 16 00:00:00 1970 PST
 | |
|   247 | 407 | 00247_update7      | Tue Feb 17 00:00:00 1970 PST
 | |
|   248 |   8 | 00248              | Wed Feb 18 00:00:00 1970 PST
 | |
|   249 | 509 | 00249_update9      | Thu Feb 19 00:00:00 1970 PST
 | |
|   250 |   0 | 00250              | Fri Feb 20 00:00:00 1970 PST
 | |
|   251 |   1 | 00251              | Sat Feb 21 00:00:00 1970 PST
 | |
|   253 | 303 | 00253_update3      | Mon Feb 23 00:00:00 1970 PST
 | |
|   254 |   4 | 00254              | Tue Feb 24 00:00:00 1970 PST
 | |
|   256 |   6 | 00256              | Thu Feb 26 00:00:00 1970 PST
 | |
|   257 | 407 | 00257_update7      | Fri Feb 27 00:00:00 1970 PST
 | |
|   258 |   8 | 00258              | Sat Feb 28 00:00:00 1970 PST
 | |
|   259 | 509 | 00259_update9      | Sun Mar 01 00:00:00 1970 PST
 | |
|   260 |   0 | 00260              | Mon Mar 02 00:00:00 1970 PST
 | |
|   261 |   1 | 00261              | Tue Mar 03 00:00:00 1970 PST
 | |
|   263 | 303 | 00263_update3      | Thu Mar 05 00:00:00 1970 PST
 | |
|   264 |   4 | 00264              | Fri Mar 06 00:00:00 1970 PST
 | |
|   266 |   6 | 00266              | Sun Mar 08 00:00:00 1970 PST
 | |
|   267 | 407 | 00267_update7      | Mon Mar 09 00:00:00 1970 PST
 | |
|   268 |   8 | 00268              | Tue Mar 10 00:00:00 1970 PST
 | |
|   269 | 509 | 00269_update9      | Wed Mar 11 00:00:00 1970 PST
 | |
|   270 |   0 | 00270              | Thu Mar 12 00:00:00 1970 PST
 | |
|   271 |   1 | 00271              | Fri Mar 13 00:00:00 1970 PST
 | |
|   273 | 303 | 00273_update3      | Sun Mar 15 00:00:00 1970 PST
 | |
|   274 |   4 | 00274              | Mon Mar 16 00:00:00 1970 PST
 | |
|   276 |   6 | 00276              | Wed Mar 18 00:00:00 1970 PST
 | |
|   277 | 407 | 00277_update7      | Thu Mar 19 00:00:00 1970 PST
 | |
|   278 |   8 | 00278              | Fri Mar 20 00:00:00 1970 PST
 | |
|   279 | 509 | 00279_update9      | Sat Mar 21 00:00:00 1970 PST
 | |
|   280 |   0 | 00280              | Sun Mar 22 00:00:00 1970 PST
 | |
|   281 |   1 | 00281              | Mon Mar 23 00:00:00 1970 PST
 | |
|   283 | 303 | 00283_update3      | Wed Mar 25 00:00:00 1970 PST
 | |
|   284 |   4 | 00284              | Thu Mar 26 00:00:00 1970 PST
 | |
|   286 |   6 | 00286              | Sat Mar 28 00:00:00 1970 PST
 | |
|   287 | 407 | 00287_update7      | Sun Mar 29 00:00:00 1970 PST
 | |
|   288 |   8 | 00288              | Mon Mar 30 00:00:00 1970 PST
 | |
|   289 | 509 | 00289_update9      | Tue Mar 31 00:00:00 1970 PST
 | |
|   290 |   0 | 00290              | Wed Apr 01 00:00:00 1970 PST
 | |
|   291 |   1 | 00291              | Thu Apr 02 00:00:00 1970 PST
 | |
|   293 | 303 | 00293_update3      | Sat Apr 04 00:00:00 1970 PST
 | |
|   294 |   4 | 00294              | Sun Apr 05 00:00:00 1970 PST
 | |
|   296 |   6 | 00296              | Tue Apr 07 00:00:00 1970 PST
 | |
|   297 | 407 | 00297_update7      | Wed Apr 08 00:00:00 1970 PST
 | |
|   298 |   8 | 00298              | Thu Apr 09 00:00:00 1970 PST
 | |
|   299 | 509 | 00299_update9      | Fri Apr 10 00:00:00 1970 PST
 | |
|   300 |   0 | 00300              | Thu Jan 01 00:00:00 1970 PST
 | |
|   301 |   1 | 00301              | Fri Jan 02 00:00:00 1970 PST
 | |
|   303 | 303 | 00303_update3      | Sun Jan 04 00:00:00 1970 PST
 | |
|   304 |   4 | 00304              | Mon Jan 05 00:00:00 1970 PST
 | |
|   306 |   6 | 00306              | Wed Jan 07 00:00:00 1970 PST
 | |
|   307 | 407 | 00307_update7      | Thu Jan 08 00:00:00 1970 PST
 | |
|   308 |   8 | 00308              | Fri Jan 09 00:00:00 1970 PST
 | |
|   309 | 509 | 00309_update9      | Sat Jan 10 00:00:00 1970 PST
 | |
|   310 |   0 | 00310              | Sun Jan 11 00:00:00 1970 PST
 | |
|   311 |   1 | 00311              | Mon Jan 12 00:00:00 1970 PST
 | |
|   313 | 303 | 00313_update3      | Wed Jan 14 00:00:00 1970 PST
 | |
|   314 |   4 | 00314              | Thu Jan 15 00:00:00 1970 PST
 | |
|   316 |   6 | 00316              | Sat Jan 17 00:00:00 1970 PST
 | |
|   317 | 407 | 00317_update7      | Sun Jan 18 00:00:00 1970 PST
 | |
|   318 |   8 | 00318              | Mon Jan 19 00:00:00 1970 PST
 | |
|   319 | 509 | 00319_update9      | Tue Jan 20 00:00:00 1970 PST
 | |
|   320 |   0 | 00320              | Wed Jan 21 00:00:00 1970 PST
 | |
|   321 |   1 | 00321              | Thu Jan 22 00:00:00 1970 PST
 | |
|   323 | 303 | 00323_update3      | Sat Jan 24 00:00:00 1970 PST
 | |
|   324 |   4 | 00324              | Sun Jan 25 00:00:00 1970 PST
 | |
|   326 |   6 | 00326              | Tue Jan 27 00:00:00 1970 PST
 | |
|   327 | 407 | 00327_update7      | Wed Jan 28 00:00:00 1970 PST
 | |
|   328 |   8 | 00328              | Thu Jan 29 00:00:00 1970 PST
 | |
|   329 | 509 | 00329_update9      | Fri Jan 30 00:00:00 1970 PST
 | |
|   330 |   0 | 00330              | Sat Jan 31 00:00:00 1970 PST
 | |
|   331 |   1 | 00331              | Sun Feb 01 00:00:00 1970 PST
 | |
|   333 | 303 | 00333_update3      | Tue Feb 03 00:00:00 1970 PST
 | |
|   334 |   4 | 00334              | Wed Feb 04 00:00:00 1970 PST
 | |
|   336 |   6 | 00336              | Fri Feb 06 00:00:00 1970 PST
 | |
|   337 | 407 | 00337_update7      | Sat Feb 07 00:00:00 1970 PST
 | |
|   338 |   8 | 00338              | Sun Feb 08 00:00:00 1970 PST
 | |
|   339 | 509 | 00339_update9      | Mon Feb 09 00:00:00 1970 PST
 | |
|   340 |   0 | 00340              | Tue Feb 10 00:00:00 1970 PST
 | |
|   341 |   1 | 00341              | Wed Feb 11 00:00:00 1970 PST
 | |
|   343 | 303 | 00343_update3      | Fri Feb 13 00:00:00 1970 PST
 | |
|   344 |   4 | 00344              | Sat Feb 14 00:00:00 1970 PST
 | |
|   346 |   6 | 00346              | Mon Feb 16 00:00:00 1970 PST
 | |
|   347 | 407 | 00347_update7      | Tue Feb 17 00:00:00 1970 PST
 | |
|   348 |   8 | 00348              | Wed Feb 18 00:00:00 1970 PST
 | |
|   349 | 509 | 00349_update9      | Thu Feb 19 00:00:00 1970 PST
 | |
|   350 |   0 | 00350              | Fri Feb 20 00:00:00 1970 PST
 | |
|   351 |   1 | 00351              | Sat Feb 21 00:00:00 1970 PST
 | |
|   353 | 303 | 00353_update3      | Mon Feb 23 00:00:00 1970 PST
 | |
|   354 |   4 | 00354              | Tue Feb 24 00:00:00 1970 PST
 | |
|   356 |   6 | 00356              | Thu Feb 26 00:00:00 1970 PST
 | |
|   357 | 407 | 00357_update7      | Fri Feb 27 00:00:00 1970 PST
 | |
|   358 |   8 | 00358              | Sat Feb 28 00:00:00 1970 PST
 | |
|   359 | 509 | 00359_update9      | Sun Mar 01 00:00:00 1970 PST
 | |
|   360 |   0 | 00360              | Mon Mar 02 00:00:00 1970 PST
 | |
|   361 |   1 | 00361              | Tue Mar 03 00:00:00 1970 PST
 | |
|   363 | 303 | 00363_update3      | Thu Mar 05 00:00:00 1970 PST
 | |
|   364 |   4 | 00364              | Fri Mar 06 00:00:00 1970 PST
 | |
|   366 |   6 | 00366              | Sun Mar 08 00:00:00 1970 PST
 | |
|   367 | 407 | 00367_update7      | Mon Mar 09 00:00:00 1970 PST
 | |
|   368 |   8 | 00368              | Tue Mar 10 00:00:00 1970 PST
 | |
|   369 | 509 | 00369_update9      | Wed Mar 11 00:00:00 1970 PST
 | |
|   370 |   0 | 00370              | Thu Mar 12 00:00:00 1970 PST
 | |
|   371 |   1 | 00371              | Fri Mar 13 00:00:00 1970 PST
 | |
|   373 | 303 | 00373_update3      | Sun Mar 15 00:00:00 1970 PST
 | |
|   374 |   4 | 00374              | Mon Mar 16 00:00:00 1970 PST
 | |
|   376 |   6 | 00376              | Wed Mar 18 00:00:00 1970 PST
 | |
|   377 | 407 | 00377_update7      | Thu Mar 19 00:00:00 1970 PST
 | |
|   378 |   8 | 00378              | Fri Mar 20 00:00:00 1970 PST
 | |
|   379 | 509 | 00379_update9      | Sat Mar 21 00:00:00 1970 PST
 | |
|   380 |   0 | 00380              | Sun Mar 22 00:00:00 1970 PST
 | |
|   381 |   1 | 00381              | Mon Mar 23 00:00:00 1970 PST
 | |
|   383 | 303 | 00383_update3      | Wed Mar 25 00:00:00 1970 PST
 | |
|   384 |   4 | 00384              | Thu Mar 26 00:00:00 1970 PST
 | |
|   386 |   6 | 00386              | Sat Mar 28 00:00:00 1970 PST
 | |
|   387 | 407 | 00387_update7      | Sun Mar 29 00:00:00 1970 PST
 | |
|   388 |   8 | 00388              | Mon Mar 30 00:00:00 1970 PST
 | |
|   389 | 509 | 00389_update9      | Tue Mar 31 00:00:00 1970 PST
 | |
|   390 |   0 | 00390              | Wed Apr 01 00:00:00 1970 PST
 | |
|   391 |   1 | 00391              | Thu Apr 02 00:00:00 1970 PST
 | |
|   393 | 303 | 00393_update3      | Sat Apr 04 00:00:00 1970 PST
 | |
|   394 |   4 | 00394              | Sun Apr 05 00:00:00 1970 PST
 | |
|   396 |   6 | 00396              | Tue Apr 07 00:00:00 1970 PST
 | |
|   397 | 407 | 00397_update7      | Wed Apr 08 00:00:00 1970 PST
 | |
|   398 |   8 | 00398              | Thu Apr 09 00:00:00 1970 PST
 | |
|   399 | 509 | 00399_update9      | Fri Apr 10 00:00:00 1970 PST
 | |
|   400 |   0 | 00400              | Thu Jan 01 00:00:00 1970 PST
 | |
|   401 |   1 | 00401              | Fri Jan 02 00:00:00 1970 PST
 | |
|   403 | 303 | 00403_update3      | Sun Jan 04 00:00:00 1970 PST
 | |
|   404 |   4 | 00404              | Mon Jan 05 00:00:00 1970 PST
 | |
|   406 |   6 | 00406              | Wed Jan 07 00:00:00 1970 PST
 | |
|   407 | 407 | 00407_update7      | Thu Jan 08 00:00:00 1970 PST
 | |
|   408 |   8 | 00408              | Fri Jan 09 00:00:00 1970 PST
 | |
|   409 | 509 | 00409_update9      | Sat Jan 10 00:00:00 1970 PST
 | |
|   410 |   0 | 00410              | Sun Jan 11 00:00:00 1970 PST
 | |
|   411 |   1 | 00411              | Mon Jan 12 00:00:00 1970 PST
 | |
|   413 | 303 | 00413_update3      | Wed Jan 14 00:00:00 1970 PST
 | |
|   414 |   4 | 00414              | Thu Jan 15 00:00:00 1970 PST
 | |
|   416 |   6 | 00416              | Sat Jan 17 00:00:00 1970 PST
 | |
|   417 | 407 | 00417_update7      | Sun Jan 18 00:00:00 1970 PST
 | |
|   418 |   8 | 00418              | Mon Jan 19 00:00:00 1970 PST
 | |
|   419 | 509 | 00419_update9      | Tue Jan 20 00:00:00 1970 PST
 | |
|   420 |   0 | 00420              | Wed Jan 21 00:00:00 1970 PST
 | |
|   421 |   1 | 00421              | Thu Jan 22 00:00:00 1970 PST
 | |
|   423 | 303 | 00423_update3      | Sat Jan 24 00:00:00 1970 PST
 | |
|   424 |   4 | 00424              | Sun Jan 25 00:00:00 1970 PST
 | |
|   426 |   6 | 00426              | Tue Jan 27 00:00:00 1970 PST
 | |
|   427 | 407 | 00427_update7      | Wed Jan 28 00:00:00 1970 PST
 | |
|   428 |   8 | 00428              | Thu Jan 29 00:00:00 1970 PST
 | |
|   429 | 509 | 00429_update9      | Fri Jan 30 00:00:00 1970 PST
 | |
|   430 |   0 | 00430              | Sat Jan 31 00:00:00 1970 PST
 | |
|   431 |   1 | 00431              | Sun Feb 01 00:00:00 1970 PST
 | |
|   433 | 303 | 00433_update3      | Tue Feb 03 00:00:00 1970 PST
 | |
|   434 |   4 | 00434              | Wed Feb 04 00:00:00 1970 PST
 | |
|   436 |   6 | 00436              | Fri Feb 06 00:00:00 1970 PST
 | |
|   437 | 407 | 00437_update7      | Sat Feb 07 00:00:00 1970 PST
 | |
|   438 |   8 | 00438              | Sun Feb 08 00:00:00 1970 PST
 | |
|   439 | 509 | 00439_update9      | Mon Feb 09 00:00:00 1970 PST
 | |
|   440 |   0 | 00440              | Tue Feb 10 00:00:00 1970 PST
 | |
|   441 |   1 | 00441              | Wed Feb 11 00:00:00 1970 PST
 | |
|   443 | 303 | 00443_update3      | Fri Feb 13 00:00:00 1970 PST
 | |
|   444 |   4 | 00444              | Sat Feb 14 00:00:00 1970 PST
 | |
|   446 |   6 | 00446              | Mon Feb 16 00:00:00 1970 PST
 | |
|   447 | 407 | 00447_update7      | Tue Feb 17 00:00:00 1970 PST
 | |
|   448 |   8 | 00448              | Wed Feb 18 00:00:00 1970 PST
 | |
|   449 | 509 | 00449_update9      | Thu Feb 19 00:00:00 1970 PST
 | |
|   450 |   0 | 00450              | Fri Feb 20 00:00:00 1970 PST
 | |
|   451 |   1 | 00451              | Sat Feb 21 00:00:00 1970 PST
 | |
|   453 | 303 | 00453_update3      | Mon Feb 23 00:00:00 1970 PST
 | |
|   454 |   4 | 00454              | Tue Feb 24 00:00:00 1970 PST
 | |
|   456 |   6 | 00456              | Thu Feb 26 00:00:00 1970 PST
 | |
|   457 | 407 | 00457_update7      | Fri Feb 27 00:00:00 1970 PST
 | |
|   458 |   8 | 00458              | Sat Feb 28 00:00:00 1970 PST
 | |
|   459 | 509 | 00459_update9      | Sun Mar 01 00:00:00 1970 PST
 | |
|   460 |   0 | 00460              | Mon Mar 02 00:00:00 1970 PST
 | |
|   461 |   1 | 00461              | Tue Mar 03 00:00:00 1970 PST
 | |
|   463 | 303 | 00463_update3      | Thu Mar 05 00:00:00 1970 PST
 | |
|   464 |   4 | 00464              | Fri Mar 06 00:00:00 1970 PST
 | |
|   466 |   6 | 00466              | Sun Mar 08 00:00:00 1970 PST
 | |
|   467 | 407 | 00467_update7      | Mon Mar 09 00:00:00 1970 PST
 | |
|   468 |   8 | 00468              | Tue Mar 10 00:00:00 1970 PST
 | |
|   469 | 509 | 00469_update9      | Wed Mar 11 00:00:00 1970 PST
 | |
|   470 |   0 | 00470              | Thu Mar 12 00:00:00 1970 PST
 | |
|   471 |   1 | 00471              | Fri Mar 13 00:00:00 1970 PST
 | |
|   473 | 303 | 00473_update3      | Sun Mar 15 00:00:00 1970 PST
 | |
|   474 |   4 | 00474              | Mon Mar 16 00:00:00 1970 PST
 | |
|   476 |   6 | 00476              | Wed Mar 18 00:00:00 1970 PST
 | |
|   477 | 407 | 00477_update7      | Thu Mar 19 00:00:00 1970 PST
 | |
|   478 |   8 | 00478              | Fri Mar 20 00:00:00 1970 PST
 | |
|   479 | 509 | 00479_update9      | Sat Mar 21 00:00:00 1970 PST
 | |
|   480 |   0 | 00480              | Sun Mar 22 00:00:00 1970 PST
 | |
|   481 |   1 | 00481              | Mon Mar 23 00:00:00 1970 PST
 | |
|   483 | 303 | 00483_update3      | Wed Mar 25 00:00:00 1970 PST
 | |
|   484 |   4 | 00484              | Thu Mar 26 00:00:00 1970 PST
 | |
|   486 |   6 | 00486              | Sat Mar 28 00:00:00 1970 PST
 | |
|   487 | 407 | 00487_update7      | Sun Mar 29 00:00:00 1970 PST
 | |
|   488 |   8 | 00488              | Mon Mar 30 00:00:00 1970 PST
 | |
|   489 | 509 | 00489_update9      | Tue Mar 31 00:00:00 1970 PST
 | |
|   490 |   0 | 00490              | Wed Apr 01 00:00:00 1970 PST
 | |
|   491 |   1 | 00491              | Thu Apr 02 00:00:00 1970 PST
 | |
|   493 | 303 | 00493_update3      | Sat Apr 04 00:00:00 1970 PST
 | |
|   494 |   4 | 00494              | Sun Apr 05 00:00:00 1970 PST
 | |
|   496 |   6 | 00496              | Tue Apr 07 00:00:00 1970 PST
 | |
|   497 | 407 | 00497_update7      | Wed Apr 08 00:00:00 1970 PST
 | |
|   498 |   8 | 00498              | Thu Apr 09 00:00:00 1970 PST
 | |
|   499 | 509 | 00499_update9      | Fri Apr 10 00:00:00 1970 PST
 | |
|   500 |   0 | 00500              | Thu Jan 01 00:00:00 1970 PST
 | |
|   501 |   1 | 00501              | Fri Jan 02 00:00:00 1970 PST
 | |
|   503 | 303 | 00503_update3      | Sun Jan 04 00:00:00 1970 PST
 | |
|   504 |   4 | 00504              | Mon Jan 05 00:00:00 1970 PST
 | |
|   506 |   6 | 00506              | Wed Jan 07 00:00:00 1970 PST
 | |
|   507 | 407 | 00507_update7      | Thu Jan 08 00:00:00 1970 PST
 | |
|   508 |   8 | 00508              | Fri Jan 09 00:00:00 1970 PST
 | |
|   509 | 509 | 00509_update9      | Sat Jan 10 00:00:00 1970 PST
 | |
|   510 |   0 | 00510              | Sun Jan 11 00:00:00 1970 PST
 | |
|   511 |   1 | 00511              | Mon Jan 12 00:00:00 1970 PST
 | |
|   513 | 303 | 00513_update3      | Wed Jan 14 00:00:00 1970 PST
 | |
|   514 |   4 | 00514              | Thu Jan 15 00:00:00 1970 PST
 | |
|   516 |   6 | 00516              | Sat Jan 17 00:00:00 1970 PST
 | |
|   517 | 407 | 00517_update7      | Sun Jan 18 00:00:00 1970 PST
 | |
|   518 |   8 | 00518              | Mon Jan 19 00:00:00 1970 PST
 | |
|   519 | 509 | 00519_update9      | Tue Jan 20 00:00:00 1970 PST
 | |
|   520 |   0 | 00520              | Wed Jan 21 00:00:00 1970 PST
 | |
|   521 |   1 | 00521              | Thu Jan 22 00:00:00 1970 PST
 | |
|   523 | 303 | 00523_update3      | Sat Jan 24 00:00:00 1970 PST
 | |
|   524 |   4 | 00524              | Sun Jan 25 00:00:00 1970 PST
 | |
|   526 |   6 | 00526              | Tue Jan 27 00:00:00 1970 PST
 | |
|   527 | 407 | 00527_update7      | Wed Jan 28 00:00:00 1970 PST
 | |
|   528 |   8 | 00528              | Thu Jan 29 00:00:00 1970 PST
 | |
|   529 | 509 | 00529_update9      | Fri Jan 30 00:00:00 1970 PST
 | |
|   530 |   0 | 00530              | Sat Jan 31 00:00:00 1970 PST
 | |
|   531 |   1 | 00531              | Sun Feb 01 00:00:00 1970 PST
 | |
|   533 | 303 | 00533_update3      | Tue Feb 03 00:00:00 1970 PST
 | |
|   534 |   4 | 00534              | Wed Feb 04 00:00:00 1970 PST
 | |
|   536 |   6 | 00536              | Fri Feb 06 00:00:00 1970 PST
 | |
|   537 | 407 | 00537_update7      | Sat Feb 07 00:00:00 1970 PST
 | |
|   538 |   8 | 00538              | Sun Feb 08 00:00:00 1970 PST
 | |
|   539 | 509 | 00539_update9      | Mon Feb 09 00:00:00 1970 PST
 | |
|   540 |   0 | 00540              | Tue Feb 10 00:00:00 1970 PST
 | |
|   541 |   1 | 00541              | Wed Feb 11 00:00:00 1970 PST
 | |
|   543 | 303 | 00543_update3      | Fri Feb 13 00:00:00 1970 PST
 | |
|   544 |   4 | 00544              | Sat Feb 14 00:00:00 1970 PST
 | |
|   546 |   6 | 00546              | Mon Feb 16 00:00:00 1970 PST
 | |
|   547 | 407 | 00547_update7      | Tue Feb 17 00:00:00 1970 PST
 | |
|   548 |   8 | 00548              | Wed Feb 18 00:00:00 1970 PST
 | |
|   549 | 509 | 00549_update9      | Thu Feb 19 00:00:00 1970 PST
 | |
|   550 |   0 | 00550              | Fri Feb 20 00:00:00 1970 PST
 | |
|   551 |   1 | 00551              | Sat Feb 21 00:00:00 1970 PST
 | |
|   553 | 303 | 00553_update3      | Mon Feb 23 00:00:00 1970 PST
 | |
|   554 |   4 | 00554              | Tue Feb 24 00:00:00 1970 PST
 | |
|   556 |   6 | 00556              | Thu Feb 26 00:00:00 1970 PST
 | |
|   557 | 407 | 00557_update7      | Fri Feb 27 00:00:00 1970 PST
 | |
|   558 |   8 | 00558              | Sat Feb 28 00:00:00 1970 PST
 | |
|   559 | 509 | 00559_update9      | Sun Mar 01 00:00:00 1970 PST
 | |
|   560 |   0 | 00560              | Mon Mar 02 00:00:00 1970 PST
 | |
|   561 |   1 | 00561              | Tue Mar 03 00:00:00 1970 PST
 | |
|   563 | 303 | 00563_update3      | Thu Mar 05 00:00:00 1970 PST
 | |
|   564 |   4 | 00564              | Fri Mar 06 00:00:00 1970 PST
 | |
|   566 |   6 | 00566              | Sun Mar 08 00:00:00 1970 PST
 | |
|   567 | 407 | 00567_update7      | Mon Mar 09 00:00:00 1970 PST
 | |
|   568 |   8 | 00568              | Tue Mar 10 00:00:00 1970 PST
 | |
|   569 | 509 | 00569_update9      | Wed Mar 11 00:00:00 1970 PST
 | |
|   570 |   0 | 00570              | Thu Mar 12 00:00:00 1970 PST
 | |
|   571 |   1 | 00571              | Fri Mar 13 00:00:00 1970 PST
 | |
|   573 | 303 | 00573_update3      | Sun Mar 15 00:00:00 1970 PST
 | |
|   574 |   4 | 00574              | Mon Mar 16 00:00:00 1970 PST
 | |
|   576 |   6 | 00576              | Wed Mar 18 00:00:00 1970 PST
 | |
|   577 | 407 | 00577_update7      | Thu Mar 19 00:00:00 1970 PST
 | |
|   578 |   8 | 00578              | Fri Mar 20 00:00:00 1970 PST
 | |
|   579 | 509 | 00579_update9      | Sat Mar 21 00:00:00 1970 PST
 | |
|   580 |   0 | 00580              | Sun Mar 22 00:00:00 1970 PST
 | |
|   581 |   1 | 00581              | Mon Mar 23 00:00:00 1970 PST
 | |
|   583 | 303 | 00583_update3      | Wed Mar 25 00:00:00 1970 PST
 | |
|   584 |   4 | 00584              | Thu Mar 26 00:00:00 1970 PST
 | |
|   586 |   6 | 00586              | Sat Mar 28 00:00:00 1970 PST
 | |
|   587 | 407 | 00587_update7      | Sun Mar 29 00:00:00 1970 PST
 | |
|   588 |   8 | 00588              | Mon Mar 30 00:00:00 1970 PST
 | |
|   589 | 509 | 00589_update9      | Tue Mar 31 00:00:00 1970 PST
 | |
|   590 |   0 | 00590              | Wed Apr 01 00:00:00 1970 PST
 | |
|   591 |   1 | 00591              | Thu Apr 02 00:00:00 1970 PST
 | |
|   593 | 303 | 00593_update3      | Sat Apr 04 00:00:00 1970 PST
 | |
|   594 |   4 | 00594              | Sun Apr 05 00:00:00 1970 PST
 | |
|   596 |   6 | 00596              | Tue Apr 07 00:00:00 1970 PST
 | |
|   597 | 407 | 00597_update7      | Wed Apr 08 00:00:00 1970 PST
 | |
|   598 |   8 | 00598              | Thu Apr 09 00:00:00 1970 PST
 | |
|   599 | 509 | 00599_update9      | Fri Apr 10 00:00:00 1970 PST
 | |
|   600 |   0 | 00600              | Thu Jan 01 00:00:00 1970 PST
 | |
|   601 |   1 | 00601              | Fri Jan 02 00:00:00 1970 PST
 | |
|   603 | 303 | 00603_update3      | Sun Jan 04 00:00:00 1970 PST
 | |
|   604 |   4 | 00604              | Mon Jan 05 00:00:00 1970 PST
 | |
|   606 |   6 | 00606              | Wed Jan 07 00:00:00 1970 PST
 | |
|   607 | 407 | 00607_update7      | Thu Jan 08 00:00:00 1970 PST
 | |
|   608 |   8 | 00608              | Fri Jan 09 00:00:00 1970 PST
 | |
|   609 | 509 | 00609_update9      | Sat Jan 10 00:00:00 1970 PST
 | |
|   610 |   0 | 00610              | Sun Jan 11 00:00:00 1970 PST
 | |
|   611 |   1 | 00611              | Mon Jan 12 00:00:00 1970 PST
 | |
|   613 | 303 | 00613_update3      | Wed Jan 14 00:00:00 1970 PST
 | |
|   614 |   4 | 00614              | Thu Jan 15 00:00:00 1970 PST
 | |
|   616 |   6 | 00616              | Sat Jan 17 00:00:00 1970 PST
 | |
|   617 | 407 | 00617_update7      | Sun Jan 18 00:00:00 1970 PST
 | |
|   618 |   8 | 00618              | Mon Jan 19 00:00:00 1970 PST
 | |
|   619 | 509 | 00619_update9      | Tue Jan 20 00:00:00 1970 PST
 | |
|   620 |   0 | 00620              | Wed Jan 21 00:00:00 1970 PST
 | |
|   621 |   1 | 00621              | Thu Jan 22 00:00:00 1970 PST
 | |
|   623 | 303 | 00623_update3      | Sat Jan 24 00:00:00 1970 PST
 | |
|   624 |   4 | 00624              | Sun Jan 25 00:00:00 1970 PST
 | |
|   626 |   6 | 00626              | Tue Jan 27 00:00:00 1970 PST
 | |
|   627 | 407 | 00627_update7      | Wed Jan 28 00:00:00 1970 PST
 | |
|   628 |   8 | 00628              | Thu Jan 29 00:00:00 1970 PST
 | |
|   629 | 509 | 00629_update9      | Fri Jan 30 00:00:00 1970 PST
 | |
|   630 |   0 | 00630              | Sat Jan 31 00:00:00 1970 PST
 | |
|   631 |   1 | 00631              | Sun Feb 01 00:00:00 1970 PST
 | |
|   633 | 303 | 00633_update3      | Tue Feb 03 00:00:00 1970 PST
 | |
|   634 |   4 | 00634              | Wed Feb 04 00:00:00 1970 PST
 | |
|   636 |   6 | 00636              | Fri Feb 06 00:00:00 1970 PST
 | |
|   637 | 407 | 00637_update7      | Sat Feb 07 00:00:00 1970 PST
 | |
|   638 |   8 | 00638              | Sun Feb 08 00:00:00 1970 PST
 | |
|   639 | 509 | 00639_update9      | Mon Feb 09 00:00:00 1970 PST
 | |
|   640 |   0 | 00640              | Tue Feb 10 00:00:00 1970 PST
 | |
|   641 |   1 | 00641              | Wed Feb 11 00:00:00 1970 PST
 | |
|   643 | 303 | 00643_update3      | Fri Feb 13 00:00:00 1970 PST
 | |
|   644 |   4 | 00644              | Sat Feb 14 00:00:00 1970 PST
 | |
|   646 |   6 | 00646              | Mon Feb 16 00:00:00 1970 PST
 | |
|   647 | 407 | 00647_update7      | Tue Feb 17 00:00:00 1970 PST
 | |
|   648 |   8 | 00648              | Wed Feb 18 00:00:00 1970 PST
 | |
|   649 | 509 | 00649_update9      | Thu Feb 19 00:00:00 1970 PST
 | |
|   650 |   0 | 00650              | Fri Feb 20 00:00:00 1970 PST
 | |
|   651 |   1 | 00651              | Sat Feb 21 00:00:00 1970 PST
 | |
|   653 | 303 | 00653_update3      | Mon Feb 23 00:00:00 1970 PST
 | |
|   654 |   4 | 00654              | Tue Feb 24 00:00:00 1970 PST
 | |
|   656 |   6 | 00656              | Thu Feb 26 00:00:00 1970 PST
 | |
|   657 | 407 | 00657_update7      | Fri Feb 27 00:00:00 1970 PST
 | |
|   658 |   8 | 00658              | Sat Feb 28 00:00:00 1970 PST
 | |
|   659 | 509 | 00659_update9      | Sun Mar 01 00:00:00 1970 PST
 | |
|   660 |   0 | 00660              | Mon Mar 02 00:00:00 1970 PST
 | |
|   661 |   1 | 00661              | Tue Mar 03 00:00:00 1970 PST
 | |
|   663 | 303 | 00663_update3      | Thu Mar 05 00:00:00 1970 PST
 | |
|   664 |   4 | 00664              | Fri Mar 06 00:00:00 1970 PST
 | |
|   666 |   6 | 00666              | Sun Mar 08 00:00:00 1970 PST
 | |
|   667 | 407 | 00667_update7      | Mon Mar 09 00:00:00 1970 PST
 | |
|   668 |   8 | 00668              | Tue Mar 10 00:00:00 1970 PST
 | |
|   669 | 509 | 00669_update9      | Wed Mar 11 00:00:00 1970 PST
 | |
|   670 |   0 | 00670              | Thu Mar 12 00:00:00 1970 PST
 | |
|   671 |   1 | 00671              | Fri Mar 13 00:00:00 1970 PST
 | |
|   673 | 303 | 00673_update3      | Sun Mar 15 00:00:00 1970 PST
 | |
|   674 |   4 | 00674              | Mon Mar 16 00:00:00 1970 PST
 | |
|   676 |   6 | 00676              | Wed Mar 18 00:00:00 1970 PST
 | |
|   677 | 407 | 00677_update7      | Thu Mar 19 00:00:00 1970 PST
 | |
|   678 |   8 | 00678              | Fri Mar 20 00:00:00 1970 PST
 | |
|   679 | 509 | 00679_update9      | Sat Mar 21 00:00:00 1970 PST
 | |
|   680 |   0 | 00680              | Sun Mar 22 00:00:00 1970 PST
 | |
|   681 |   1 | 00681              | Mon Mar 23 00:00:00 1970 PST
 | |
|   683 | 303 | 00683_update3      | Wed Mar 25 00:00:00 1970 PST
 | |
|   684 |   4 | 00684              | Thu Mar 26 00:00:00 1970 PST
 | |
|   686 |   6 | 00686              | Sat Mar 28 00:00:00 1970 PST
 | |
|   687 | 407 | 00687_update7      | Sun Mar 29 00:00:00 1970 PST
 | |
|   688 |   8 | 00688              | Mon Mar 30 00:00:00 1970 PST
 | |
|   689 | 509 | 00689_update9      | Tue Mar 31 00:00:00 1970 PST
 | |
|   690 |   0 | 00690              | Wed Apr 01 00:00:00 1970 PST
 | |
|   691 |   1 | 00691              | Thu Apr 02 00:00:00 1970 PST
 | |
|   693 | 303 | 00693_update3      | Sat Apr 04 00:00:00 1970 PST
 | |
|   694 |   4 | 00694              | Sun Apr 05 00:00:00 1970 PST
 | |
|   696 |   6 | 00696              | Tue Apr 07 00:00:00 1970 PST
 | |
|   697 | 407 | 00697_update7      | Wed Apr 08 00:00:00 1970 PST
 | |
|   698 |   8 | 00698              | Thu Apr 09 00:00:00 1970 PST
 | |
|   699 | 509 | 00699_update9      | Fri Apr 10 00:00:00 1970 PST
 | |
|   700 |   0 | 00700              | Thu Jan 01 00:00:00 1970 PST
 | |
|   701 |   1 | 00701              | Fri Jan 02 00:00:00 1970 PST
 | |
|   703 | 303 | 00703_update3      | Sun Jan 04 00:00:00 1970 PST
 | |
|   704 |   4 | 00704              | Mon Jan 05 00:00:00 1970 PST
 | |
|   706 |   6 | 00706              | Wed Jan 07 00:00:00 1970 PST
 | |
|   707 | 407 | 00707_update7      | Thu Jan 08 00:00:00 1970 PST
 | |
|   708 |   8 | 00708              | Fri Jan 09 00:00:00 1970 PST
 | |
|   709 | 509 | 00709_update9      | Sat Jan 10 00:00:00 1970 PST
 | |
|   710 |   0 | 00710              | Sun Jan 11 00:00:00 1970 PST
 | |
|   711 |   1 | 00711              | Mon Jan 12 00:00:00 1970 PST
 | |
|   713 | 303 | 00713_update3      | Wed Jan 14 00:00:00 1970 PST
 | |
|   714 |   4 | 00714              | Thu Jan 15 00:00:00 1970 PST
 | |
|   716 |   6 | 00716              | Sat Jan 17 00:00:00 1970 PST
 | |
|   717 | 407 | 00717_update7      | Sun Jan 18 00:00:00 1970 PST
 | |
|   718 |   8 | 00718              | Mon Jan 19 00:00:00 1970 PST
 | |
|   719 | 509 | 00719_update9      | Tue Jan 20 00:00:00 1970 PST
 | |
|   720 |   0 | 00720              | Wed Jan 21 00:00:00 1970 PST
 | |
|   721 |   1 | 00721              | Thu Jan 22 00:00:00 1970 PST
 | |
|   723 | 303 | 00723_update3      | Sat Jan 24 00:00:00 1970 PST
 | |
|   724 |   4 | 00724              | Sun Jan 25 00:00:00 1970 PST
 | |
|   726 |   6 | 00726              | Tue Jan 27 00:00:00 1970 PST
 | |
|   727 | 407 | 00727_update7      | Wed Jan 28 00:00:00 1970 PST
 | |
|   728 |   8 | 00728              | Thu Jan 29 00:00:00 1970 PST
 | |
|   729 | 509 | 00729_update9      | Fri Jan 30 00:00:00 1970 PST
 | |
|   730 |   0 | 00730              | Sat Jan 31 00:00:00 1970 PST
 | |
|   731 |   1 | 00731              | Sun Feb 01 00:00:00 1970 PST
 | |
|   733 | 303 | 00733_update3      | Tue Feb 03 00:00:00 1970 PST
 | |
|   734 |   4 | 00734              | Wed Feb 04 00:00:00 1970 PST
 | |
|   736 |   6 | 00736              | Fri Feb 06 00:00:00 1970 PST
 | |
|   737 | 407 | 00737_update7      | Sat Feb 07 00:00:00 1970 PST
 | |
|   738 |   8 | 00738              | Sun Feb 08 00:00:00 1970 PST
 | |
|   739 | 509 | 00739_update9      | Mon Feb 09 00:00:00 1970 PST
 | |
|   740 |   0 | 00740              | Tue Feb 10 00:00:00 1970 PST
 | |
|   741 |   1 | 00741              | Wed Feb 11 00:00:00 1970 PST
 | |
|   743 | 303 | 00743_update3      | Fri Feb 13 00:00:00 1970 PST
 | |
|   744 |   4 | 00744              | Sat Feb 14 00:00:00 1970 PST
 | |
|   746 |   6 | 00746              | Mon Feb 16 00:00:00 1970 PST
 | |
|   747 | 407 | 00747_update7      | Tue Feb 17 00:00:00 1970 PST
 | |
|   748 |   8 | 00748              | Wed Feb 18 00:00:00 1970 PST
 | |
|   749 | 509 | 00749_update9      | Thu Feb 19 00:00:00 1970 PST
 | |
|   750 |   0 | 00750              | Fri Feb 20 00:00:00 1970 PST
 | |
|   751 |   1 | 00751              | Sat Feb 21 00:00:00 1970 PST
 | |
|   753 | 303 | 00753_update3      | Mon Feb 23 00:00:00 1970 PST
 | |
|   754 |   4 | 00754              | Tue Feb 24 00:00:00 1970 PST
 | |
|   756 |   6 | 00756              | Thu Feb 26 00:00:00 1970 PST
 | |
|   757 | 407 | 00757_update7      | Fri Feb 27 00:00:00 1970 PST
 | |
|   758 |   8 | 00758              | Sat Feb 28 00:00:00 1970 PST
 | |
|   759 | 509 | 00759_update9      | Sun Mar 01 00:00:00 1970 PST
 | |
|   760 |   0 | 00760              | Mon Mar 02 00:00:00 1970 PST
 | |
|   761 |   1 | 00761              | Tue Mar 03 00:00:00 1970 PST
 | |
|   763 | 303 | 00763_update3      | Thu Mar 05 00:00:00 1970 PST
 | |
|   764 |   4 | 00764              | Fri Mar 06 00:00:00 1970 PST
 | |
|   766 |   6 | 00766              | Sun Mar 08 00:00:00 1970 PST
 | |
|   767 | 407 | 00767_update7      | Mon Mar 09 00:00:00 1970 PST
 | |
|   768 |   8 | 00768              | Tue Mar 10 00:00:00 1970 PST
 | |
|   769 | 509 | 00769_update9      | Wed Mar 11 00:00:00 1970 PST
 | |
|   770 |   0 | 00770              | Thu Mar 12 00:00:00 1970 PST
 | |
|   771 |   1 | 00771              | Fri Mar 13 00:00:00 1970 PST
 | |
|   773 | 303 | 00773_update3      | Sun Mar 15 00:00:00 1970 PST
 | |
|   774 |   4 | 00774              | Mon Mar 16 00:00:00 1970 PST
 | |
|   776 |   6 | 00776              | Wed Mar 18 00:00:00 1970 PST
 | |
|   777 | 407 | 00777_update7      | Thu Mar 19 00:00:00 1970 PST
 | |
|   778 |   8 | 00778              | Fri Mar 20 00:00:00 1970 PST
 | |
|   779 | 509 | 00779_update9      | Sat Mar 21 00:00:00 1970 PST
 | |
|   780 |   0 | 00780              | Sun Mar 22 00:00:00 1970 PST
 | |
|   781 |   1 | 00781              | Mon Mar 23 00:00:00 1970 PST
 | |
|   783 | 303 | 00783_update3      | Wed Mar 25 00:00:00 1970 PST
 | |
|   784 |   4 | 00784              | Thu Mar 26 00:00:00 1970 PST
 | |
|   786 |   6 | 00786              | Sat Mar 28 00:00:00 1970 PST
 | |
|   787 | 407 | 00787_update7      | Sun Mar 29 00:00:00 1970 PST
 | |
|   788 |   8 | 00788              | Mon Mar 30 00:00:00 1970 PST
 | |
|   789 | 509 | 00789_update9      | Tue Mar 31 00:00:00 1970 PST
 | |
|   790 |   0 | 00790              | Wed Apr 01 00:00:00 1970 PST
 | |
|   791 |   1 | 00791              | Thu Apr 02 00:00:00 1970 PST
 | |
|   793 | 303 | 00793_update3      | Sat Apr 04 00:00:00 1970 PST
 | |
|   794 |   4 | 00794              | Sun Apr 05 00:00:00 1970 PST
 | |
|   796 |   6 | 00796              | Tue Apr 07 00:00:00 1970 PST
 | |
|   797 | 407 | 00797_update7      | Wed Apr 08 00:00:00 1970 PST
 | |
|   798 |   8 | 00798              | Thu Apr 09 00:00:00 1970 PST
 | |
|   799 | 509 | 00799_update9      | Fri Apr 10 00:00:00 1970 PST
 | |
|   800 |   0 | 00800              | Thu Jan 01 00:00:00 1970 PST
 | |
|   801 |   1 | 00801              | Fri Jan 02 00:00:00 1970 PST
 | |
|   803 | 303 | 00803_update3      | Sun Jan 04 00:00:00 1970 PST
 | |
|   804 |   4 | 00804              | Mon Jan 05 00:00:00 1970 PST
 | |
|   806 |   6 | 00806              | Wed Jan 07 00:00:00 1970 PST
 | |
|   807 | 407 | 00807_update7      | Thu Jan 08 00:00:00 1970 PST
 | |
|   808 |   8 | 00808              | Fri Jan 09 00:00:00 1970 PST
 | |
|   809 | 509 | 00809_update9      | Sat Jan 10 00:00:00 1970 PST
 | |
|   810 |   0 | 00810              | Sun Jan 11 00:00:00 1970 PST
 | |
|   811 |   1 | 00811              | Mon Jan 12 00:00:00 1970 PST
 | |
|   813 | 303 | 00813_update3      | Wed Jan 14 00:00:00 1970 PST
 | |
|   814 |   4 | 00814              | Thu Jan 15 00:00:00 1970 PST
 | |
|   816 |   6 | 00816              | Sat Jan 17 00:00:00 1970 PST
 | |
|   817 | 407 | 00817_update7      | Sun Jan 18 00:00:00 1970 PST
 | |
|   818 |   8 | 00818              | Mon Jan 19 00:00:00 1970 PST
 | |
|   819 | 509 | 00819_update9      | Tue Jan 20 00:00:00 1970 PST
 | |
|   820 |   0 | 00820              | Wed Jan 21 00:00:00 1970 PST
 | |
|   821 |   1 | 00821              | Thu Jan 22 00:00:00 1970 PST
 | |
|   823 | 303 | 00823_update3      | Sat Jan 24 00:00:00 1970 PST
 | |
|   824 |   4 | 00824              | Sun Jan 25 00:00:00 1970 PST
 | |
|   826 |   6 | 00826              | Tue Jan 27 00:00:00 1970 PST
 | |
|   827 | 407 | 00827_update7      | Wed Jan 28 00:00:00 1970 PST
 | |
|   828 |   8 | 00828              | Thu Jan 29 00:00:00 1970 PST
 | |
|   829 | 509 | 00829_update9      | Fri Jan 30 00:00:00 1970 PST
 | |
|   830 |   0 | 00830              | Sat Jan 31 00:00:00 1970 PST
 | |
|   831 |   1 | 00831              | Sun Feb 01 00:00:00 1970 PST
 | |
|   833 | 303 | 00833_update3      | Tue Feb 03 00:00:00 1970 PST
 | |
|   834 |   4 | 00834              | Wed Feb 04 00:00:00 1970 PST
 | |
|   836 |   6 | 00836              | Fri Feb 06 00:00:00 1970 PST
 | |
|   837 | 407 | 00837_update7      | Sat Feb 07 00:00:00 1970 PST
 | |
|   838 |   8 | 00838              | Sun Feb 08 00:00:00 1970 PST
 | |
|   839 | 509 | 00839_update9      | Mon Feb 09 00:00:00 1970 PST
 | |
|   840 |   0 | 00840              | Tue Feb 10 00:00:00 1970 PST
 | |
|   841 |   1 | 00841              | Wed Feb 11 00:00:00 1970 PST
 | |
|   843 | 303 | 00843_update3      | Fri Feb 13 00:00:00 1970 PST
 | |
|   844 |   4 | 00844              | Sat Feb 14 00:00:00 1970 PST
 | |
|   846 |   6 | 00846              | Mon Feb 16 00:00:00 1970 PST
 | |
|   847 | 407 | 00847_update7      | Tue Feb 17 00:00:00 1970 PST
 | |
|   848 |   8 | 00848              | Wed Feb 18 00:00:00 1970 PST
 | |
|   849 | 509 | 00849_update9      | Thu Feb 19 00:00:00 1970 PST
 | |
|   850 |   0 | 00850              | Fri Feb 20 00:00:00 1970 PST
 | |
|   851 |   1 | 00851              | Sat Feb 21 00:00:00 1970 PST
 | |
|   853 | 303 | 00853_update3      | Mon Feb 23 00:00:00 1970 PST
 | |
|   854 |   4 | 00854              | Tue Feb 24 00:00:00 1970 PST
 | |
|   856 |   6 | 00856              | Thu Feb 26 00:00:00 1970 PST
 | |
|   857 | 407 | 00857_update7      | Fri Feb 27 00:00:00 1970 PST
 | |
|   858 |   8 | 00858              | Sat Feb 28 00:00:00 1970 PST
 | |
|   859 | 509 | 00859_update9      | Sun Mar 01 00:00:00 1970 PST
 | |
|   860 |   0 | 00860              | Mon Mar 02 00:00:00 1970 PST
 | |
|   861 |   1 | 00861              | Tue Mar 03 00:00:00 1970 PST
 | |
|   863 | 303 | 00863_update3      | Thu Mar 05 00:00:00 1970 PST
 | |
|   864 |   4 | 00864              | Fri Mar 06 00:00:00 1970 PST
 | |
|   866 |   6 | 00866              | Sun Mar 08 00:00:00 1970 PST
 | |
|   867 | 407 | 00867_update7      | Mon Mar 09 00:00:00 1970 PST
 | |
|   868 |   8 | 00868              | Tue Mar 10 00:00:00 1970 PST
 | |
|   869 | 509 | 00869_update9      | Wed Mar 11 00:00:00 1970 PST
 | |
|   870 |   0 | 00870              | Thu Mar 12 00:00:00 1970 PST
 | |
|   871 |   1 | 00871              | Fri Mar 13 00:00:00 1970 PST
 | |
|   873 | 303 | 00873_update3      | Sun Mar 15 00:00:00 1970 PST
 | |
|   874 |   4 | 00874              | Mon Mar 16 00:00:00 1970 PST
 | |
|   876 |   6 | 00876              | Wed Mar 18 00:00:00 1970 PST
 | |
|   877 | 407 | 00877_update7      | Thu Mar 19 00:00:00 1970 PST
 | |
|   878 |   8 | 00878              | Fri Mar 20 00:00:00 1970 PST
 | |
|   879 | 509 | 00879_update9      | Sat Mar 21 00:00:00 1970 PST
 | |
|   880 |   0 | 00880              | Sun Mar 22 00:00:00 1970 PST
 | |
|   881 |   1 | 00881              | Mon Mar 23 00:00:00 1970 PST
 | |
|   883 | 303 | 00883_update3      | Wed Mar 25 00:00:00 1970 PST
 | |
|   884 |   4 | 00884              | Thu Mar 26 00:00:00 1970 PST
 | |
|   886 |   6 | 00886              | Sat Mar 28 00:00:00 1970 PST
 | |
|   887 | 407 | 00887_update7      | Sun Mar 29 00:00:00 1970 PST
 | |
|   888 |   8 | 00888              | Mon Mar 30 00:00:00 1970 PST
 | |
|   889 | 509 | 00889_update9      | Tue Mar 31 00:00:00 1970 PST
 | |
|   890 |   0 | 00890              | Wed Apr 01 00:00:00 1970 PST
 | |
|   891 |   1 | 00891              | Thu Apr 02 00:00:00 1970 PST
 | |
|   893 | 303 | 00893_update3      | Sat Apr 04 00:00:00 1970 PST
 | |
|   894 |   4 | 00894              | Sun Apr 05 00:00:00 1970 PST
 | |
|   896 |   6 | 00896              | Tue Apr 07 00:00:00 1970 PST
 | |
|   897 | 407 | 00897_update7      | Wed Apr 08 00:00:00 1970 PST
 | |
|   898 |   8 | 00898              | Thu Apr 09 00:00:00 1970 PST
 | |
|   899 | 509 | 00899_update9      | Fri Apr 10 00:00:00 1970 PST
 | |
|   900 |   0 | 00900              | Thu Jan 01 00:00:00 1970 PST
 | |
|   901 |   1 | 00901              | Fri Jan 02 00:00:00 1970 PST
 | |
|   903 | 303 | 00903_update3      | Sun Jan 04 00:00:00 1970 PST
 | |
|   904 |   4 | 00904              | Mon Jan 05 00:00:00 1970 PST
 | |
|   906 |   6 | 00906              | Wed Jan 07 00:00:00 1970 PST
 | |
|   907 | 407 | 00907_update7      | Thu Jan 08 00:00:00 1970 PST
 | |
|   908 |   8 | 00908              | Fri Jan 09 00:00:00 1970 PST
 | |
|   909 | 509 | 00909_update9      | Sat Jan 10 00:00:00 1970 PST
 | |
|   910 |   0 | 00910              | Sun Jan 11 00:00:00 1970 PST
 | |
|   911 |   1 | 00911              | Mon Jan 12 00:00:00 1970 PST
 | |
|   913 | 303 | 00913_update3      | Wed Jan 14 00:00:00 1970 PST
 | |
|   914 |   4 | 00914              | Thu Jan 15 00:00:00 1970 PST
 | |
|   916 |   6 | 00916              | Sat Jan 17 00:00:00 1970 PST
 | |
|   917 | 407 | 00917_update7      | Sun Jan 18 00:00:00 1970 PST
 | |
|   918 |   8 | 00918              | Mon Jan 19 00:00:00 1970 PST
 | |
|   919 | 509 | 00919_update9      | Tue Jan 20 00:00:00 1970 PST
 | |
|   920 |   0 | 00920              | Wed Jan 21 00:00:00 1970 PST
 | |
|   921 |   1 | 00921              | Thu Jan 22 00:00:00 1970 PST
 | |
|   923 | 303 | 00923_update3      | Sat Jan 24 00:00:00 1970 PST
 | |
|   924 |   4 | 00924              | Sun Jan 25 00:00:00 1970 PST
 | |
|   926 |   6 | 00926              | Tue Jan 27 00:00:00 1970 PST
 | |
|   927 | 407 | 00927_update7      | Wed Jan 28 00:00:00 1970 PST
 | |
|   928 |   8 | 00928              | Thu Jan 29 00:00:00 1970 PST
 | |
|   929 | 509 | 00929_update9      | Fri Jan 30 00:00:00 1970 PST
 | |
|   930 |   0 | 00930              | Sat Jan 31 00:00:00 1970 PST
 | |
|   931 |   1 | 00931              | Sun Feb 01 00:00:00 1970 PST
 | |
|   933 | 303 | 00933_update3      | Tue Feb 03 00:00:00 1970 PST
 | |
|   934 |   4 | 00934              | Wed Feb 04 00:00:00 1970 PST
 | |
|   936 |   6 | 00936              | Fri Feb 06 00:00:00 1970 PST
 | |
|   937 | 407 | 00937_update7      | Sat Feb 07 00:00:00 1970 PST
 | |
|   938 |   8 | 00938              | Sun Feb 08 00:00:00 1970 PST
 | |
|   939 | 509 | 00939_update9      | Mon Feb 09 00:00:00 1970 PST
 | |
|   940 |   0 | 00940              | Tue Feb 10 00:00:00 1970 PST
 | |
|   941 |   1 | 00941              | Wed Feb 11 00:00:00 1970 PST
 | |
|   943 | 303 | 00943_update3      | Fri Feb 13 00:00:00 1970 PST
 | |
|   944 |   4 | 00944              | Sat Feb 14 00:00:00 1970 PST
 | |
|   946 |   6 | 00946              | Mon Feb 16 00:00:00 1970 PST
 | |
|   947 | 407 | 00947_update7      | Tue Feb 17 00:00:00 1970 PST
 | |
|   948 |   8 | 00948              | Wed Feb 18 00:00:00 1970 PST
 | |
|   949 | 509 | 00949_update9      | Thu Feb 19 00:00:00 1970 PST
 | |
|   950 |   0 | 00950              | Fri Feb 20 00:00:00 1970 PST
 | |
|   951 |   1 | 00951              | Sat Feb 21 00:00:00 1970 PST
 | |
|   953 | 303 | 00953_update3      | Mon Feb 23 00:00:00 1970 PST
 | |
|   954 |   4 | 00954              | Tue Feb 24 00:00:00 1970 PST
 | |
|   956 |   6 | 00956              | Thu Feb 26 00:00:00 1970 PST
 | |
|   957 | 407 | 00957_update7      | Fri Feb 27 00:00:00 1970 PST
 | |
|   958 |   8 | 00958              | Sat Feb 28 00:00:00 1970 PST
 | |
|   959 | 509 | 00959_update9      | Sun Mar 01 00:00:00 1970 PST
 | |
|   960 |   0 | 00960              | Mon Mar 02 00:00:00 1970 PST
 | |
|   961 |   1 | 00961              | Tue Mar 03 00:00:00 1970 PST
 | |
|   963 | 303 | 00963_update3      | Thu Mar 05 00:00:00 1970 PST
 | |
|   964 |   4 | 00964              | Fri Mar 06 00:00:00 1970 PST
 | |
|   966 |   6 | 00966              | Sun Mar 08 00:00:00 1970 PST
 | |
|   967 | 407 | 00967_update7      | Mon Mar 09 00:00:00 1970 PST
 | |
|   968 |   8 | 00968              | Tue Mar 10 00:00:00 1970 PST
 | |
|   969 | 509 | 00969_update9      | Wed Mar 11 00:00:00 1970 PST
 | |
|   970 |   0 | 00970              | Thu Mar 12 00:00:00 1970 PST
 | |
|   971 |   1 | 00971              | Fri Mar 13 00:00:00 1970 PST
 | |
|   973 | 303 | 00973_update3      | Sun Mar 15 00:00:00 1970 PST
 | |
|   974 |   4 | 00974              | Mon Mar 16 00:00:00 1970 PST
 | |
|   976 |   6 | 00976              | Wed Mar 18 00:00:00 1970 PST
 | |
|   977 | 407 | 00977_update7      | Thu Mar 19 00:00:00 1970 PST
 | |
|   978 |   8 | 00978              | Fri Mar 20 00:00:00 1970 PST
 | |
|   979 | 509 | 00979_update9      | Sat Mar 21 00:00:00 1970 PST
 | |
|   980 |   0 | 00980              | Sun Mar 22 00:00:00 1970 PST
 | |
|   981 |   1 | 00981              | Mon Mar 23 00:00:00 1970 PST
 | |
|   983 | 303 | 00983_update3      | Wed Mar 25 00:00:00 1970 PST
 | |
|   984 |   4 | 00984              | Thu Mar 26 00:00:00 1970 PST
 | |
|   986 |   6 | 00986              | Sat Mar 28 00:00:00 1970 PST
 | |
|   987 | 407 | 00987_update7      | Sun Mar 29 00:00:00 1970 PST
 | |
|   988 |   8 | 00988              | Mon Mar 30 00:00:00 1970 PST
 | |
|   989 | 509 | 00989_update9      | Tue Mar 31 00:00:00 1970 PST
 | |
|   990 |   0 | 00990              | Wed Apr 01 00:00:00 1970 PST
 | |
|   991 |   1 | 00991              | Thu Apr 02 00:00:00 1970 PST
 | |
|   993 | 303 | 00993_update3      | Sat Apr 04 00:00:00 1970 PST
 | |
|   994 |   4 | 00994              | Sun Apr 05 00:00:00 1970 PST
 | |
|   996 |   6 | 00996              | Tue Apr 07 00:00:00 1970 PST
 | |
|   997 | 407 | 00997_update7      | Wed Apr 08 00:00:00 1970 PST
 | |
|   998 |   8 | 00998              | Thu Apr 09 00:00:00 1970 PST
 | |
|   999 | 509 | 00999_update9      | Fri Apr 10 00:00:00 1970 PST
 | |
|  1000 |   0 | 01000              | Thu Jan 01 00:00:00 1970 PST
 | |
|  1001 | 101 | 0000100001         | 
 | |
|  1003 | 403 | 0000300003_update3 | 
 | |
|  1004 | 104 | 0000400004         | 
 | |
|  1006 | 106 | 0000600006         | 
 | |
|  1007 | 507 | 0000700007_update7 | 
 | |
|  1008 | 108 | 0000800008         | 
 | |
|  1009 | 609 | 0000900009_update9 | 
 | |
|  1010 | 100 | 0001000010         | 
 | |
|  1011 | 101 | 0001100011         | 
 | |
|  1013 | 403 | 0001300013_update3 | 
 | |
|  1014 | 104 | 0001400014         | 
 | |
|  1016 | 106 | 0001600016         | 
 | |
|  1017 | 507 | 0001700017_update7 | 
 | |
|  1018 | 108 | 0001800018         | 
 | |
|  1019 | 609 | 0001900019_update9 | 
 | |
|  1020 | 100 | 0002000020         | 
 | |
|  1101 | 201 | aaa                | 
 | |
|  1103 | 503 | ccc_update3        | 
 | |
|  1104 | 204 | ddd                | 
 | |
| (819 rows)
 | |
| 
 | |
| -- Test that trigger on remote table works as expected
 | |
| CREATE OR REPLACE FUNCTION "S 1".F_BRTRIG() RETURNS trigger AS $$
 | |
| BEGIN
 | |
|     NEW.c3 = NEW.c3 || '_trig_update';
 | |
|     RETURN NEW;
 | |
| END;
 | |
| $$ LANGUAGE plpgsql;
 | |
| CREATE TRIGGER t1_br_insert BEFORE INSERT OR UPDATE
 | |
|     ON "S 1"."T 1" FOR EACH ROW EXECUTE PROCEDURE "S 1".F_BRTRIG();
 | |
| INSERT INTO ft2 (c1,c2,c3) VALUES (1208, 818, 'fff') RETURNING *;
 | |
|   c1  | c2  |       c3        | c4 | c5 | c6 |     c7     | c8 
 | |
| ------+-----+-----------------+----+----+----+------------+----
 | |
|  1208 | 818 | fff_trig_update |    |    |    | ft2        | 
 | |
| (1 row)
 | |
| 
 | |
| INSERT INTO ft2 (c1,c2,c3,c6) VALUES (1218, 818, 'ggg', '(--;') RETURNING *;
 | |
|   c1  | c2  |       c3        | c4 | c5 |  c6  |     c7     | c8 
 | |
| ------+-----+-----------------+----+----+------+------------+----
 | |
|  1218 | 818 | ggg_trig_update |    |    | (--; | ft2        | 
 | |
| (1 row)
 | |
| 
 | |
| UPDATE ft2 SET c2 = c2 + 600 WHERE c1 % 10 = 8 AND c1 < 1200 RETURNING *;
 | |
|   c1  | c2  |           c3           |              c4              |            c5            | c6 |     c7     | c8  
 | |
| ------+-----+------------------------+------------------------------+--------------------------+----+------------+-----
 | |
|     8 | 608 | 00008_trig_update      | Fri Jan 09 00:00:00 1970 PST | Fri Jan 09 00:00:00 1970 | 8  | 8          | foo
 | |
|    18 | 608 | 00018_trig_update      | Mon Jan 19 00:00:00 1970 PST | Mon Jan 19 00:00:00 1970 | 8  | 8          | foo
 | |
|    28 | 608 | 00028_trig_update      | Thu Jan 29 00:00:00 1970 PST | Thu Jan 29 00:00:00 1970 | 8  | 8          | foo
 | |
|    38 | 608 | 00038_trig_update      | Sun Feb 08 00:00:00 1970 PST | Sun Feb 08 00:00:00 1970 | 8  | 8          | foo
 | |
|    48 | 608 | 00048_trig_update      | Wed Feb 18 00:00:00 1970 PST | Wed Feb 18 00:00:00 1970 | 8  | 8          | foo
 | |
|    58 | 608 | 00058_trig_update      | Sat Feb 28 00:00:00 1970 PST | Sat Feb 28 00:00:00 1970 | 8  | 8          | foo
 | |
|    68 | 608 | 00068_trig_update      | Tue Mar 10 00:00:00 1970 PST | Tue Mar 10 00:00:00 1970 | 8  | 8          | foo
 | |
|    78 | 608 | 00078_trig_update      | Fri Mar 20 00:00:00 1970 PST | Fri Mar 20 00:00:00 1970 | 8  | 8          | foo
 | |
|    88 | 608 | 00088_trig_update      | Mon Mar 30 00:00:00 1970 PST | Mon Mar 30 00:00:00 1970 | 8  | 8          | foo
 | |
|    98 | 608 | 00098_trig_update      | Thu Apr 09 00:00:00 1970 PST | Thu Apr 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   108 | 608 | 00108_trig_update      | Fri Jan 09 00:00:00 1970 PST | Fri Jan 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   118 | 608 | 00118_trig_update      | Mon Jan 19 00:00:00 1970 PST | Mon Jan 19 00:00:00 1970 | 8  | 8          | foo
 | |
|   128 | 608 | 00128_trig_update      | Thu Jan 29 00:00:00 1970 PST | Thu Jan 29 00:00:00 1970 | 8  | 8          | foo
 | |
|   138 | 608 | 00138_trig_update      | Sun Feb 08 00:00:00 1970 PST | Sun Feb 08 00:00:00 1970 | 8  | 8          | foo
 | |
|   148 | 608 | 00148_trig_update      | Wed Feb 18 00:00:00 1970 PST | Wed Feb 18 00:00:00 1970 | 8  | 8          | foo
 | |
|   158 | 608 | 00158_trig_update      | Sat Feb 28 00:00:00 1970 PST | Sat Feb 28 00:00:00 1970 | 8  | 8          | foo
 | |
|   168 | 608 | 00168_trig_update      | Tue Mar 10 00:00:00 1970 PST | Tue Mar 10 00:00:00 1970 | 8  | 8          | foo
 | |
|   178 | 608 | 00178_trig_update      | Fri Mar 20 00:00:00 1970 PST | Fri Mar 20 00:00:00 1970 | 8  | 8          | foo
 | |
|   188 | 608 | 00188_trig_update      | Mon Mar 30 00:00:00 1970 PST | Mon Mar 30 00:00:00 1970 | 8  | 8          | foo
 | |
|   198 | 608 | 00198_trig_update      | Thu Apr 09 00:00:00 1970 PST | Thu Apr 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   208 | 608 | 00208_trig_update      | Fri Jan 09 00:00:00 1970 PST | Fri Jan 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   218 | 608 | 00218_trig_update      | Mon Jan 19 00:00:00 1970 PST | Mon Jan 19 00:00:00 1970 | 8  | 8          | foo
 | |
|   228 | 608 | 00228_trig_update      | Thu Jan 29 00:00:00 1970 PST | Thu Jan 29 00:00:00 1970 | 8  | 8          | foo
 | |
|   238 | 608 | 00238_trig_update      | Sun Feb 08 00:00:00 1970 PST | Sun Feb 08 00:00:00 1970 | 8  | 8          | foo
 | |
|   248 | 608 | 00248_trig_update      | Wed Feb 18 00:00:00 1970 PST | Wed Feb 18 00:00:00 1970 | 8  | 8          | foo
 | |
|   258 | 608 | 00258_trig_update      | Sat Feb 28 00:00:00 1970 PST | Sat Feb 28 00:00:00 1970 | 8  | 8          | foo
 | |
|   268 | 608 | 00268_trig_update      | Tue Mar 10 00:00:00 1970 PST | Tue Mar 10 00:00:00 1970 | 8  | 8          | foo
 | |
|   278 | 608 | 00278_trig_update      | Fri Mar 20 00:00:00 1970 PST | Fri Mar 20 00:00:00 1970 | 8  | 8          | foo
 | |
|   288 | 608 | 00288_trig_update      | Mon Mar 30 00:00:00 1970 PST | Mon Mar 30 00:00:00 1970 | 8  | 8          | foo
 | |
|   298 | 608 | 00298_trig_update      | Thu Apr 09 00:00:00 1970 PST | Thu Apr 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   308 | 608 | 00308_trig_update      | Fri Jan 09 00:00:00 1970 PST | Fri Jan 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   318 | 608 | 00318_trig_update      | Mon Jan 19 00:00:00 1970 PST | Mon Jan 19 00:00:00 1970 | 8  | 8          | foo
 | |
|   328 | 608 | 00328_trig_update      | Thu Jan 29 00:00:00 1970 PST | Thu Jan 29 00:00:00 1970 | 8  | 8          | foo
 | |
|   338 | 608 | 00338_trig_update      | Sun Feb 08 00:00:00 1970 PST | Sun Feb 08 00:00:00 1970 | 8  | 8          | foo
 | |
|   348 | 608 | 00348_trig_update      | Wed Feb 18 00:00:00 1970 PST | Wed Feb 18 00:00:00 1970 | 8  | 8          | foo
 | |
|   358 | 608 | 00358_trig_update      | Sat Feb 28 00:00:00 1970 PST | Sat Feb 28 00:00:00 1970 | 8  | 8          | foo
 | |
|   368 | 608 | 00368_trig_update      | Tue Mar 10 00:00:00 1970 PST | Tue Mar 10 00:00:00 1970 | 8  | 8          | foo
 | |
|   378 | 608 | 00378_trig_update      | Fri Mar 20 00:00:00 1970 PST | Fri Mar 20 00:00:00 1970 | 8  | 8          | foo
 | |
|   388 | 608 | 00388_trig_update      | Mon Mar 30 00:00:00 1970 PST | Mon Mar 30 00:00:00 1970 | 8  | 8          | foo
 | |
|   398 | 608 | 00398_trig_update      | Thu Apr 09 00:00:00 1970 PST | Thu Apr 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   408 | 608 | 00408_trig_update      | Fri Jan 09 00:00:00 1970 PST | Fri Jan 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   418 | 608 | 00418_trig_update      | Mon Jan 19 00:00:00 1970 PST | Mon Jan 19 00:00:00 1970 | 8  | 8          | foo
 | |
|   428 | 608 | 00428_trig_update      | Thu Jan 29 00:00:00 1970 PST | Thu Jan 29 00:00:00 1970 | 8  | 8          | foo
 | |
|   438 | 608 | 00438_trig_update      | Sun Feb 08 00:00:00 1970 PST | Sun Feb 08 00:00:00 1970 | 8  | 8          | foo
 | |
|   448 | 608 | 00448_trig_update      | Wed Feb 18 00:00:00 1970 PST | Wed Feb 18 00:00:00 1970 | 8  | 8          | foo
 | |
|   458 | 608 | 00458_trig_update      | Sat Feb 28 00:00:00 1970 PST | Sat Feb 28 00:00:00 1970 | 8  | 8          | foo
 | |
|   468 | 608 | 00468_trig_update      | Tue Mar 10 00:00:00 1970 PST | Tue Mar 10 00:00:00 1970 | 8  | 8          | foo
 | |
|   478 | 608 | 00478_trig_update      | Fri Mar 20 00:00:00 1970 PST | Fri Mar 20 00:00:00 1970 | 8  | 8          | foo
 | |
|   488 | 608 | 00488_trig_update      | Mon Mar 30 00:00:00 1970 PST | Mon Mar 30 00:00:00 1970 | 8  | 8          | foo
 | |
|   498 | 608 | 00498_trig_update      | Thu Apr 09 00:00:00 1970 PST | Thu Apr 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   508 | 608 | 00508_trig_update      | Fri Jan 09 00:00:00 1970 PST | Fri Jan 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   518 | 608 | 00518_trig_update      | Mon Jan 19 00:00:00 1970 PST | Mon Jan 19 00:00:00 1970 | 8  | 8          | foo
 | |
|   528 | 608 | 00528_trig_update      | Thu Jan 29 00:00:00 1970 PST | Thu Jan 29 00:00:00 1970 | 8  | 8          | foo
 | |
|   538 | 608 | 00538_trig_update      | Sun Feb 08 00:00:00 1970 PST | Sun Feb 08 00:00:00 1970 | 8  | 8          | foo
 | |
|   548 | 608 | 00548_trig_update      | Wed Feb 18 00:00:00 1970 PST | Wed Feb 18 00:00:00 1970 | 8  | 8          | foo
 | |
|   558 | 608 | 00558_trig_update      | Sat Feb 28 00:00:00 1970 PST | Sat Feb 28 00:00:00 1970 | 8  | 8          | foo
 | |
|   568 | 608 | 00568_trig_update      | Tue Mar 10 00:00:00 1970 PST | Tue Mar 10 00:00:00 1970 | 8  | 8          | foo
 | |
|   578 | 608 | 00578_trig_update      | Fri Mar 20 00:00:00 1970 PST | Fri Mar 20 00:00:00 1970 | 8  | 8          | foo
 | |
|   588 | 608 | 00588_trig_update      | Mon Mar 30 00:00:00 1970 PST | Mon Mar 30 00:00:00 1970 | 8  | 8          | foo
 | |
|   598 | 608 | 00598_trig_update      | Thu Apr 09 00:00:00 1970 PST | Thu Apr 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   608 | 608 | 00608_trig_update      | Fri Jan 09 00:00:00 1970 PST | Fri Jan 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   618 | 608 | 00618_trig_update      | Mon Jan 19 00:00:00 1970 PST | Mon Jan 19 00:00:00 1970 | 8  | 8          | foo
 | |
|   628 | 608 | 00628_trig_update      | Thu Jan 29 00:00:00 1970 PST | Thu Jan 29 00:00:00 1970 | 8  | 8          | foo
 | |
|   638 | 608 | 00638_trig_update      | Sun Feb 08 00:00:00 1970 PST | Sun Feb 08 00:00:00 1970 | 8  | 8          | foo
 | |
|   648 | 608 | 00648_trig_update      | Wed Feb 18 00:00:00 1970 PST | Wed Feb 18 00:00:00 1970 | 8  | 8          | foo
 | |
|   658 | 608 | 00658_trig_update      | Sat Feb 28 00:00:00 1970 PST | Sat Feb 28 00:00:00 1970 | 8  | 8          | foo
 | |
|   668 | 608 | 00668_trig_update      | Tue Mar 10 00:00:00 1970 PST | Tue Mar 10 00:00:00 1970 | 8  | 8          | foo
 | |
|   678 | 608 | 00678_trig_update      | Fri Mar 20 00:00:00 1970 PST | Fri Mar 20 00:00:00 1970 | 8  | 8          | foo
 | |
|   688 | 608 | 00688_trig_update      | Mon Mar 30 00:00:00 1970 PST | Mon Mar 30 00:00:00 1970 | 8  | 8          | foo
 | |
|   698 | 608 | 00698_trig_update      | Thu Apr 09 00:00:00 1970 PST | Thu Apr 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   708 | 608 | 00708_trig_update      | Fri Jan 09 00:00:00 1970 PST | Fri Jan 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   718 | 608 | 00718_trig_update      | Mon Jan 19 00:00:00 1970 PST | Mon Jan 19 00:00:00 1970 | 8  | 8          | foo
 | |
|   728 | 608 | 00728_trig_update      | Thu Jan 29 00:00:00 1970 PST | Thu Jan 29 00:00:00 1970 | 8  | 8          | foo
 | |
|   738 | 608 | 00738_trig_update      | Sun Feb 08 00:00:00 1970 PST | Sun Feb 08 00:00:00 1970 | 8  | 8          | foo
 | |
|   748 | 608 | 00748_trig_update      | Wed Feb 18 00:00:00 1970 PST | Wed Feb 18 00:00:00 1970 | 8  | 8          | foo
 | |
|   758 | 608 | 00758_trig_update      | Sat Feb 28 00:00:00 1970 PST | Sat Feb 28 00:00:00 1970 | 8  | 8          | foo
 | |
|   768 | 608 | 00768_trig_update      | Tue Mar 10 00:00:00 1970 PST | Tue Mar 10 00:00:00 1970 | 8  | 8          | foo
 | |
|   778 | 608 | 00778_trig_update      | Fri Mar 20 00:00:00 1970 PST | Fri Mar 20 00:00:00 1970 | 8  | 8          | foo
 | |
|   788 | 608 | 00788_trig_update      | Mon Mar 30 00:00:00 1970 PST | Mon Mar 30 00:00:00 1970 | 8  | 8          | foo
 | |
|   798 | 608 | 00798_trig_update      | Thu Apr 09 00:00:00 1970 PST | Thu Apr 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   808 | 608 | 00808_trig_update      | Fri Jan 09 00:00:00 1970 PST | Fri Jan 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   818 | 608 | 00818_trig_update      | Mon Jan 19 00:00:00 1970 PST | Mon Jan 19 00:00:00 1970 | 8  | 8          | foo
 | |
|   828 | 608 | 00828_trig_update      | Thu Jan 29 00:00:00 1970 PST | Thu Jan 29 00:00:00 1970 | 8  | 8          | foo
 | |
|   838 | 608 | 00838_trig_update      | Sun Feb 08 00:00:00 1970 PST | Sun Feb 08 00:00:00 1970 | 8  | 8          | foo
 | |
|   848 | 608 | 00848_trig_update      | Wed Feb 18 00:00:00 1970 PST | Wed Feb 18 00:00:00 1970 | 8  | 8          | foo
 | |
|   858 | 608 | 00858_trig_update      | Sat Feb 28 00:00:00 1970 PST | Sat Feb 28 00:00:00 1970 | 8  | 8          | foo
 | |
|   868 | 608 | 00868_trig_update      | Tue Mar 10 00:00:00 1970 PST | Tue Mar 10 00:00:00 1970 | 8  | 8          | foo
 | |
|   878 | 608 | 00878_trig_update      | Fri Mar 20 00:00:00 1970 PST | Fri Mar 20 00:00:00 1970 | 8  | 8          | foo
 | |
|   888 | 608 | 00888_trig_update      | Mon Mar 30 00:00:00 1970 PST | Mon Mar 30 00:00:00 1970 | 8  | 8          | foo
 | |
|   898 | 608 | 00898_trig_update      | Thu Apr 09 00:00:00 1970 PST | Thu Apr 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   908 | 608 | 00908_trig_update      | Fri Jan 09 00:00:00 1970 PST | Fri Jan 09 00:00:00 1970 | 8  | 8          | foo
 | |
|   918 | 608 | 00918_trig_update      | Mon Jan 19 00:00:00 1970 PST | Mon Jan 19 00:00:00 1970 | 8  | 8          | foo
 | |
|   928 | 608 | 00928_trig_update      | Thu Jan 29 00:00:00 1970 PST | Thu Jan 29 00:00:00 1970 | 8  | 8          | foo
 | |
|   938 | 608 | 00938_trig_update      | Sun Feb 08 00:00:00 1970 PST | Sun Feb 08 00:00:00 1970 | 8  | 8          | foo
 | |
|   948 | 608 | 00948_trig_update      | Wed Feb 18 00:00:00 1970 PST | Wed Feb 18 00:00:00 1970 | 8  | 8          | foo
 | |
|   958 | 608 | 00958_trig_update      | Sat Feb 28 00:00:00 1970 PST | Sat Feb 28 00:00:00 1970 | 8  | 8          | foo
 | |
|   968 | 608 | 00968_trig_update      | Tue Mar 10 00:00:00 1970 PST | Tue Mar 10 00:00:00 1970 | 8  | 8          | foo
 | |
|   978 | 608 | 00978_trig_update      | Fri Mar 20 00:00:00 1970 PST | Fri Mar 20 00:00:00 1970 | 8  | 8          | foo
 | |
|   988 | 608 | 00988_trig_update      | Mon Mar 30 00:00:00 1970 PST | Mon Mar 30 00:00:00 1970 | 8  | 8          | foo
 | |
|   998 | 608 | 00998_trig_update      | Thu Apr 09 00:00:00 1970 PST | Thu Apr 09 00:00:00 1970 | 8  | 8          | foo
 | |
|  1008 | 708 | 0000800008_trig_update |                              |                          |    | ft2        | 
 | |
|  1018 | 708 | 0001800018_trig_update |                              |                          |    | ft2        | 
 | |
| (102 rows)
 | |
| 
 | |
| -- Test errors thrown on remote side during update
 | |
| ALTER TABLE "S 1"."T 1" ADD CONSTRAINT c2positive CHECK (c2 >= 0);
 | |
| INSERT INTO ft1(c1, c2) VALUES(11, 12);  -- duplicate key
 | |
| ERROR:  duplicate key value violates unique constraint "t1_pkey"
 | |
| DETAIL:  Key ("C 1")=(11) already exists.
 | |
| CONTEXT:  Remote SQL command: INSERT INTO "S 1"."T 1"("C 1", c2, c3, c4, c5, c6, c7, c8) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
 | |
| INSERT INTO ft1(c1, c2) VALUES(1111, -2);  -- c2positive
 | |
| ERROR:  new row for relation "T 1" violates check constraint "c2positive"
 | |
| DETAIL:  Failing row contains (1111, -2, null, null, null, null, ft1       , null).
 | |
| CONTEXT:  Remote SQL command: INSERT INTO "S 1"."T 1"("C 1", c2, c3, c4, c5, c6, c7, c8) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
 | |
| UPDATE ft1 SET c2 = -c2 WHERE c1 = 1;  -- c2positive
 | |
| ERROR:  new row for relation "T 1" violates check constraint "c2positive"
 | |
| DETAIL:  Failing row contains (1, -1, 00001_trig_update, 1970-01-02 08:00:00+00, 1970-01-02 00:00:00, 1, 1         , foo).
 | |
| CONTEXT:  Remote SQL command: UPDATE "S 1"."T 1" SET c2 = $2 WHERE ctid = $1
 | |
| -- Test savepoint/rollback behavior
 | |
| select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;
 | |
|  c2  | count 
 | |
| -----+-------
 | |
|    0 |   100
 | |
|    1 |   100
 | |
|    4 |   100
 | |
|    6 |   100
 | |
|  100 |     2
 | |
|  101 |     2
 | |
|  104 |     2
 | |
|  106 |     2
 | |
|  201 |     1
 | |
|  204 |     1
 | |
|  303 |   100
 | |
|  403 |     2
 | |
|  407 |   100
 | |
| (13 rows)
 | |
| 
 | |
| select c2, count(*) from "S 1"."T 1" where c2 < 500 group by 1 order by 1;
 | |
|  c2  | count 
 | |
| -----+-------
 | |
|    0 |   100
 | |
|    1 |   100
 | |
|    4 |   100
 | |
|    6 |   100
 | |
|  100 |     2
 | |
|  101 |     2
 | |
|  104 |     2
 | |
|  106 |     2
 | |
|  201 |     1
 | |
|  204 |     1
 | |
|  303 |   100
 | |
|  403 |     2
 | |
|  407 |   100
 | |
| (13 rows)
 | |
| 
 | |
| begin;
 | |
| update ft2 set c2 = 42 where c2 = 0;
 | |
| select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;
 | |
|  c2  | count 
 | |
| -----+-------
 | |
|    1 |   100
 | |
|    4 |   100
 | |
|    6 |   100
 | |
|   42 |   100
 | |
|  100 |     2
 | |
|  101 |     2
 | |
|  104 |     2
 | |
|  106 |     2
 | |
|  201 |     1
 | |
|  204 |     1
 | |
|  303 |   100
 | |
|  403 |     2
 | |
|  407 |   100
 | |
| (13 rows)
 | |
| 
 | |
| savepoint s1;
 | |
| update ft2 set c2 = 44 where c2 = 4;
 | |
| select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;
 | |
|  c2  | count 
 | |
| -----+-------
 | |
|    1 |   100
 | |
|    6 |   100
 | |
|   42 |   100
 | |
|   44 |   100
 | |
|  100 |     2
 | |
|  101 |     2
 | |
|  104 |     2
 | |
|  106 |     2
 | |
|  201 |     1
 | |
|  204 |     1
 | |
|  303 |   100
 | |
|  403 |     2
 | |
|  407 |   100
 | |
| (13 rows)
 | |
| 
 | |
| release savepoint s1;
 | |
| select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;
 | |
|  c2  | count 
 | |
| -----+-------
 | |
|    1 |   100
 | |
|    6 |   100
 | |
|   42 |   100
 | |
|   44 |   100
 | |
|  100 |     2
 | |
|  101 |     2
 | |
|  104 |     2
 | |
|  106 |     2
 | |
|  201 |     1
 | |
|  204 |     1
 | |
|  303 |   100
 | |
|  403 |     2
 | |
|  407 |   100
 | |
| (13 rows)
 | |
| 
 | |
| savepoint s2;
 | |
| update ft2 set c2 = 46 where c2 = 6;
 | |
| select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;
 | |
|  c2  | count 
 | |
| -----+-------
 | |
|    1 |   100
 | |
|   42 |   100
 | |
|   44 |   100
 | |
|   46 |   100
 | |
|  100 |     2
 | |
|  101 |     2
 | |
|  104 |     2
 | |
|  106 |     2
 | |
|  201 |     1
 | |
|  204 |     1
 | |
|  303 |   100
 | |
|  403 |     2
 | |
|  407 |   100
 | |
| (13 rows)
 | |
| 
 | |
| rollback to savepoint s2;
 | |
| select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;
 | |
|  c2  | count 
 | |
| -----+-------
 | |
|    1 |   100
 | |
|    6 |   100
 | |
|   42 |   100
 | |
|   44 |   100
 | |
|  100 |     2
 | |
|  101 |     2
 | |
|  104 |     2
 | |
|  106 |     2
 | |
|  201 |     1
 | |
|  204 |     1
 | |
|  303 |   100
 | |
|  403 |     2
 | |
|  407 |   100
 | |
| (13 rows)
 | |
| 
 | |
| release savepoint s2;
 | |
| select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;
 | |
|  c2  | count 
 | |
| -----+-------
 | |
|    1 |   100
 | |
|    6 |   100
 | |
|   42 |   100
 | |
|   44 |   100
 | |
|  100 |     2
 | |
|  101 |     2
 | |
|  104 |     2
 | |
|  106 |     2
 | |
|  201 |     1
 | |
|  204 |     1
 | |
|  303 |   100
 | |
|  403 |     2
 | |
|  407 |   100
 | |
| (13 rows)
 | |
| 
 | |
| savepoint s3;
 | |
| update ft2 set c2 = -2 where c2 = 42 and c1 = 10; -- fail on remote side
 | |
| ERROR:  new row for relation "T 1" violates check constraint "c2positive"
 | |
| DETAIL:  Failing row contains (10, -2, 00010_trig_update_trig_update, 1970-01-11 08:00:00+00, 1970-01-11 00:00:00, 0, 0         , foo).
 | |
| CONTEXT:  Remote SQL command: UPDATE "S 1"."T 1" SET c2 = $2 WHERE ctid = $1
 | |
| rollback to savepoint s3;
 | |
| select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;
 | |
|  c2  | count 
 | |
| -----+-------
 | |
|    1 |   100
 | |
|    6 |   100
 | |
|   42 |   100
 | |
|   44 |   100
 | |
|  100 |     2
 | |
|  101 |     2
 | |
|  104 |     2
 | |
|  106 |     2
 | |
|  201 |     1
 | |
|  204 |     1
 | |
|  303 |   100
 | |
|  403 |     2
 | |
|  407 |   100
 | |
| (13 rows)
 | |
| 
 | |
| release savepoint s3;
 | |
| select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;
 | |
|  c2  | count 
 | |
| -----+-------
 | |
|    1 |   100
 | |
|    6 |   100
 | |
|   42 |   100
 | |
|   44 |   100
 | |
|  100 |     2
 | |
|  101 |     2
 | |
|  104 |     2
 | |
|  106 |     2
 | |
|  201 |     1
 | |
|  204 |     1
 | |
|  303 |   100
 | |
|  403 |     2
 | |
|  407 |   100
 | |
| (13 rows)
 | |
| 
 | |
| -- none of the above is committed yet remotely
 | |
| select c2, count(*) from "S 1"."T 1" where c2 < 500 group by 1 order by 1;
 | |
|  c2  | count 
 | |
| -----+-------
 | |
|    0 |   100
 | |
|    1 |   100
 | |
|    4 |   100
 | |
|    6 |   100
 | |
|  100 |     2
 | |
|  101 |     2
 | |
|  104 |     2
 | |
|  106 |     2
 | |
|  201 |     1
 | |
|  204 |     1
 | |
|  303 |   100
 | |
|  403 |     2
 | |
|  407 |   100
 | |
| (13 rows)
 | |
| 
 | |
| commit;
 | |
| select c2, count(*) from ft2 where c2 < 500 group by 1 order by 1;
 | |
|  c2  | count 
 | |
| -----+-------
 | |
|    1 |   100
 | |
|    6 |   100
 | |
|   42 |   100
 | |
|   44 |   100
 | |
|  100 |     2
 | |
|  101 |     2
 | |
|  104 |     2
 | |
|  106 |     2
 | |
|  201 |     1
 | |
|  204 |     1
 | |
|  303 |   100
 | |
|  403 |     2
 | |
|  407 |   100
 | |
| (13 rows)
 | |
| 
 | |
| select c2, count(*) from "S 1"."T 1" where c2 < 500 group by 1 order by 1;
 | |
|  c2  | count 
 | |
| -----+-------
 | |
|    1 |   100
 | |
|    6 |   100
 | |
|   42 |   100
 | |
|   44 |   100
 | |
|  100 |     2
 | |
|  101 |     2
 | |
|  104 |     2
 | |
|  106 |     2
 | |
|  201 |     1
 | |
|  204 |     1
 | |
|  303 |   100
 | |
|  403 |     2
 | |
|  407 |   100
 | |
| (13 rows)
 | |
| 
 | |
| -- ===================================================================
 | |
| -- test serial columns (ie, sequence-based defaults)
 | |
| -- ===================================================================
 | |
| create table loc1 (f1 serial, f2 text);
 | |
| create foreign table rem1 (f1 serial, f2 text)
 | |
|   server loopback options(table_name 'loc1');
 | |
| select pg_catalog.setval('rem1_f1_seq', 10, false);
 | |
|  setval 
 | |
| --------
 | |
|      10
 | |
| (1 row)
 | |
| 
 | |
| insert into loc1(f2) values('hi');
 | |
| insert into rem1(f2) values('hi remote');
 | |
| insert into loc1(f2) values('bye');
 | |
| insert into rem1(f2) values('bye remote');
 | |
| select * from loc1;
 | |
|  f1 |     f2     
 | |
| ----+------------
 | |
|   1 | hi
 | |
|  10 | hi remote
 | |
|   2 | bye
 | |
|  11 | bye remote
 | |
| (4 rows)
 | |
| 
 | |
| select * from rem1;
 | |
|  f1 |     f2     
 | |
| ----+------------
 | |
|   1 | hi
 | |
|  10 | hi remote
 | |
|   2 | bye
 | |
|  11 | bye remote
 | |
| (4 rows)
 | |
| 
 | |
| -- ===================================================================
 | |
| -- test local triggers
 | |
| -- ===================================================================
 | |
| -- Trigger functions "borrowed" from triggers regress test.
 | |
| CREATE FUNCTION trigger_func() RETURNS trigger LANGUAGE plpgsql AS $$
 | |
| BEGIN
 | |
| 	RAISE NOTICE 'trigger_func(%) called: action = %, when = %, level = %',
 | |
| 		TG_ARGV[0], TG_OP, TG_WHEN, TG_LEVEL;
 | |
| 	RETURN NULL;
 | |
| END;$$;
 | |
| CREATE TRIGGER trig_stmt_before BEFORE DELETE OR INSERT OR UPDATE ON rem1
 | |
| 	FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();
 | |
| CREATE TRIGGER trig_stmt_after AFTER DELETE OR INSERT OR UPDATE ON rem1
 | |
| 	FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func();
 | |
| CREATE OR REPLACE FUNCTION trigger_data()  RETURNS trigger
 | |
| LANGUAGE plpgsql AS $$
 | |
| 
 | |
| declare
 | |
| 	oldnew text[];
 | |
| 	relid text;
 | |
|     argstr text;
 | |
| begin
 | |
| 
 | |
| 	relid := TG_relid::regclass;
 | |
| 	argstr := '';
 | |
| 	for i in 0 .. TG_nargs - 1 loop
 | |
| 		if i > 0 then
 | |
| 			argstr := argstr || ', ';
 | |
| 		end if;
 | |
| 		argstr := argstr || TG_argv[i];
 | |
| 	end loop;
 | |
| 
 | |
|     RAISE NOTICE '%(%) % % % ON %',
 | |
| 		tg_name, argstr, TG_when, TG_level, TG_OP, relid;
 | |
|     oldnew := '{}'::text[];
 | |
| 	if TG_OP != 'INSERT' then
 | |
| 		oldnew := array_append(oldnew, format('OLD: %s', OLD));
 | |
| 	end if;
 | |
| 
 | |
| 	if TG_OP != 'DELETE' then
 | |
| 		oldnew := array_append(oldnew, format('NEW: %s', NEW));
 | |
| 	end if;
 | |
| 
 | |
|     RAISE NOTICE '%', array_to_string(oldnew, ',');
 | |
| 
 | |
| 	if TG_OP = 'DELETE' then
 | |
| 		return OLD;
 | |
| 	else
 | |
| 		return NEW;
 | |
| 	end if;
 | |
| end;
 | |
| $$;
 | |
| -- Test basic functionality
 | |
| CREATE TRIGGER trig_row_before
 | |
| BEFORE INSERT OR UPDATE OR DELETE ON rem1
 | |
| FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');
 | |
| CREATE TRIGGER trig_row_after
 | |
| AFTER INSERT OR UPDATE OR DELETE ON rem1
 | |
| FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');
 | |
| delete from rem1;
 | |
| NOTICE:  trigger_func(<NULL>) called: action = DELETE, when = BEFORE, level = STATEMENT
 | |
| NOTICE:  trig_row_before(23, skidoo) BEFORE ROW DELETE ON rem1
 | |
| NOTICE:  OLD: (1,hi)
 | |
| NOTICE:  trig_row_before(23, skidoo) BEFORE ROW DELETE ON rem1
 | |
| NOTICE:  OLD: (10,"hi remote")
 | |
| NOTICE:  trig_row_before(23, skidoo) BEFORE ROW DELETE ON rem1
 | |
| NOTICE:  OLD: (2,bye)
 | |
| NOTICE:  trig_row_before(23, skidoo) BEFORE ROW DELETE ON rem1
 | |
| NOTICE:  OLD: (11,"bye remote")
 | |
| NOTICE:  trig_row_after(23, skidoo) AFTER ROW DELETE ON rem1
 | |
| NOTICE:  OLD: (1,hi)
 | |
| NOTICE:  trig_row_after(23, skidoo) AFTER ROW DELETE ON rem1
 | |
| NOTICE:  OLD: (10,"hi remote")
 | |
| NOTICE:  trig_row_after(23, skidoo) AFTER ROW DELETE ON rem1
 | |
| NOTICE:  OLD: (2,bye)
 | |
| NOTICE:  trig_row_after(23, skidoo) AFTER ROW DELETE ON rem1
 | |
| NOTICE:  OLD: (11,"bye remote")
 | |
| NOTICE:  trigger_func(<NULL>) called: action = DELETE, when = AFTER, level = STATEMENT
 | |
| insert into rem1 values(1,'insert');
 | |
| NOTICE:  trigger_func(<NULL>) called: action = INSERT, when = BEFORE, level = STATEMENT
 | |
| NOTICE:  trig_row_before(23, skidoo) BEFORE ROW INSERT ON rem1
 | |
| NOTICE:  NEW: (1,insert)
 | |
| NOTICE:  trig_row_after(23, skidoo) AFTER ROW INSERT ON rem1
 | |
| NOTICE:  NEW: (1,insert)
 | |
| NOTICE:  trigger_func(<NULL>) called: action = INSERT, when = AFTER, level = STATEMENT
 | |
| update rem1 set f2  = 'update' where f1 = 1;
 | |
| NOTICE:  trigger_func(<NULL>) called: action = UPDATE, when = BEFORE, level = STATEMENT
 | |
| NOTICE:  trig_row_before(23, skidoo) BEFORE ROW UPDATE ON rem1
 | |
| NOTICE:  OLD: (1,insert),NEW: (1,update)
 | |
| NOTICE:  trig_row_after(23, skidoo) AFTER ROW UPDATE ON rem1
 | |
| NOTICE:  OLD: (1,insert),NEW: (1,update)
 | |
| NOTICE:  trigger_func(<NULL>) called: action = UPDATE, when = AFTER, level = STATEMENT
 | |
| update rem1 set f2 = f2 || f2;
 | |
| NOTICE:  trigger_func(<NULL>) called: action = UPDATE, when = BEFORE, level = STATEMENT
 | |
| NOTICE:  trig_row_before(23, skidoo) BEFORE ROW UPDATE ON rem1
 | |
| NOTICE:  OLD: (1,update),NEW: (1,updateupdate)
 | |
| NOTICE:  trig_row_after(23, skidoo) AFTER ROW UPDATE ON rem1
 | |
| NOTICE:  OLD: (1,update),NEW: (1,updateupdate)
 | |
| NOTICE:  trigger_func(<NULL>) called: action = UPDATE, when = AFTER, level = STATEMENT
 | |
| -- cleanup
 | |
| DROP TRIGGER trig_row_before ON rem1;
 | |
| DROP TRIGGER trig_row_after ON rem1;
 | |
| DROP TRIGGER trig_stmt_before ON rem1;
 | |
| DROP TRIGGER trig_stmt_after ON rem1;
 | |
| DELETE from rem1;
 | |
| -- Test WHEN conditions
 | |
| CREATE TRIGGER trig_row_before_insupd
 | |
| BEFORE INSERT OR UPDATE ON rem1
 | |
| FOR EACH ROW
 | |
| WHEN (NEW.f2 like '%update%')
 | |
| EXECUTE PROCEDURE trigger_data(23,'skidoo');
 | |
| CREATE TRIGGER trig_row_after_insupd
 | |
| AFTER INSERT OR UPDATE ON rem1
 | |
| FOR EACH ROW
 | |
| WHEN (NEW.f2 like '%update%')
 | |
| EXECUTE PROCEDURE trigger_data(23,'skidoo');
 | |
| -- Insert or update not matching: nothing happens
 | |
| INSERT INTO rem1 values(1, 'insert');
 | |
| UPDATE rem1 set f2 = 'test';
 | |
| -- Insert or update matching: triggers are fired
 | |
| INSERT INTO rem1 values(2, 'update');
 | |
| NOTICE:  trig_row_before_insupd(23, skidoo) BEFORE ROW INSERT ON rem1
 | |
| NOTICE:  NEW: (2,update)
 | |
| NOTICE:  trig_row_after_insupd(23, skidoo) AFTER ROW INSERT ON rem1
 | |
| NOTICE:  NEW: (2,update)
 | |
| UPDATE rem1 set f2 = 'update update' where f1 = '2';
 | |
| NOTICE:  trig_row_before_insupd(23, skidoo) BEFORE ROW UPDATE ON rem1
 | |
| NOTICE:  OLD: (2,update),NEW: (2,"update update")
 | |
| NOTICE:  trig_row_after_insupd(23, skidoo) AFTER ROW UPDATE ON rem1
 | |
| NOTICE:  OLD: (2,update),NEW: (2,"update update")
 | |
| CREATE TRIGGER trig_row_before_delete
 | |
| BEFORE DELETE ON rem1
 | |
| FOR EACH ROW
 | |
| WHEN (OLD.f2 like '%update%')
 | |
| EXECUTE PROCEDURE trigger_data(23,'skidoo');
 | |
| CREATE TRIGGER trig_row_after_delete
 | |
| AFTER DELETE ON rem1
 | |
| FOR EACH ROW
 | |
| WHEN (OLD.f2 like '%update%')
 | |
| EXECUTE PROCEDURE trigger_data(23,'skidoo');
 | |
| -- Trigger is fired for f1=2, not for f1=1
 | |
| DELETE FROM rem1;
 | |
| NOTICE:  trig_row_before_delete(23, skidoo) BEFORE ROW DELETE ON rem1
 | |
| NOTICE:  OLD: (2,"update update")
 | |
| NOTICE:  trig_row_after_delete(23, skidoo) AFTER ROW DELETE ON rem1
 | |
| NOTICE:  OLD: (2,"update update")
 | |
| -- cleanup
 | |
| DROP TRIGGER trig_row_before_insupd ON rem1;
 | |
| DROP TRIGGER trig_row_after_insupd ON rem1;
 | |
| DROP TRIGGER trig_row_before_delete ON rem1;
 | |
| DROP TRIGGER trig_row_after_delete ON rem1;
 | |
| -- Test various RETURN statements in BEFORE triggers.
 | |
| CREATE FUNCTION trig_row_before_insupdate() RETURNS TRIGGER AS $$
 | |
|   BEGIN
 | |
|     NEW.f2 := NEW.f2 || ' triggered !';
 | |
|     RETURN NEW;
 | |
|   END
 | |
| $$ language plpgsql;
 | |
| CREATE TRIGGER trig_row_before_insupd
 | |
| BEFORE INSERT OR UPDATE ON rem1
 | |
| FOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();
 | |
| -- The new values should have 'triggered' appended
 | |
| INSERT INTO rem1 values(1, 'insert');
 | |
| SELECT * from loc1;
 | |
|  f1 |         f2         
 | |
| ----+--------------------
 | |
|   1 | insert triggered !
 | |
| (1 row)
 | |
| 
 | |
| INSERT INTO rem1 values(2, 'insert') RETURNING f2;
 | |
|          f2         
 | |
| --------------------
 | |
|  insert triggered !
 | |
| (1 row)
 | |
| 
 | |
| SELECT * from loc1;
 | |
|  f1 |         f2         
 | |
| ----+--------------------
 | |
|   1 | insert triggered !
 | |
|   2 | insert triggered !
 | |
| (2 rows)
 | |
| 
 | |
| UPDATE rem1 set f2 = '';
 | |
| SELECT * from loc1;
 | |
|  f1 |      f2      
 | |
| ----+--------------
 | |
|   1 |  triggered !
 | |
|   2 |  triggered !
 | |
| (2 rows)
 | |
| 
 | |
| UPDATE rem1 set f2 = 'skidoo' RETURNING f2;
 | |
|          f2         
 | |
| --------------------
 | |
|  skidoo triggered !
 | |
|  skidoo triggered !
 | |
| (2 rows)
 | |
| 
 | |
| SELECT * from loc1;
 | |
|  f1 |         f2         
 | |
| ----+--------------------
 | |
|   1 | skidoo triggered !
 | |
|   2 | skidoo triggered !
 | |
| (2 rows)
 | |
| 
 | |
| DELETE FROM rem1;
 | |
| -- Add a second trigger, to check that the changes are propagated correctly
 | |
| -- from trigger to trigger
 | |
| CREATE TRIGGER trig_row_before_insupd2
 | |
| BEFORE INSERT OR UPDATE ON rem1
 | |
| FOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();
 | |
| INSERT INTO rem1 values(1, 'insert');
 | |
| SELECT * from loc1;
 | |
|  f1 |               f2               
 | |
| ----+--------------------------------
 | |
|   1 | insert triggered ! triggered !
 | |
| (1 row)
 | |
| 
 | |
| INSERT INTO rem1 values(2, 'insert') RETURNING f2;
 | |
|                f2               
 | |
| --------------------------------
 | |
|  insert triggered ! triggered !
 | |
| (1 row)
 | |
| 
 | |
| SELECT * from loc1;
 | |
|  f1 |               f2               
 | |
| ----+--------------------------------
 | |
|   1 | insert triggered ! triggered !
 | |
|   2 | insert triggered ! triggered !
 | |
| (2 rows)
 | |
| 
 | |
| UPDATE rem1 set f2 = '';
 | |
| SELECT * from loc1;
 | |
|  f1 |            f2            
 | |
| ----+--------------------------
 | |
|   1 |  triggered ! triggered !
 | |
|   2 |  triggered ! triggered !
 | |
| (2 rows)
 | |
| 
 | |
| UPDATE rem1 set f2 = 'skidoo' RETURNING f2;
 | |
|                f2               
 | |
| --------------------------------
 | |
|  skidoo triggered ! triggered !
 | |
|  skidoo triggered ! triggered !
 | |
| (2 rows)
 | |
| 
 | |
| SELECT * from loc1;
 | |
|  f1 |               f2               
 | |
| ----+--------------------------------
 | |
|   1 | skidoo triggered ! triggered !
 | |
|   2 | skidoo triggered ! triggered !
 | |
| (2 rows)
 | |
| 
 | |
| DROP TRIGGER trig_row_before_insupd ON rem1;
 | |
| DROP TRIGGER trig_row_before_insupd2 ON rem1;
 | |
| DELETE from rem1;
 | |
| INSERT INTO rem1 VALUES (1, 'test');
 | |
| -- Test with a trigger returning NULL
 | |
| CREATE FUNCTION trig_null() RETURNS TRIGGER AS $$
 | |
|   BEGIN
 | |
|     RETURN NULL;
 | |
|   END
 | |
| $$ language plpgsql;
 | |
| CREATE TRIGGER trig_null
 | |
| BEFORE INSERT OR UPDATE OR DELETE ON rem1
 | |
| FOR EACH ROW EXECUTE PROCEDURE trig_null();
 | |
| -- Nothing should have changed.
 | |
| INSERT INTO rem1 VALUES (2, 'test2');
 | |
| SELECT * from loc1;
 | |
|  f1 |  f2  
 | |
| ----+------
 | |
|   1 | test
 | |
| (1 row)
 | |
| 
 | |
| UPDATE rem1 SET f2 = 'test2';
 | |
| SELECT * from loc1;
 | |
|  f1 |  f2  
 | |
| ----+------
 | |
|   1 | test
 | |
| (1 row)
 | |
| 
 | |
| DELETE from rem1;
 | |
| SELECT * from loc1;
 | |
|  f1 |  f2  
 | |
| ----+------
 | |
|   1 | test
 | |
| (1 row)
 | |
| 
 | |
| DROP TRIGGER trig_null ON rem1;
 | |
| DELETE from rem1;
 | |
| -- Test a combination of local and remote triggers
 | |
| CREATE TRIGGER trig_row_before
 | |
| BEFORE INSERT OR UPDATE OR DELETE ON rem1
 | |
| FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');
 | |
| CREATE TRIGGER trig_row_after
 | |
| AFTER INSERT OR UPDATE OR DELETE ON rem1
 | |
| FOR EACH ROW EXECUTE PROCEDURE trigger_data(23,'skidoo');
 | |
| CREATE TRIGGER trig_local_before BEFORE INSERT OR UPDATE ON loc1
 | |
| FOR EACH ROW EXECUTE PROCEDURE trig_row_before_insupdate();
 | |
| INSERT INTO rem1(f2) VALUES ('test');
 | |
| NOTICE:  trig_row_before(23, skidoo) BEFORE ROW INSERT ON rem1
 | |
| NOTICE:  NEW: (12,test)
 | |
| NOTICE:  trig_row_after(23, skidoo) AFTER ROW INSERT ON rem1
 | |
| NOTICE:  NEW: (12,"test triggered !")
 | |
| UPDATE rem1 SET f2 = 'testo';
 | |
| NOTICE:  trig_row_before(23, skidoo) BEFORE ROW UPDATE ON rem1
 | |
| NOTICE:  OLD: (12,"test triggered !"),NEW: (12,testo)
 | |
| NOTICE:  trig_row_after(23, skidoo) AFTER ROW UPDATE ON rem1
 | |
| NOTICE:  OLD: (12,"test triggered !"),NEW: (12,"testo triggered !")
 | |
| -- Test returning a system attribute
 | |
| INSERT INTO rem1(f2) VALUES ('test') RETURNING ctid;
 | |
| NOTICE:  trig_row_before(23, skidoo) BEFORE ROW INSERT ON rem1
 | |
| NOTICE:  NEW: (13,test)
 | |
| NOTICE:  trig_row_after(23, skidoo) AFTER ROW INSERT ON rem1
 | |
| NOTICE:  NEW: (13,"test triggered !")
 | |
|   ctid  
 | |
| --------
 | |
|  (0,27)
 | |
| (1 row)
 | |
| 
 | |
| -- ===================================================================
 | |
| -- test IMPORT FOREIGN SCHEMA
 | |
| -- ===================================================================
 | |
| CREATE SCHEMA import_source;
 | |
| CREATE TABLE import_source.t1 (c1 int, c2 varchar NOT NULL);
 | |
| CREATE TABLE import_source.t2 (c1 int default 42, c2 varchar NULL, c3 text collate "POSIX");
 | |
| CREATE TYPE typ1 AS (m1 int, m2 varchar);
 | |
| CREATE TABLE import_source.t3 (c1 timestamptz default now(), c2 typ1);
 | |
| CREATE TABLE import_source."x 4" (c1 float8, "C 2" text, c3 varchar(42));
 | |
| CREATE TABLE import_source."x 5" (c1 float8);
 | |
| ALTER TABLE import_source."x 5" DROP COLUMN c1;
 | |
| CREATE SCHEMA import_dest1;
 | |
| IMPORT FOREIGN SCHEMA import_source FROM SERVER loopback INTO import_dest1;
 | |
| \det+ import_dest1
 | |
|                                      List of foreign tables
 | |
|     Schema    | Table |  Server  |                   FDW Options                   | Description 
 | |
| --------------+-------+----------+-------------------------------------------------+-------------
 | |
|  import_dest1 | t1    | loopback | (schema_name 'import_source', table_name 't1')  | 
 | |
|  import_dest1 | t2    | loopback | (schema_name 'import_source', table_name 't2')  | 
 | |
|  import_dest1 | t3    | loopback | (schema_name 'import_source', table_name 't3')  | 
 | |
|  import_dest1 | x 4   | loopback | (schema_name 'import_source', table_name 'x 4') | 
 | |
|  import_dest1 | x 5   | loopback | (schema_name 'import_source', table_name 'x 5') | 
 | |
| (5 rows)
 | |
| 
 | |
| \d import_dest1.*
 | |
|                Foreign table "import_dest1.t1"
 | |
|  Column |       Type        | Modifiers |    FDW Options     
 | |
| --------+-------------------+-----------+--------------------
 | |
|  c1     | integer           |           | (column_name 'c1')
 | |
|  c2     | character varying | not null  | (column_name 'c2')
 | |
| Server: loopback
 | |
| FDW Options: (schema_name 'import_source', table_name 't1')
 | |
| 
 | |
|                  Foreign table "import_dest1.t2"
 | |
|  Column |       Type        |   Modifiers   |    FDW Options     
 | |
| --------+-------------------+---------------+--------------------
 | |
|  c1     | integer           |               | (column_name 'c1')
 | |
|  c2     | character varying |               | (column_name 'c2')
 | |
|  c3     | text              | collate POSIX | (column_name 'c3')
 | |
| Server: loopback
 | |
| FDW Options: (schema_name 'import_source', table_name 't2')
 | |
| 
 | |
|                   Foreign table "import_dest1.t3"
 | |
|  Column |           Type           | Modifiers |    FDW Options     
 | |
| --------+--------------------------+-----------+--------------------
 | |
|  c1     | timestamp with time zone |           | (column_name 'c1')
 | |
|  c2     | typ1                     |           | (column_name 'c2')
 | |
| Server: loopback
 | |
| FDW Options: (schema_name 'import_source', table_name 't3')
 | |
| 
 | |
|                  Foreign table "import_dest1.x 4"
 | |
|  Column |         Type          | Modifiers |     FDW Options     
 | |
| --------+-----------------------+-----------+---------------------
 | |
|  c1     | double precision      |           | (column_name 'c1')
 | |
|  C 2    | text                  |           | (column_name 'C 2')
 | |
|  c3     | character varying(42) |           | (column_name 'c3')
 | |
| Server: loopback
 | |
| FDW Options: (schema_name 'import_source', table_name 'x 4')
 | |
| 
 | |
|     Foreign table "import_dest1.x 5"
 | |
|  Column | Type | Modifiers | FDW Options 
 | |
| --------+------+-----------+-------------
 | |
| Server: loopback
 | |
| FDW Options: (schema_name 'import_source', table_name 'x 5')
 | |
| 
 | |
| -- Options
 | |
| CREATE SCHEMA import_dest2;
 | |
| IMPORT FOREIGN SCHEMA import_source FROM SERVER loopback INTO import_dest2
 | |
|   OPTIONS (import_default 'true');
 | |
| \det+ import_dest2
 | |
|                                      List of foreign tables
 | |
|     Schema    | Table |  Server  |                   FDW Options                   | Description 
 | |
| --------------+-------+----------+-------------------------------------------------+-------------
 | |
|  import_dest2 | t1    | loopback | (schema_name 'import_source', table_name 't1')  | 
 | |
|  import_dest2 | t2    | loopback | (schema_name 'import_source', table_name 't2')  | 
 | |
|  import_dest2 | t3    | loopback | (schema_name 'import_source', table_name 't3')  | 
 | |
|  import_dest2 | x 4   | loopback | (schema_name 'import_source', table_name 'x 4') | 
 | |
|  import_dest2 | x 5   | loopback | (schema_name 'import_source', table_name 'x 5') | 
 | |
| (5 rows)
 | |
| 
 | |
| \d import_dest2.*
 | |
|                Foreign table "import_dest2.t1"
 | |
|  Column |       Type        | Modifiers |    FDW Options     
 | |
| --------+-------------------+-----------+--------------------
 | |
|  c1     | integer           |           | (column_name 'c1')
 | |
|  c2     | character varying | not null  | (column_name 'c2')
 | |
| Server: loopback
 | |
| FDW Options: (schema_name 'import_source', table_name 't1')
 | |
| 
 | |
|                  Foreign table "import_dest2.t2"
 | |
|  Column |       Type        |   Modifiers   |    FDW Options     
 | |
| --------+-------------------+---------------+--------------------
 | |
|  c1     | integer           | default 42    | (column_name 'c1')
 | |
|  c2     | character varying |               | (column_name 'c2')
 | |
|  c3     | text              | collate POSIX | (column_name 'c3')
 | |
| Server: loopback
 | |
| FDW Options: (schema_name 'import_source', table_name 't2')
 | |
| 
 | |
|                     Foreign table "import_dest2.t3"
 | |
|  Column |           Type           |   Modifiers   |    FDW Options     
 | |
| --------+--------------------------+---------------+--------------------
 | |
|  c1     | timestamp with time zone | default now() | (column_name 'c1')
 | |
|  c2     | typ1                     |               | (column_name 'c2')
 | |
| Server: loopback
 | |
| FDW Options: (schema_name 'import_source', table_name 't3')
 | |
| 
 | |
|                  Foreign table "import_dest2.x 4"
 | |
|  Column |         Type          | Modifiers |     FDW Options     
 | |
| --------+-----------------------+-----------+---------------------
 | |
|  c1     | double precision      |           | (column_name 'c1')
 | |
|  C 2    | text                  |           | (column_name 'C 2')
 | |
|  c3     | character varying(42) |           | (column_name 'c3')
 | |
| Server: loopback
 | |
| FDW Options: (schema_name 'import_source', table_name 'x 4')
 | |
| 
 | |
|     Foreign table "import_dest2.x 5"
 | |
|  Column | Type | Modifiers | FDW Options 
 | |
| --------+------+-----------+-------------
 | |
| Server: loopback
 | |
| FDW Options: (schema_name 'import_source', table_name 'x 5')
 | |
| 
 | |
| CREATE SCHEMA import_dest3;
 | |
| IMPORT FOREIGN SCHEMA import_source FROM SERVER loopback INTO import_dest3
 | |
|   OPTIONS (import_collate 'false', import_not_null 'false');
 | |
| \det+ import_dest3
 | |
|                                      List of foreign tables
 | |
|     Schema    | Table |  Server  |                   FDW Options                   | Description 
 | |
| --------------+-------+----------+-------------------------------------------------+-------------
 | |
|  import_dest3 | t1    | loopback | (schema_name 'import_source', table_name 't1')  | 
 | |
|  import_dest3 | t2    | loopback | (schema_name 'import_source', table_name 't2')  | 
 | |
|  import_dest3 | t3    | loopback | (schema_name 'import_source', table_name 't3')  | 
 | |
|  import_dest3 | x 4   | loopback | (schema_name 'import_source', table_name 'x 4') | 
 | |
|  import_dest3 | x 5   | loopback | (schema_name 'import_source', table_name 'x 5') | 
 | |
| (5 rows)
 | |
| 
 | |
| \d import_dest3.*
 | |
|                Foreign table "import_dest3.t1"
 | |
|  Column |       Type        | Modifiers |    FDW Options     
 | |
| --------+-------------------+-----------+--------------------
 | |
|  c1     | integer           |           | (column_name 'c1')
 | |
|  c2     | character varying |           | (column_name 'c2')
 | |
| Server: loopback
 | |
| FDW Options: (schema_name 'import_source', table_name 't1')
 | |
| 
 | |
|                Foreign table "import_dest3.t2"
 | |
|  Column |       Type        | Modifiers |    FDW Options     
 | |
| --------+-------------------+-----------+--------------------
 | |
|  c1     | integer           |           | (column_name 'c1')
 | |
|  c2     | character varying |           | (column_name 'c2')
 | |
|  c3     | text              |           | (column_name 'c3')
 | |
| Server: loopback
 | |
| FDW Options: (schema_name 'import_source', table_name 't2')
 | |
| 
 | |
|                   Foreign table "import_dest3.t3"
 | |
|  Column |           Type           | Modifiers |    FDW Options     
 | |
| --------+--------------------------+-----------+--------------------
 | |
|  c1     | timestamp with time zone |           | (column_name 'c1')
 | |
|  c2     | typ1                     |           | (column_name 'c2')
 | |
| Server: loopback
 | |
| FDW Options: (schema_name 'import_source', table_name 't3')
 | |
| 
 | |
|                  Foreign table "import_dest3.x 4"
 | |
|  Column |         Type          | Modifiers |     FDW Options     
 | |
| --------+-----------------------+-----------+---------------------
 | |
|  c1     | double precision      |           | (column_name 'c1')
 | |
|  C 2    | text                  |           | (column_name 'C 2')
 | |
|  c3     | character varying(42) |           | (column_name 'c3')
 | |
| Server: loopback
 | |
| FDW Options: (schema_name 'import_source', table_name 'x 4')
 | |
| 
 | |
|     Foreign table "import_dest3.x 5"
 | |
|  Column | Type | Modifiers | FDW Options 
 | |
| --------+------+-----------+-------------
 | |
| Server: loopback
 | |
| FDW Options: (schema_name 'import_source', table_name 'x 5')
 | |
| 
 | |
| -- Check LIMIT TO and EXCEPT
 | |
| CREATE SCHEMA import_dest4;
 | |
| IMPORT FOREIGN SCHEMA import_source LIMIT TO (t1, nonesuch)
 | |
|   FROM SERVER loopback INTO import_dest4;
 | |
| \det+ import_dest4
 | |
|                                      List of foreign tables
 | |
|     Schema    | Table |  Server  |                  FDW Options                   | Description 
 | |
| --------------+-------+----------+------------------------------------------------+-------------
 | |
|  import_dest4 | t1    | loopback | (schema_name 'import_source', table_name 't1') | 
 | |
| (1 row)
 | |
| 
 | |
| IMPORT FOREIGN SCHEMA import_source EXCEPT (t1, "x 4", nonesuch)
 | |
|   FROM SERVER loopback INTO import_dest4;
 | |
| \det+ import_dest4
 | |
|                                      List of foreign tables
 | |
|     Schema    | Table |  Server  |                   FDW Options                   | Description 
 | |
| --------------+-------+----------+-------------------------------------------------+-------------
 | |
|  import_dest4 | t1    | loopback | (schema_name 'import_source', table_name 't1')  | 
 | |
|  import_dest4 | t2    | loopback | (schema_name 'import_source', table_name 't2')  | 
 | |
|  import_dest4 | t3    | loopback | (schema_name 'import_source', table_name 't3')  | 
 | |
|  import_dest4 | x 5   | loopback | (schema_name 'import_source', table_name 'x 5') | 
 | |
| (4 rows)
 | |
| 
 | |
| -- Assorted error cases
 | |
| IMPORT FOREIGN SCHEMA import_source FROM SERVER loopback INTO import_dest4;
 | |
| ERROR:  relation "t1" already exists
 | |
| CONTEXT:  importing foreign table "t1"
 | |
| IMPORT FOREIGN SCHEMA nonesuch FROM SERVER loopback INTO import_dest4;
 | |
| ERROR:  schema "nonesuch" is not present on foreign server "loopback"
 | |
| IMPORT FOREIGN SCHEMA nonesuch FROM SERVER loopback INTO notthere;
 | |
| ERROR:  schema "notthere" does not exist
 | |
| IMPORT FOREIGN SCHEMA nonesuch FROM SERVER nowhere INTO notthere;
 | |
| ERROR:  server "nowhere" does not exist
 | |
| -- Check case of a type present only on the remote server.
 | |
| -- We can fake this by dropping the type locally in our transaction.
 | |
| CREATE TYPE "Colors" AS ENUM ('red', 'green', 'blue');
 | |
| CREATE TABLE import_source.t5 (c1 int, c2 text collate "C", "Col" "Colors");
 | |
| CREATE SCHEMA import_dest5;
 | |
| BEGIN;
 | |
| DROP TYPE "Colors" CASCADE;
 | |
| NOTICE:  drop cascades to table import_source.t5 column Col
 | |
| IMPORT FOREIGN SCHEMA import_source LIMIT TO (t5)
 | |
|   FROM SERVER loopback INTO import_dest5;  -- ERROR
 | |
| ERROR:  type "public.Colors" does not exist
 | |
| LINE 4:   "Col" public."Colors" OPTIONS (column_name 'Col')
 | |
|                 ^
 | |
| QUERY:  CREATE FOREIGN TABLE t5 (
 | |
|   c1 integer OPTIONS (column_name 'c1'),
 | |
|   c2 text OPTIONS (column_name 'c2') COLLATE pg_catalog."C",
 | |
|   "Col" public."Colors" OPTIONS (column_name 'Col')
 | |
| ) SERVER loopback
 | |
| OPTIONS (schema_name 'import_source', table_name 't5');
 | |
| CONTEXT:  importing foreign table "t5"
 | |
| ROLLBACK;
 |