2121class PglistTests (unittest .TestCase ):
2222
2323def setUp (self ):
24- self .node = tg .get_new_node ("pglist_select" )
24+ current_dir = os .path .dirname (os .path .abspath (__file__ ))
25+
26+ self .node = tg .get_new_node ("pglist" ,
27+ os .path .join (current_dir ,"tmp_install" ))
2528try :
2629self .node .init ()
2730self .node .append_conf ("postgresql.conf" ,
@@ -30,26 +33,20 @@ def setUp(self):
3033"max_wal_size='2GB'\n "
3134"work_mem='50MB'" )
3235self .node .start ()
33-
34- self .init_pglist_data (self .node )
3536except Exception as e :
36- self .printlog (self .node .logs_dir + "/ postgresql.log" )
37+ self .printlog (os . path . join ( self .node .logs_dir , " postgresql.log") )
3738raise e
3839
3940def tearDown (self ):
4041tg .stop_all ()
4142
4243def init_pglist_data (self ,node ):
4344# Check if 'pglist' base exists
44- base_exists = False
4545bases = node .execute ("postgres" ,
46- "SELECT datname FROM pg_database WHERE datistemplate = false" )
47- for base in bases :
48- if base [0 ].lower ()== "pglist" :
49- base_exists = True
50- break
51-
52- if base_exists :
46+ "SELECT count(*) FROM pg_database "
47+ "WHERE datistemplate = false AND "
48+ " datname = 'pglist'" )
49+ if bases [0 ][0 ]!= 0 :
5350return
5451
5552# Check if 'pglist' dump exists
@@ -58,12 +55,12 @@ def init_pglist_data(self, node):
5855if not os .path .isfile (pglist_dump ):
5956pglist_dumpgz = pglist_dump + ".gz"
6057if not os .path .isfile (pglist_dumpgz ):
61- print ("Downloading:%s" % pglist_dumpgz )
58+ print ("Downloading:{0}" . format ( pglist_dumpgz ) )
6259request .urlretrieve (
6360"http://www.sai.msu.su/~megera/postgres/files/pglist-28-04-16.dump.gz" ,
6461pglist_dumpgz )
6562
66- print ("Decompressing:%s" % pglist_dumpgz )
63+ print ("Decompressing:{0}" . format ( pglist_dumpgz ) )
6764gz = gzip .open (pglist_dumpgz ,'rb' )
6865with open (pglist_dump ,'wb' )as f :
6966f .write (gz .read ())
@@ -85,13 +82,22 @@ def printlog(self, logfile):
8582def test_order_by (self ):
8683"""Tests SELECT constructions to 'pglist' base"""
8784try :
88- print ("Creating index 'rumidx_orderby_sent'" )
89-
90- self .node .safe_psql (
85+ self .init_pglist_data (self .node )
86+ indexes = self .node .execute (
9187"pglist" ,
92- "CREATE INDEX rumidx_orderby_sent ON pglist USING rum ("
93- " fts rum_tsvector_timestamp_ops, sent) "
94- " WITH (attach=sent, to=fts, order_by_attach=t)" )
88+ "SELECT count(*) FROM pg_class c "
89+ " JOIN pg_index i ON i.indexrelid = c.oid"
90+ " JOIN pg_class c2 ON i.indrelid = c2.oid"
91+ " WHERE c.relkind = 'i' AND c2.relname = 'pglist' AND "
92+ " c.relname = 'rumidx_orderby_sent'" )
93+ if indexes [0 ][0 ]== 0 :
94+ print ("Creating index 'rumidx_orderby_sent'" )
95+
96+ self .node .safe_psql (
97+ "pglist" ,
98+ "CREATE INDEX rumidx_orderby_sent ON pglist USING rum ("
99+ " fts rum_tsvector_timestamp_ops, sent) "
100+ " WITH (attach=sent, to=fts, order_by_attach=t)" )
95101
96102print ("Running tests" )
97103
@@ -100,7 +106,8 @@ def test_order_by(self):
100106"pglist" ,
101107"SELECT sent, subject "
102108" FROM pglist "
103- " WHERE fts @@ to_tsquery('english', 'backend <-> crushed') "
109+ " WHERE fts @@ "
110+ " to_tsquery('english', 'backend <-> crushed') "
104111" ORDER BY sent <=| '2016-01-01 00:01' LIMIT 5"
105112 ),
106113b'1999-06-02 11:52:46|Re: [HACKERS] PID of backend\n '
@@ -109,12 +116,13 @@ def test_order_by(self):
109116self .assertEqual (
110117self .node .safe_psql (
111118"pglist" ,
112- "SELECT count(*) FROM pglist WHERE fts @@ to_tsquery('english', 'tom & lane')"
119+ "SELECT count(*) FROM pglist "
120+ "WHERE fts @@ to_tsquery('english', 'tom & lane')"
113121 ),
114122b'222813\n '
115123 )
116124except Exception as e :
117- self .printlog (self .node .logs_dir + "/ postgresql.log" )
125+ self .printlog (os . path . join ( self .node .logs_dir , " postgresql.log") )
118126raise e
119127
120128if __name__ == "__main__" :