rules.out
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:54k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. QUERY: create table rtest_t1 (a int4, b int4);
  2. QUERY: create table rtest_t2 (a int4, b int4);
  3. QUERY: create table rtest_t3 (a int4, b int4);
  4. QUERY: create view rtest_v1 as select * from rtest_t1;
  5. QUERY: create rule rtest_v1_ins as on insert to rtest_v1 do instead
  6. insert into rtest_t1 values (new.a, new.b);
  7. QUERY: create rule rtest_v1_upd as on update to rtest_v1 do instead
  8. update rtest_t1 set a = new.a, b = new.b
  9. where a = old.a;
  10. QUERY: create rule rtest_v1_del as on delete to rtest_v1 do instead
  11. delete from rtest_t1 where a = old.a;
  12. QUERY: create table rtest_system (sysname text, sysdesc text);
  13. QUERY: create table rtest_interface (sysname text, ifname text);
  14. QUERY: create table rtest_person (pname text, pdesc text);
  15. QUERY: create table rtest_admin (pname text, sysname text);
  16. QUERY: create rule rtest_sys_upd as on update to rtest_system do (
  17. update rtest_interface set sysname = new.sysname
  18. where sysname = old.sysname;
  19. update rtest_admin set sysname = new.sysname
  20. where sysname = old.sysname
  21. );
  22. QUERY: create rule rtest_sys_del as on delete to rtest_system do (
  23. delete from rtest_interface where sysname = old.sysname;
  24. delete from rtest_admin where sysname = old.sysname;
  25. );
  26. QUERY: create rule rtest_pers_upd as on update to rtest_person do
  27. update rtest_admin set pname = new.pname where pname = old.pname;
  28. QUERY: create rule rtest_pers_del as on delete to rtest_person do
  29. delete from rtest_admin where pname = old.pname;
  30. QUERY: create table rtest_emp (ename char(20), salary money);
  31. QUERY: create table rtest_emplog (ename char(20), who name, action char(10), newsal money, oldsal money);
  32. QUERY: create table rtest_empmass (ename char(20), salary money);
  33. QUERY: create rule rtest_emp_ins as on insert to rtest_emp do
  34. insert into rtest_emplog values (new.ename, current_user,
  35. 'hired', new.salary, '0.00');
  36. QUERY: create rule rtest_emp_upd as on update to rtest_emp where new.salary != old.salary do
  37. insert into rtest_emplog values (new.ename, current_user,
  38. 'honored', new.salary, old.salary);
  39. QUERY: create rule rtest_emp_del as on delete to rtest_emp do
  40. insert into rtest_emplog values (old.ename, current_user,
  41. 'fired', '0.00', old.salary);
  42. QUERY: create table rtest_t4 (a int4, b text);
  43. QUERY: create table rtest_t5 (a int4, b text);
  44. QUERY: create table rtest_t6 (a int4, b text);
  45. QUERY: create table rtest_t7 (a int4, b text);
  46. QUERY: create table rtest_t8 (a int4, b text);
  47. QUERY: create table rtest_t9 (a int4, b text);
  48. QUERY: create rule rtest_t4_ins1 as on insert to rtest_t4
  49. where new.a >= 10 and new.a < 20 do instead
  50. insert into rtest_t5 values (new.a, new.b);
  51. QUERY: create rule rtest_t4_ins2 as on insert to rtest_t4
  52. where new.a >= 20 and new.a < 30 do
  53. insert into rtest_t6 values (new.a, new.b);
  54. QUERY: create rule rtest_t5_ins as on insert to rtest_t5
  55. where new.a > 15 do
  56. insert into rtest_t7 values (new.a, new.b);
  57. QUERY: create rule rtest_t6_ins as on insert to rtest_t6
  58. where new.a > 25 do instead
  59. insert into rtest_t8 values (new.a, new.b);
  60. QUERY: create table rtest_order1 (a int4);
  61. QUERY: create table rtest_order2 (a int4, b int4, c text);
  62. QUERY: create sequence rtest_seq;
  63. QUERY: create rule rtest_order_r3 as on insert to rtest_order1 do instead
  64. insert into rtest_order2 values (new.a, nextval('rtest_seq'),
  65. 'rule 3 - this should run 3rd or 4th');
  66. QUERY: create rule rtest_order_r4 as on insert to rtest_order1
  67. where a < 100 do instead
  68. insert into rtest_order2 values (new.a, nextval('rtest_seq'),
  69. 'rule 4 - this should run 2nd');
  70. QUERY: create rule rtest_order_r2 as on insert to rtest_order1 do
  71. insert into rtest_order2 values (new.a, nextval('rtest_seq'),
  72. 'rule 2 - this should run 1st');
  73. QUERY: create rule rtest_order_r1 as on insert to rtest_order1 do instead
  74. insert into rtest_order2 values (new.a, nextval('rtest_seq'),
  75. 'rule 1 - this should run 3rd or 4th');
  76. QUERY: create table rtest_nothn1 (a int4, b text);
  77. QUERY: create table rtest_nothn2 (a int4, b text);
  78. QUERY: create table rtest_nothn3 (a int4, b text);
  79. QUERY: create table rtest_nothn4 (a int4, b text);
  80. QUERY: create rule rtest_nothn_r1 as on insert to rtest_nothn1
  81. where new.a >= 10 and new.a < 20 do instead (select 1);
  82. QUERY: create rule rtest_nothn_r2 as on insert to rtest_nothn1
  83. where new.a >= 30 and new.a < 40 do instead nothing;
  84. QUERY: create rule rtest_nothn_r3 as on insert to rtest_nothn2
  85. where new.a >= 100 do instead
  86. insert into rtest_nothn3 values (new.a, new.b);
  87. QUERY: create rule rtest_nothn_r4 as on insert to rtest_nothn2
  88. do instead nothing;
  89. QUERY: insert into rtest_t2 values (1, 21);
  90. QUERY: insert into rtest_t2 values (2, 22);
  91. QUERY: insert into rtest_t2 values (3, 23);
  92. QUERY: insert into rtest_t3 values (1, 31);
  93. QUERY: insert into rtest_t3 values (2, 32);
  94. QUERY: insert into rtest_t3 values (3, 33);
  95. QUERY: insert into rtest_t3 values (4, 34);
  96. QUERY: insert into rtest_t3 values (5, 35);
  97. QUERY: insert into rtest_v1 values (1, 11);
  98. QUERY: insert into rtest_v1 values (2, 12);
  99. QUERY: select * from rtest_v1;
  100. a| b
  101. -+--
  102. 1|11
  103. 2|12
  104. (2 rows)
  105. QUERY: delete from rtest_v1 where a = 1;
  106. QUERY: select * from rtest_v1;
  107. a| b
  108. -+--
  109. 2|12
  110. (1 row)
  111. QUERY: insert into rtest_v1 values (1, 11);
  112. QUERY: delete from rtest_v1 where b = 12;
  113. QUERY: select * from rtest_v1;
  114. a| b
  115. -+--
  116. 1|11
  117. (1 row)
  118. QUERY: insert into rtest_v1 values (2, 12);
  119. QUERY: insert into rtest_v1 values (2, 13);
  120. QUERY: select * from rtest_v1;
  121. a| b
  122. -+--
  123. 1|11
  124. 2|12
  125. 2|13
  126. (3 rows)
  127. QUERY: delete from rtest_v1 where b = 12;
  128. QUERY: select * from rtest_v1;
  129. ** Remember the delete rule on rtest_v1: It says
  130. ** DO INSTEAD DELETE FROM rtest_t1 WHERE a = old.a
  131. ** So this time both rows with a = 2 must get deleted
  132. a| b
  133. -+--
  134. 1|11
  135. (1 row)
  136. QUERY: delete from rtest_v1;
  137. QUERY: insert into rtest_v1 select * from rtest_t2;
  138. QUERY: select * from rtest_v1;
  139. a| b
  140. -+--
  141. 1|21
  142. 2|22
  143. 3|23
  144. (3 rows)
  145. QUERY: delete from rtest_v1;
  146. QUERY: insert into rtest_v1 (b, a) select b, a from rtest_t2;
  147. QUERY: select * from rtest_v1;
  148. a| b
  149. -+--
  150. 1|21
  151. 2|22
  152. 3|23
  153. (3 rows)
  154. QUERY: insert into rtest_v1 (a) select a from rtest_t3;
  155. QUERY: select * from rtest_v1;
  156. a| b
  157. -+--
  158. 1|21
  159. 2|22
  160. 3|23
  161. 1|  
  162. 2|  
  163. 3|  
  164. 4|  
  165. 5|  
  166. (8 rows)
  167. QUERY: select * from rtest_v1 where b isnull;
  168. a|b
  169. -+-
  170. 1| 
  171. 2| 
  172. 3| 
  173. 4| 
  174. 5| 
  175. (5 rows)
  176. QUERY: update rtest_t1 set a = a + 10 where b isnull;
  177. QUERY: delete from rtest_v1 where b isnull;
  178. QUERY: select * from rtest_v1;
  179. a| b
  180. -+--
  181. 1|21
  182. 2|22
  183. 3|23
  184. (3 rows)
  185. QUERY: update rtest_v1 set b = 42 where a = 2;
  186. QUERY: select * from rtest_v1;
  187. a| b
  188. -+--
  189. 1|21
  190. 3|23
  191. 2|42
  192. (3 rows)
  193. QUERY: update rtest_v1 set b = 99 where b = 42;
  194. QUERY: select * from rtest_v1;
  195. a| b
  196. -+--
  197. 1|21
  198. 3|23
  199. 2|99
  200. (3 rows)
  201. QUERY: update rtest_v1 set b = 88 where b < 50;
  202. QUERY: select * from rtest_v1;
  203. a| b
  204. -+--
  205. 2|99
  206. 1|88
  207. 3|88
  208. (3 rows)
  209. QUERY: delete from rtest_v1;
  210. QUERY: insert into rtest_v1 select rtest_t2.a, rtest_t3.b where rtest_t2.a = rtest_t3.a;
  211. QUERY: select * from rtest_v1;
  212. a| b
  213. -+--
  214. 1|31
  215. 2|32
  216. 3|33
  217. (3 rows)
  218. QUERY: update rtest_v1 set b = rtest_t2.b where a = rtest_t2.a;
  219. QUERY: select * from rtest_v1;
  220. a| b
  221. -+--
  222. 1|21
  223. 2|22
  224. 3|23
  225. (3 rows)
  226. QUERY: insert into rtest_v1 select * from rtest_t3;
  227. QUERY: select * from rtest_v1;
  228. a| b
  229. -+--
  230. 1|21
  231. 2|22
  232. 3|23
  233. 1|31
  234. 2|32
  235. 3|33
  236. 4|34
  237. 5|35
  238. (8 rows)
  239. QUERY: update rtest_t1 set a = a + 10 where b > 30;
  240. QUERY: select * from rtest_v1;
  241.  a| b
  242. --+--
  243.  1|21
  244.  2|22
  245.  3|23
  246. 11|31
  247. 12|32
  248. 13|33
  249. 14|34
  250. 15|35
  251. (8 rows)
  252. QUERY: update rtest_v1 set a = rtest_t3.a + 20 where b = rtest_t3.b;
  253. QUERY: select * from rtest_v1;
  254.  a| b
  255. --+--
  256.  1|21
  257.  2|22
  258.  3|23
  259. 21|31
  260. 22|32
  261. 23|33
  262. 24|34
  263. 25|35
  264. (8 rows)
  265. QUERY: insert into rtest_system values ('orion', 'Linux Jan Wieck');
  266. QUERY: insert into rtest_system values ('notjw', 'WinNT Jan Wieck (notebook)');
  267. QUERY: insert into rtest_system values ('neptun', 'Fileserver');
  268. QUERY: insert into rtest_interface values ('orion', 'eth0');
  269. QUERY: insert into rtest_interface values ('orion', 'eth1');
  270. QUERY: insert into rtest_interface values ('notjw', 'eth0');
  271. QUERY: insert into rtest_interface values ('neptun', 'eth0');
  272. QUERY: insert into rtest_person values ('jw', 'Jan Wieck');
  273. QUERY: insert into rtest_person values ('bm', 'Bruce Momjian');
  274. QUERY: insert into rtest_admin values ('jw', 'orion');
  275. QUERY: insert into rtest_admin values ('jw', 'notjw');
  276. QUERY: insert into rtest_admin values ('bm', 'neptun');
  277. QUERY: update rtest_system set sysname = 'pluto' where sysname = 'neptun';
  278. QUERY: select * from rtest_interface;
  279. sysname|ifname
  280. -------+------
  281. orion  |eth0  
  282. orion  |eth1  
  283. notjw  |eth0  
  284. pluto  |eth0  
  285. (4 rows)
  286. QUERY: select * from rtest_admin;
  287. pname|sysname
  288. -----+-------
  289. jw   |orion  
  290. jw   |notjw  
  291. bm   |pluto  
  292. (3 rows)
  293. QUERY: update rtest_person set pname = 'jwieck' where pdesc = 'Jan Wieck';
  294. QUERY: select * from rtest_admin order by pname, sysname;
  295. pname |sysname
  296. ------+-------
  297. bm    |pluto  
  298. jwieck|notjw  
  299. jwieck|orion  
  300. (3 rows)
  301. QUERY: delete from rtest_system where sysname = 'orion';
  302. QUERY: select * from rtest_interface;
  303. sysname|ifname
  304. -------+------
  305. notjw  |eth0  
  306. pluto  |eth0  
  307. (2 rows)
  308. QUERY: select * from rtest_admin;
  309. pname |sysname
  310. ------+-------
  311. bm    |pluto  
  312. jwieck|notjw  
  313. (2 rows)
  314. QUERY: insert into rtest_emp values ('wiech', '5000.00');
  315. QUERY: insert into rtest_emp values ('gates', '80000.00');
  316. QUERY: update rtest_emp set ename = 'wiecx' where ename = 'wiech';
  317. QUERY: update rtest_emp set ename = 'wieck', salary = '6000.00' where ename = 'wiecx';
  318. QUERY: update rtest_emp set salary = '7000.00' where ename = 'wieck';
  319. QUERY: delete from rtest_emp where ename = 'gates';
  320. QUERY: select ename, who = current_user as "matches user", action, newsal, oldsal from rtest_emplog order by ename, action, newsal;
  321. ename               |matches user|action    |newsal    |oldsal    
  322. --------------------+------------+----------+----------+----------
  323. gates               |t           |fired     |$0.00     |$80,000.00
  324. gates               |t           |hired     |$80,000.00|$0.00     
  325. wiech               |t           |hired     |$5,000.00 |$0.00     
  326. wieck               |t           |honored   |$6,000.00 |$5,000.00 
  327. wieck               |t           |honored   |$7,000.00 |$6,000.00 
  328. (5 rows)
  329. QUERY: insert into rtest_empmass values ('meyer', '4000.00');
  330. QUERY: insert into rtest_empmass values ('maier', '5000.00');
  331. QUERY: insert into rtest_empmass values ('mayr', '6000.00');
  332. QUERY: insert into rtest_emp select * from rtest_empmass;
  333. QUERY: select ename, who = current_user as "matches user", action, newsal, oldsal from rtest_emplog order by ename, action, newsal;
  334. ename               |matches user|action    |newsal    |oldsal    
  335. --------------------+------------+----------+----------+----------
  336. gates               |t           |fired     |$0.00     |$80,000.00
  337. gates               |t           |hired     |$80,000.00|$0.00     
  338. maier               |t           |hired     |$5,000.00 |$0.00     
  339. mayr                |t           |hired     |$6,000.00 |$0.00     
  340. meyer               |t           |hired     |$4,000.00 |$0.00     
  341. wiech               |t           |hired     |$5,000.00 |$0.00     
  342. wieck               |t           |honored   |$6,000.00 |$5,000.00 
  343. wieck               |t           |honored   |$7,000.00 |$6,000.00 
  344. (8 rows)
  345. QUERY: update rtest_empmass set salary = salary + '1000.00';
  346. QUERY: update rtest_emp set salary = rtest_empmass.salary where ename = rtest_empmass.ename;
  347. QUERY: select ename, who = current_user as "matches user", action, newsal, oldsal from rtest_emplog order by ename, action, newsal;
  348. ename               |matches user|action    |newsal    |oldsal    
  349. --------------------+------------+----------+----------+----------
  350. gates               |t           |fired     |$0.00     |$80,000.00
  351. gates               |t           |hired     |$80,000.00|$0.00     
  352. maier               |t           |hired     |$5,000.00 |$0.00     
  353. maier               |t           |honored   |$6,000.00 |$5,000.00 
  354. mayr                |t           |hired     |$6,000.00 |$0.00     
  355. mayr                |t           |honored   |$7,000.00 |$6,000.00 
  356. meyer               |t           |hired     |$4,000.00 |$0.00     
  357. meyer               |t           |honored   |$5,000.00 |$4,000.00 
  358. wiech               |t           |hired     |$5,000.00 |$0.00     
  359. wieck               |t           |honored   |$6,000.00 |$5,000.00 
  360. wieck               |t           |honored   |$7,000.00 |$6,000.00 
  361. (11 rows)
  362. QUERY: delete from rtest_emp where ename = rtest_empmass.ename;
  363. QUERY: select ename, who = current_user as "matches user", action, newsal, oldsal from rtest_emplog order by ename, action, newsal;
  364. ename               |matches user|action    |newsal    |oldsal    
  365. --------------------+------------+----------+----------+----------
  366. gates               |t           |fired     |$0.00     |$80,000.00
  367. gates               |t           |hired     |$80,000.00|$0.00     
  368. maier               |t           |fired     |$0.00     |$6,000.00 
  369. maier               |t           |hired     |$5,000.00 |$0.00     
  370. maier               |t           |honored   |$6,000.00 |$5,000.00 
  371. mayr                |t           |fired     |$0.00     |$7,000.00 
  372. mayr                |t           |hired     |$6,000.00 |$0.00     
  373. mayr                |t           |honored   |$7,000.00 |$6,000.00 
  374. meyer               |t           |fired     |$0.00     |$5,000.00 
  375. meyer               |t           |hired     |$4,000.00 |$0.00     
  376. meyer               |t           |honored   |$5,000.00 |$4,000.00 
  377. wiech               |t           |hired     |$5,000.00 |$0.00     
  378. wieck               |t           |honored   |$6,000.00 |$5,000.00 
  379. wieck               |t           |honored   |$7,000.00 |$6,000.00 
  380. (14 rows)
  381. QUERY: insert into rtest_t4 values (1, 'Record should go to rtest_t4');
  382. QUERY: insert into rtest_t4 values (2, 'Record should go to rtest_t4');
  383. QUERY: insert into rtest_t4 values (10, 'Record should go to rtest_t5');
  384. QUERY: insert into rtest_t4 values (15, 'Record should go to rtest_t5');
  385. QUERY: insert into rtest_t4 values (19, 'Record should go to rtest_t5 and t7');
  386. QUERY: insert into rtest_t4 values (20, 'Record should go to rtest_t4 and t6');
  387. QUERY: insert into rtest_t4 values (26, 'Record should go to rtest_t4 and t8');
  388. QUERY: insert into rtest_t4 values (28, 'Record should go to rtest_t4 and t8');
  389. QUERY: insert into rtest_t4 values (30, 'Record should go to rtest_t4');
  390. QUERY: insert into rtest_t4 values (40, 'Record should go to rtest_t4');
  391. QUERY: select * from rtest_t4;
  392.  a|b                                  
  393. --+-----------------------------------
  394.  1|Record should go to rtest_t4       
  395.  2|Record should go to rtest_t4       
  396. 20|Record should go to rtest_t4 and t6
  397. 26|Record should go to rtest_t4 and t8
  398. 28|Record should go to rtest_t4 and t8
  399. 30|Record should go to rtest_t4       
  400. 40|Record should go to rtest_t4       
  401. (7 rows)
  402. QUERY: select * from rtest_t5;
  403.  a|b                                  
  404. --+-----------------------------------
  405. 10|Record should go to rtest_t5       
  406. 15|Record should go to rtest_t5       
  407. 19|Record should go to rtest_t5 and t7
  408. (3 rows)
  409. QUERY: select * from rtest_t6;
  410.  a|b                                  
  411. --+-----------------------------------
  412. 20|Record should go to rtest_t4 and t6
  413. (1 row)
  414. QUERY: select * from rtest_t7;
  415.  a|b                                  
  416. --+-----------------------------------
  417. 19|Record should go to rtest_t5 and t7
  418. (1 row)
  419. QUERY: select * from rtest_t8;
  420.  a|b                                  
  421. --+-----------------------------------
  422. 26|Record should go to rtest_t4 and t8
  423. 28|Record should go to rtest_t4 and t8
  424. (2 rows)
  425. QUERY: delete from rtest_t4;
  426. QUERY: delete from rtest_t5;
  427. QUERY: delete from rtest_t6;
  428. QUERY: delete from rtest_t7;
  429. QUERY: delete from rtest_t8;
  430. QUERY: insert into rtest_t9 values (1, 'Record should go to rtest_t4');
  431. QUERY: insert into rtest_t9 values (2, 'Record should go to rtest_t4');
  432. QUERY: insert into rtest_t9 values (10, 'Record should go to rtest_t5');
  433. QUERY: insert into rtest_t9 values (15, 'Record should go to rtest_t5');
  434. QUERY: insert into rtest_t9 values (19, 'Record should go to rtest_t5 and t7');
  435. QUERY: insert into rtest_t9 values (20, 'Record should go to rtest_t4 and t6');
  436. QUERY: insert into rtest_t9 values (26, 'Record should go to rtest_t4 and t8');
  437. QUERY: insert into rtest_t9 values (28, 'Record should go to rtest_t4 and t8');
  438. QUERY: insert into rtest_t9 values (30, 'Record should go to rtest_t4');
  439. QUERY: insert into rtest_t9 values (40, 'Record should go to rtest_t4');
  440. QUERY: insert into rtest_t4 select * from rtest_t9 where a < 20;
  441. QUERY: select * from rtest_t4;
  442. a|b                           
  443. -+----------------------------
  444. 1|Record should go to rtest_t4
  445. 2|Record should go to rtest_t4
  446. (2 rows)
  447. QUERY: select * from rtest_t5;
  448.  a|b                                  
  449. --+-----------------------------------
  450. 10|Record should go to rtest_t5       
  451. 15|Record should go to rtest_t5       
  452. 19|Record should go to rtest_t5 and t7
  453. (3 rows)
  454. QUERY: select * from rtest_t6;
  455. a|b
  456. -+-
  457. (0 rows)
  458. QUERY: select * from rtest_t7;
  459.  a|b                                  
  460. --+-----------------------------------
  461. 19|Record should go to rtest_t5 and t7
  462. (1 row)
  463. QUERY: select * from rtest_t8;
  464. a|b
  465. -+-
  466. (0 rows)
  467. QUERY: insert into rtest_t4 select * from rtest_t9 where b ~ 'and t8';
  468. QUERY: select * from rtest_t4;
  469.  a|b                                  
  470. --+-----------------------------------
  471.  1|Record should go to rtest_t4       
  472.  2|Record should go to rtest_t4       
  473. 26|Record should go to rtest_t4 and t8
  474. 28|Record should go to rtest_t4 and t8
  475. (4 rows)
  476. QUERY: select * from rtest_t5;
  477.  a|b                                  
  478. --+-----------------------------------
  479. 10|Record should go to rtest_t5       
  480. 15|Record should go to rtest_t5       
  481. 19|Record should go to rtest_t5 and t7
  482. (3 rows)
  483. QUERY: select * from rtest_t6;
  484. a|b
  485. -+-
  486. (0 rows)
  487. QUERY: select * from rtest_t7;
  488.  a|b                                  
  489. --+-----------------------------------
  490. 19|Record should go to rtest_t5 and t7
  491. (1 row)
  492. QUERY: select * from rtest_t8;
  493.  a|b                                  
  494. --+-----------------------------------
  495. 26|Record should go to rtest_t4 and t8
  496. 28|Record should go to rtest_t4 and t8
  497. (2 rows)
  498. QUERY: insert into rtest_t4 select a + 1, b from rtest_t9 where a in (20, 30, 40);
  499. QUERY: select * from rtest_t4;
  500.  a|b                                  
  501. --+-----------------------------------
  502.  1|Record should go to rtest_t4       
  503.  2|Record should go to rtest_t4       
  504. 26|Record should go to rtest_t4 and t8
  505. 28|Record should go to rtest_t4 and t8
  506. 21|Record should go to rtest_t4 and t6
  507. 31|Record should go to rtest_t4       
  508. 41|Record should go to rtest_t4       
  509. (7 rows)
  510. QUERY: select * from rtest_t5;
  511.  a|b                                  
  512. --+-----------------------------------
  513. 10|Record should go to rtest_t5       
  514. 15|Record should go to rtest_t5       
  515. 19|Record should go to rtest_t5 and t7
  516. (3 rows)
  517. QUERY: select * from rtest_t6;
  518.  a|b                                  
  519. --+-----------------------------------
  520. 21|Record should go to rtest_t4 and t6
  521. (1 row)
  522. QUERY: select * from rtest_t7;
  523.  a|b                                  
  524. --+-----------------------------------
  525. 19|Record should go to rtest_t5 and t7
  526. (1 row)
  527. QUERY: select * from rtest_t8;
  528.  a|b                                  
  529. --+-----------------------------------
  530. 26|Record should go to rtest_t4 and t8
  531. 28|Record should go to rtest_t4 and t8
  532. (2 rows)
  533. QUERY: insert into rtest_order1 values (1);
  534. QUERY: select * from rtest_order2;
  535. a|b|c                                  
  536. -+-+-----------------------------------
  537. 1|1|rule 2 - this should run 1st       
  538. 1|2|rule 4 - this should run 2nd       
  539. 1|3|rule 3 - this should run 3rd or 4th
  540. 1|4|rule 1 - this should run 3rd or 4th
  541. (4 rows)
  542. QUERY: insert into rtest_nothn1 values (1, 'want this');
  543. QUERY: insert into rtest_nothn1 values (2, 'want this');
  544. QUERY: insert into rtest_nothn1 values (10, 'don''t want this');
  545. QUERY: insert into rtest_nothn1 values (19, 'don''t want this');
  546. QUERY: insert into rtest_nothn1 values (20, 'want this');
  547. QUERY: insert into rtest_nothn1 values (29, 'want this');
  548. QUERY: insert into rtest_nothn1 values (30, 'don''t want this');
  549. QUERY: insert into rtest_nothn1 values (39, 'don''t want this');
  550. QUERY: insert into rtest_nothn1 values (40, 'want this');
  551. QUERY: insert into rtest_nothn1 values (50, 'want this');
  552. QUERY: insert into rtest_nothn1 values (60, 'want this');
  553. QUERY: select * from rtest_nothn1;
  554.  a|b        
  555. --+---------
  556.  1|want this
  557.  2|want this
  558. 20|want this
  559. 29|want this
  560. 40|want this
  561. 50|want this
  562. 60|want this
  563. (7 rows)
  564. QUERY: insert into rtest_nothn2 values (10, 'too small');
  565. QUERY: insert into rtest_nothn2 values (50, 'too small');
  566. QUERY: insert into rtest_nothn2 values (100, 'OK');
  567. QUERY: insert into rtest_nothn2 values (200, 'OK');
  568. QUERY: select * from rtest_nothn2;
  569. a|b
  570. -+-
  571. (0 rows)
  572. QUERY: select * from rtest_nothn3;
  573.   a|b 
  574. ---+--
  575. 100|OK
  576. 200|OK
  577. (2 rows)
  578. QUERY: delete from rtest_nothn1;
  579. QUERY: delete from rtest_nothn2;
  580. QUERY: delete from rtest_nothn3;
  581. QUERY: insert into rtest_nothn4 values (1, 'want this');
  582. QUERY: insert into rtest_nothn4 values (2, 'want this');
  583. QUERY: insert into rtest_nothn4 values (10, 'don''t want this');
  584. QUERY: insert into rtest_nothn4 values (19, 'don''t want this');
  585. QUERY: insert into rtest_nothn4 values (20, 'want this');
  586. QUERY: insert into rtest_nothn4 values (29, 'want this');
  587. QUERY: insert into rtest_nothn4 values (30, 'don''t want this');
  588. QUERY: insert into rtest_nothn4 values (39, 'don''t want this');
  589. QUERY: insert into rtest_nothn4 values (40, 'want this');
  590. QUERY: insert into rtest_nothn4 values (50, 'want this');
  591. QUERY: insert into rtest_nothn4 values (60, 'want this');
  592. QUERY: insert into rtest_nothn1 select * from rtest_nothn4;
  593. QUERY: select * from rtest_nothn1;
  594.  a|b        
  595. --+---------
  596.  1|want this
  597.  2|want this
  598. 20|want this
  599. 29|want this
  600. 40|want this
  601. 50|want this
  602. 60|want this
  603. (7 rows)
  604. QUERY: delete from rtest_nothn4;
  605. QUERY: insert into rtest_nothn4 values (10, 'too small');
  606. QUERY: insert into rtest_nothn4 values (50, 'too small');
  607. QUERY: insert into rtest_nothn4 values (100, 'OK');
  608. QUERY: insert into rtest_nothn4 values (200, 'OK');
  609. QUERY: insert into rtest_nothn2 select * from rtest_nothn4;
  610. QUERY: select * from rtest_nothn2;
  611. a|b
  612. -+-
  613. (0 rows)
  614. QUERY: select * from rtest_nothn3;
  615.   a|b 
  616. ---+--
  617. 100|OK
  618. 200|OK
  619. (2 rows)
  620. QUERY: create table rtest_view1 (a int4, b text, v bool);
  621. QUERY: create table rtest_view2 (a int4);
  622. QUERY: create table rtest_view3 (a int4, b text);
  623. QUERY: create table rtest_view4 (a int4, b text, c int4);
  624. QUERY: create view rtest_vview1 as select a, b from rtest_view1 X
  625. where 0 < (select count(*) from rtest_view2 Y where Y.a = X.a);
  626. QUERY: create view rtest_vview2 as select a, b from rtest_view1 where v;
  627. QUERY: create view rtest_vview3 as select a, b from rtest_vview2 X
  628. where 0 < (select count(*) from rtest_view2 Y where Y.a = X.a);
  629. QUERY: create view rtest_vview4 as select X.a, X.b, count(Y.a) as refcount
  630. from rtest_view1 X, rtest_view2 Y
  631. where X.a = Y.a
  632. group by X.a, X.b;
  633. QUERY: create function rtest_viewfunc1(int4) returns int4 as
  634. 'select count(*) from rtest_view2 where a = $1'
  635. language 'sql';
  636. QUERY: create view rtest_vview5 as select a, b, rtest_viewfunc1(a) as refcount
  637. from rtest_view1;
  638. QUERY: insert into rtest_view1 values (1, 'item 1', 't');
  639. QUERY: insert into rtest_view1 values (2, 'item 2', 't');
  640. QUERY: insert into rtest_view1 values (3, 'item 3', 't');
  641. QUERY: insert into rtest_view1 values (4, 'item 4', 'f');
  642. QUERY: insert into rtest_view1 values (5, 'item 5', 't');
  643. QUERY: insert into rtest_view1 values (6, 'item 6', 'f');
  644. QUERY: insert into rtest_view1 values (7, 'item 7', 't');
  645. QUERY: insert into rtest_view1 values (8, 'item 8', 't');
  646. QUERY: insert into rtest_view2 values (2);
  647. QUERY: insert into rtest_view2 values (2);
  648. QUERY: insert into rtest_view2 values (4);
  649. QUERY: insert into rtest_view2 values (5);
  650. QUERY: insert into rtest_view2 values (7);
  651. QUERY: insert into rtest_view2 values (7);
  652. QUERY: insert into rtest_view2 values (7);
  653. QUERY: insert into rtest_view2 values (7);
  654. QUERY: select * from rtest_vview1;
  655. a|b     
  656. -+------
  657. 2|item 2
  658. 4|item 4
  659. 5|item 5
  660. 7|item 7
  661. (4 rows)
  662. QUERY: select * from rtest_vview2;
  663. a|b     
  664. -+------
  665. 1|item 1
  666. 2|item 2
  667. 3|item 3
  668. 5|item 5
  669. 7|item 7
  670. 8|item 8
  671. (6 rows)
  672. QUERY: select * from rtest_vview3;
  673. a|b     
  674. -+------
  675. 2|item 2
  676. 5|item 5
  677. 7|item 7
  678. (3 rows)
  679. QUERY: select * from rtest_vview4;
  680. a|b     |refcount
  681. -+------+--------
  682. 2|item 2|       2
  683. 4|item 4|       1
  684. 5|item 5|       1
  685. 7|item 7|       4
  686. (4 rows)
  687. QUERY: select * from rtest_vview5;
  688. a|b     |refcount
  689. -+------+--------
  690. 1|item 1|       0
  691. 2|item 2|       2
  692. 3|item 3|       0
  693. 4|item 4|       1
  694. 5|item 5|       1
  695. 6|item 6|       0
  696. 7|item 7|       4
  697. 8|item 8|       0
  698. (8 rows)
  699. QUERY: insert into rtest_view3 select * from rtest_vview1 where a < 7;
  700. QUERY: select * from rtest_view3;
  701. a|b     
  702. -+------
  703. 2|item 2
  704. 4|item 4
  705. 5|item 5
  706. (3 rows)
  707. QUERY: delete from rtest_view3;
  708. QUERY: insert into rtest_view3 select * from rtest_vview2 where a != 5 and b !~ '2';
  709. QUERY: select * from rtest_view3;
  710. a|b     
  711. -+------
  712. 1|item 1
  713. 3|item 3
  714. 7|item 7
  715. 8|item 8
  716. (4 rows)
  717. QUERY: delete from rtest_view3;
  718. QUERY: insert into rtest_view3 select * from rtest_vview3;
  719. QUERY: select * from rtest_view3;
  720. a|b     
  721. -+------
  722. 2|item 2
  723. 5|item 5
  724. 7|item 7
  725. (3 rows)
  726. QUERY: delete from rtest_view3;
  727. QUERY: insert into rtest_view4 select * from rtest_vview4 where 3 > refcount;
  728. QUERY: select * from rtest_view4;
  729. a|b     |c
  730. -+------+-
  731. 2|item 2|2
  732. 4|item 4|1
  733. 5|item 5|1
  734. (3 rows)
  735. QUERY: delete from rtest_view4;
  736. QUERY: insert into rtest_view4 select * from rtest_vview5 where a > 2 and refcount = 0;
  737. QUERY: select * from rtest_view4;
  738. a|b     |c
  739. -+------+-
  740. 3|item 3|0
  741. 6|item 6|0
  742. 8|item 8|0
  743. (3 rows)
  744. QUERY: delete from rtest_view4;
  745. QUERY: create table rtest_comp (
  746. part text,
  747. unit char(4),
  748. size float
  749. );
  750. QUERY: create table rtest_unitfact (
  751. unit char(4),
  752. factor float
  753. );
  754. QUERY: create view rtest_vcomp as
  755. select X.part, (X.size * Y.factor) as size_in_cm
  756. from rtest_comp X, rtest_unitfact Y
  757. where X.unit = Y.unit;
  758. QUERY: insert into rtest_unitfact values ('m', 100.0);
  759. QUERY: insert into rtest_unitfact values ('cm', 1.0);
  760. QUERY: insert into rtest_unitfact values ('inch', 2.54);
  761. QUERY: insert into rtest_comp values ('p1', 'm', 5.0);
  762. QUERY: insert into rtest_comp values ('p2', 'm', 3.0);
  763. QUERY: insert into rtest_comp values ('p3', 'cm', 5.0);
  764. QUERY: insert into rtest_comp values ('p4', 'cm', 15.0);
  765. QUERY: insert into rtest_comp values ('p5', 'inch', 7.0);
  766. QUERY: insert into rtest_comp values ('p6', 'inch', 4.4);
  767. QUERY: select * from rtest_vcomp order by part;
  768. part|size_in_cm
  769. ----+----------
  770. p1  |       500
  771. p2  |       300
  772. p3  |         5
  773. p4  |        15
  774. p5  |     17.78
  775. p6  |    11.176
  776. (6 rows)
  777. QUERY: select * from rtest_vcomp where size_in_cm > 10.0 order by size_in_cm using >;
  778. part|size_in_cm
  779. ----+----------
  780. p1  |       500
  781. p2  |       300
  782. p5  |     17.78
  783. p4  |        15
  784. p6  |    11.176
  785. (5 rows)
  786. QUERY: CREATE TABLE shoe_data (
  787. shoename   char(10),      
  788. sh_avail   integer,       
  789. slcolor    char(10),      
  790. slminlen   float,         
  791. slmaxlen   float,         
  792. slunit     char(8)        
  793. );
  794. QUERY: CREATE TABLE shoelace_data (
  795. sl_name    char(10),      
  796. sl_avail   integer,       
  797. sl_color   char(10),      
  798. sl_len     float,         
  799. sl_unit    char(8)        
  800. );
  801. QUERY: CREATE TABLE unit (
  802. un_name    char(8),       
  803. un_fact    float          
  804. );
  805. QUERY: CREATE VIEW shoe AS
  806. SELECT sh.shoename,
  807.    sh.sh_avail,
  808.    sh.slcolor,
  809.    sh.slminlen,
  810.    sh.slminlen * un.un_fact AS slminlen_cm,
  811.    sh.slmaxlen,
  812.    sh.slmaxlen * un.un_fact AS slmaxlen_cm,
  813.    sh.slunit
  814.   FROM shoe_data sh, unit un
  815.  WHERE sh.slunit = un.un_name;
  816. QUERY: CREATE VIEW shoelace AS
  817. SELECT s.sl_name,
  818.    s.sl_avail,
  819.    s.sl_color,
  820.    s.sl_len,
  821.    s.sl_unit,
  822.    s.sl_len * u.un_fact AS sl_len_cm
  823.   FROM shoelace_data s, unit u
  824.  WHERE s.sl_unit = u.un_name;
  825. QUERY: CREATE VIEW shoe_ready AS
  826. SELECT rsh.shoename,
  827.    rsh.sh_avail,
  828.    rsl.sl_name,
  829.    rsl.sl_avail,
  830.    int4smaller(rsh.sh_avail, rsl.sl_avail) AS total_avail
  831.   FROM shoe rsh, shoelace rsl
  832.  WHERE rsl.sl_color = rsh.slcolor
  833.    AND rsl.sl_len_cm >= rsh.slminlen_cm
  834.    AND rsl.sl_len_cm <= rsh.slmaxlen_cm;
  835. QUERY: INSERT INTO unit VALUES ('cm', 1.0);
  836. QUERY: INSERT INTO unit VALUES ('m', 100.0);
  837. QUERY: INSERT INTO unit VALUES ('inch', 2.54);
  838. QUERY: INSERT INTO shoe_data VALUES ('sh1', 2, 'black', 70.0, 90.0, 'cm');
  839. QUERY: INSERT INTO shoe_data VALUES ('sh2', 0, 'black', 30.0, 40.0, 'inch');
  840. QUERY: INSERT INTO shoe_data VALUES ('sh3', 4, 'brown', 50.0, 65.0, 'cm');
  841. QUERY: INSERT INTO shoe_data VALUES ('sh4', 3, 'brown', 40.0, 50.0, 'inch');
  842. QUERY: INSERT INTO shoelace_data VALUES ('sl1', 5, 'black', 80.0, 'cm');
  843. QUERY: INSERT INTO shoelace_data VALUES ('sl2', 6, 'black', 100.0, 'cm');
  844. QUERY: INSERT INTO shoelace_data VALUES ('sl3', 0, 'black', 35.0 , 'inch');
  845. QUERY: INSERT INTO shoelace_data VALUES ('sl4', 8, 'black', 40.0 , 'inch');
  846. QUERY: INSERT INTO shoelace_data VALUES ('sl5', 4, 'brown', 1.0 , 'm');
  847. QUERY: INSERT INTO shoelace_data VALUES ('sl6', 0, 'brown', 0.9 , 'm');
  848. QUERY: INSERT INTO shoelace_data VALUES ('sl7', 7, 'brown', 60 , 'cm');
  849. QUERY: INSERT INTO shoelace_data VALUES ('sl8', 1, 'brown', 40 , 'inch');
  850. QUERY: SELECT * FROM shoelace ORDER BY sl_name;
  851. sl_name   |sl_avail|sl_color  |sl_len|sl_unit |sl_len_cm
  852. ----------+--------+----------+------+--------+---------
  853. sl1       |       5|black     |    80|cm      |       80
  854. sl2       |       6|black     |   100|cm      |      100
  855. sl3       |       0|black     |    35|inch    |     88.9
  856. sl4       |       8|black     |    40|inch    |    101.6
  857. sl5       |       4|brown     |     1|m       |      100
  858. sl6       |       0|brown     |   0.9|m       |       90
  859. sl7       |       7|brown     |    60|cm      |       60
  860. sl8       |       1|brown     |    40|inch    |    101.6
  861. (8 rows)
  862. QUERY: SELECT * FROM shoe_ready WHERE total_avail >= 2;
  863. shoename  |sh_avail|sl_name   |sl_avail|total_avail
  864. ----------+--------+----------+--------+-----------
  865. sh1       |       2|sl1       |       5|          2
  866. sh3       |       4|sl7       |       7|          4
  867. (2 rows)
  868. QUERY:     CREATE TABLE shoelace_log (
  869.         sl_name    char(10),      
  870.         sl_avail   integer,       
  871.         log_who    name,          
  872.         log_when   datetime       
  873.     );
  874. QUERY:     CREATE RULE log_shoelace AS ON UPDATE TO shoelace_data
  875.         WHERE NEW.sl_avail != OLD.sl_avail
  876.         DO INSERT INTO shoelace_log VALUES (
  877.                                         NEW.sl_name,
  878.                                         NEW.sl_avail,
  879.                                         'Al Bundy',
  880.                                         'epoch'::text
  881.                                     );
  882. QUERY: UPDATE shoelace_data SET sl_avail = 6 WHERE  sl_name = 'sl7';
  883. QUERY: SELECT * FROM shoelace_log;
  884. sl_name   |sl_avail|log_who |log_when
  885. ----------+--------+--------+--------
  886. sl7       |       6|Al Bundy|epoch   
  887. (1 row)
  888. QUERY:     CREATE RULE shoelace_ins AS ON INSERT TO shoelace
  889.         DO INSTEAD
  890.         INSERT INTO shoelace_data VALUES (
  891.                NEW.sl_name,
  892.                NEW.sl_avail,
  893.                NEW.sl_color,
  894.                NEW.sl_len,
  895.                NEW.sl_unit);
  896. QUERY:     CREATE RULE shoelace_upd AS ON UPDATE TO shoelace
  897.         DO INSTEAD
  898.         UPDATE shoelace_data SET
  899.                sl_name = NEW.sl_name,
  900.                sl_avail = NEW.sl_avail,
  901.                sl_color = NEW.sl_color,
  902.                sl_len = NEW.sl_len,
  903.                sl_unit = NEW.sl_unit
  904.          WHERE sl_name = OLD.sl_name;
  905. QUERY:     CREATE RULE shoelace_del AS ON DELETE TO shoelace
  906.         DO INSTEAD
  907.         DELETE FROM shoelace_data
  908.          WHERE sl_name = OLD.sl_name;
  909. QUERY:     CREATE TABLE shoelace_arrive (
  910.         arr_name    char(10),
  911.         arr_quant   integer
  912.     );
  913. QUERY:     CREATE TABLE shoelace_ok (
  914.         ok_name     char(10),
  915.         ok_quant    integer
  916.     );
  917. QUERY:     CREATE RULE shoelace_ok_ins AS ON INSERT TO shoelace_ok
  918.         DO INSTEAD
  919.         UPDATE shoelace SET
  920.                sl_avail = sl_avail + NEW.ok_quant
  921.          WHERE sl_name = NEW.ok_name;
  922. QUERY: INSERT INTO shoelace_arrive VALUES ('sl3', 10);
  923. QUERY: INSERT INTO shoelace_arrive VALUES ('sl6', 20);
  924. QUERY: INSERT INTO shoelace_arrive VALUES ('sl8', 20);
  925. QUERY: SELECT * FROM shoelace ORDER BY sl_name;
  926. sl_name   |sl_avail|sl_color  |sl_len|sl_unit |sl_len_cm
  927. ----------+--------+----------+------+--------+---------
  928. sl1       |       5|black     |    80|cm      |       80
  929. sl2       |       6|black     |   100|cm      |      100
  930. sl3       |       0|black     |    35|inch    |     88.9
  931. sl4       |       8|black     |    40|inch    |    101.6
  932. sl5       |       4|brown     |     1|m       |      100
  933. sl6       |       0|brown     |   0.9|m       |       90
  934. sl7       |       6|brown     |    60|cm      |       60
  935. sl8       |       1|brown     |    40|inch    |    101.6
  936. (8 rows)
  937. QUERY: insert into shoelace_ok select * from shoelace_arrive;
  938. QUERY: SELECT * FROM shoelace ORDER BY sl_name;
  939. sl_name   |sl_avail|sl_color  |sl_len|sl_unit |sl_len_cm
  940. ----------+--------+----------+------+--------+---------
  941. sl1       |       5|black     |    80|cm      |       80
  942. sl2       |       6|black     |   100|cm      |      100
  943. sl3       |      10|black     |    35|inch    |     88.9
  944. sl4       |       8|black     |    40|inch    |    101.6
  945. sl5       |       4|brown     |     1|m       |      100
  946. sl6       |      20|brown     |   0.9|m       |       90
  947. sl7       |       6|brown     |    60|cm      |       60
  948. sl8       |      21|brown     |    40|inch    |    101.6
  949. (8 rows)
  950. QUERY: SELECT * FROM shoelace_log;
  951. sl_name   |sl_avail|log_who |log_when
  952. ----------+--------+--------+--------
  953. sl7       |       6|Al Bundy|epoch   
  954. sl3       |      10|Al Bundy|epoch   
  955. sl6       |      20|Al Bundy|epoch   
  956. sl8       |      21|Al Bundy|epoch   
  957. (4 rows)
  958. QUERY:     CREATE VIEW shoelace_obsolete AS
  959. SELECT * FROM shoelace WHERE NOT EXISTS
  960.     (SELECT shoename FROM shoe WHERE slcolor = sl_color);
  961. QUERY:     CREATE VIEW shoelace_candelete AS
  962. SELECT * FROM shoelace_obsolete WHERE sl_avail = 0;
  963. QUERY: insert into shoelace values ('sl9', 0, 'pink', 35.0, 'inch', 0.0);
  964. QUERY: insert into shoelace values ('sl10', 1000, 'magenta', 40.0, 'inch', 0.0);
  965. QUERY: SELECT * FROM shoelace_obsolete;
  966. sl_name   |sl_avail|sl_color  |sl_len|sl_unit |sl_len_cm
  967. ----------+--------+----------+------+--------+---------
  968. sl9       |       0|pink      |    35|inch    |     88.9
  969. sl10      |    1000|magenta   |    40|inch    |    101.6
  970. (2 rows)
  971. QUERY: SELECT * FROM shoelace_candelete;
  972. sl_name   |sl_avail|sl_color  |sl_len|sl_unit |sl_len_cm
  973. ----------+--------+----------+------+--------+---------
  974. sl9       |       0|pink      |    35|inch    |     88.9
  975. (1 row)
  976. QUERY: DELETE FROM shoelace WHERE EXISTS
  977.     (SELECT * FROM shoelace_candelete
  978.              WHERE sl_name = shoelace.sl_name);
  979. QUERY: SELECT * FROM shoelace ORDER BY sl_name;
  980. sl_name   |sl_avail|sl_color  |sl_len|sl_unit |sl_len_cm
  981. ----------+--------+----------+------+--------+---------
  982. sl1       |       5|black     |    80|cm      |       80
  983. sl10      |    1000|magenta   |    40|inch    |    101.6
  984. sl2       |       6|black     |   100|cm      |      100
  985. sl3       |      10|black     |    35|inch    |     88.9
  986. sl4       |       8|black     |    40|inch    |    101.6
  987. sl5       |       4|brown     |     1|m       |      100
  988. sl6       |      20|brown     |   0.9|m       |       90
  989. sl7       |       6|brown     |    60|cm      |       60
  990. sl8       |      21|brown     |    40|inch    |    101.6
  991. (9 rows)
  992. QUERY: SELECT viewname, definition FROM pg_views ORDER BY viewname;
  993. viewname          |definition                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
  994. ------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  995. iexit             |SELECT "ih"."name", "ih"."thepath", "interpt_pp"("ih"."thepath", "r"."thepath") AS "exit" FROM "ihighway" "ih", "ramp" "r" WHERE ("ih"."thepath" ## "r"."thepath");                                                                                                                                                                                                                                                                                                        
  996. pg_indexes        |SELECT "c"."relname" AS "tablename", "i"."relname" AS "indexname", "pg_get_indexdef"("x"."indexrelid") AS "indexdef" FROM "pg_index" "x", "pg_class" "c", "pg_class" "i" WHERE (("c"."oid" = "x"."indrelid") AND ("i"."oid" = "x"."indexrelid"));                                                                                                                                                                                                                          
  997. pg_rules          |SELECT "c"."relname" AS "tablename", "r"."rulename", "pg_get_ruledef"("r"."rulename") AS "definition" FROM "pg_rewrite" "r", "pg_class" "c" WHERE (("r"."rulename" !~ '^_RET'::"text") AND ("c"."oid" = "r"."ev_class"));                                                                                                                                                                                                                                                  
  998. pg_tables         |SELECT "c"."relname" AS "tablename", "pg_get_userbyid"("c"."relowner") AS "tableowner", "c"."relhasindex" AS "hasindexes", "c"."relhasrules" AS "hasrules", ("c"."reltriggers" > '0'::"int4") AS "hastriggers" FROM "pg_class" "c" WHERE ((("c"."relkind" = 'r'::"char") OR ("c"."relkind" = 's'::"char")) AND (NOT (EXISTS (SELECT "pg_rewrite"."rulename" FROM "pg_rewrite" WHERE (("pg_rewrite"."ev_class" = "c"."oid") AND ("pg_rewrite"."ev_type" = '1'::"char"))))));
  999. pg_user           |SELECT "pg_shadow"."usename", "pg_shadow"."usesysid", "pg_shadow"."usecreatedb", "pg_shadow"."usetrace", "pg_shadow"."usesuper", "pg_shadow"."usecatupd", '********'::"text" AS "passwd", "pg_shadow"."valuntil" FROM "pg_shadow";                                                                                                                                                                                                                                         
  1000. pg_views          |SELECT "c"."relname" AS "viewname", "pg_get_userbyid"("c"."relowner") AS "viewowner", "pg_get_viewdef"("c"."relname") AS "definition" FROM "pg_class" "c" WHERE ("c"."relhasrules" AND (EXISTS (SELECT "r"."rulename" FROM "pg_rewrite" "r" WHERE (("r"."ev_class" = "c"."oid") AND ("r"."ev_type" = '1'::"char")))));                                                                                                                                                     
  1001. rtest_v1          |SELECT "rtest_t1"."a", "rtest_t1"."b" FROM "rtest_t1";                                                                                                                                                                                                                                                                                                                                                                                                                     
  1002. rtest_vcomp       |SELECT "x"."part", ("x"."size" * "y"."factor") AS "size_in_cm" FROM "rtest_comp" "x", "rtest_unitfact" "y" WHERE ("x"."unit" = "y"."unit");                                                                                                                                                                                                                                                                                                                                
  1003. rtest_vview1      |SELECT "x"."a", "x"."b" FROM "rtest_view1" "x" WHERE ('0'::"int4" < (SELECT "count"("y"."a") AS "count" FROM "rtest_view2" "y" WHERE ("y"."a" = "x"."a")));                                                                                                                                                                                                                                                                                                                
  1004. rtest_vview2      |SELECT "rtest_view1"."a", "rtest_view1"."b" FROM "rtest_view1" WHERE "rtest_view1"."v";                                                                                                                                                                                                                                                                                                                                                                                    
  1005. rtest_vview3      |SELECT "x"."a", "x"."b" FROM "rtest_vview2" "x" WHERE ('0'::"int4" < (SELECT "count"("y"."a") AS "count" FROM "rtest_view2" "y" WHERE ("y"."a" = "x"."a")));                                                                                                                                                                                                                                                                                                               
  1006. rtest_vview4      |SELECT "x"."a", "x"."b", "count"("y"."a") AS "refcount" FROM "rtest_view1" "x", "rtest_view2" "y" WHERE ("x"."a" = "y"."a") GROUP BY "x"."a", "x"."b";                                                                                                                                                                                                                                                                                                                     
  1007. rtest_vview5      |SELECT "rtest_view1"."a", "rtest_view1"."b", "rtest_viewfunc1"("rtest_view1"."a") AS "refcount" FROM "rtest_view1";                                                                                                                                                                                                                                                                                                                                                        
  1008. shoe              |SELECT "sh"."shoename", "sh"."sh_avail", "sh"."slcolor", "sh"."slminlen", ("sh"."slminlen" * "un"."un_fact") AS "slminlen_cm", "sh"."slmaxlen", ("sh"."slmaxlen" * "un"."un_fact") AS "slmaxlen_cm", "sh"."slunit" FROM "shoe_data" "sh", "unit" "un" WHERE ("sh"."slunit" = "un"."un_name");                                                                                                                                                                              
  1009. shoe_ready        |SELECT "rsh"."shoename", "rsh"."sh_avail", "rsl"."sl_name", "rsl"."sl_avail", "int4smaller"("rsh"."sh_avail", "rsl"."sl_avail") AS "total_avail" FROM "shoe" "rsh", "shoelace" "rsl" WHERE ((("rsl"."sl_color" = "rsh"."slcolor") AND ("rsl"."sl_len_cm" >= "rsh"."slminlen_cm")) AND ("rsl"."sl_len_cm" <= "rsh"."slmaxlen_cm"));                                                                                                                                         
  1010. shoelace          |SELECT "s"."sl_name", "s"."sl_avail", "s"."sl_color", "s"."sl_len", "s"."sl_unit", ("s"."sl_len" * "u"."un_fact") AS "sl_len_cm" FROM "shoelace_data" "s", "unit" "u" WHERE ("s"."sl_unit" = "u"."un_name");                                                                                                                                                                                                                                                               
  1011. shoelace_candelete|SELECT "shoelace_obsolete"."sl_name", "shoelace_obsolete"."sl_avail", "shoelace_obsolete"."sl_color", "shoelace_obsolete"."sl_len", "shoelace_obsolete"."sl_unit", "shoelace_obsolete"."sl_len_cm" FROM "shoelace_obsolete" WHERE ("shoelace_obsolete"."sl_avail" = '0'::"int4");                                                                                                                                                                                          
  1012. shoelace_obsolete |SELECT "shoelace"."sl_name", "shoelace"."sl_avail", "shoelace"."sl_color", "shoelace"."sl_len", "shoelace"."sl_unit", "shoelace"."sl_len_cm" FROM "shoelace" WHERE (NOT (EXISTS (SELECT "shoe"."shoename" FROM "shoe" WHERE ("shoe"."slcolor" = "shoelace"."sl_color"))));                                                                                                                                                                                                 
  1013. street            |SELECT "r"."name", "r"."thepath", "c"."cname" FROM "road" "r", "real_city" "c" WHERE ("c"."outline" ## "r"."thepath");                                                                                                                                                                                                                                                                                                                                                     
  1014. toyemp            |SELECT "emp"."name", "emp"."age", "emp"."location", ('12'::"int4" * "emp"."salary") AS "annualsal" FROM "emp";                                                                                                                                                                                                                                                                                                                                                             
  1015. (20 rows)
  1016. QUERY: SELECT tablename, rulename, definition FROM pg_rules
  1017. ORDER BY tablename, rulename;
  1018. tablename    |rulename       |definition                                                                                                                                                                                                                                                                          
  1019. -------------+---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  1020. rtest_emp    |rtest_emp_del  |CREATE RULE "rtest_emp_del" AS ON DELETE TO "rtest_emp" DO INSERT INTO "rtest_emplog" ("ename", "who", "action", "newsal", "oldsal") VALUES (old."ename", "getpgusername"(), 'fired'::"bpchar", '$0.00'::"money", old."salary");                                                    
  1021. rtest_emp    |rtest_emp_ins  |CREATE RULE "rtest_emp_ins" AS ON INSERT TO "rtest_emp" DO INSERT INTO "rtest_emplog" ("ename", "who", "action", "newsal", "oldsal") VALUES (new."ename", "getpgusername"(), 'hired'::"bpchar", new."salary", '$0.00'::"money");                                                    
  1022. rtest_emp    |rtest_emp_upd  |CREATE RULE "rtest_emp_upd" AS ON UPDATE TO "rtest_emp" WHERE (new."salary" <> old."salary") DO INSERT INTO "rtest_emplog" ("ename", "who", "action", "newsal", "oldsal") VALUES (new."ename", "getpgusername"(), 'honored'::"bpchar", new."salary", old."salary");                 
  1023. rtest_nothn1 |rtest_nothn_r1 |CREATE RULE "rtest_nothn_r1" AS ON INSERT TO "rtest_nothn1" WHERE ((new."a" >= '10'::"int4") AND (new."a" < '20'::"int4")) DO INSTEAD SELECT '1'::"int4";                                                                                                                           
  1024. rtest_nothn1 |rtest_nothn_r2 |CREATE RULE "rtest_nothn_r2" AS ON INSERT TO "rtest_nothn1" WHERE ((new."a" >= '30'::"int4") AND (new."a" < '40'::"int4")) DO INSTEAD NOTHING;                                                                                                                                      
  1025. rtest_nothn2 |rtest_nothn_r3 |CREATE RULE "rtest_nothn_r3" AS ON INSERT TO "rtest_nothn2" WHERE (new."a" >= '100'::"int4") DO INSTEAD INSERT INTO "rtest_nothn3" ("a", "b") VALUES (new."a", new."b");                                                                                                            
  1026. rtest_nothn2 |rtest_nothn_r4 |CREATE RULE "rtest_nothn_r4" AS ON INSERT TO "rtest_nothn2" DO INSTEAD NOTHING;                                                                                                                                                                                                     
  1027. rtest_order1 |rtest_order_r1 |CREATE RULE "rtest_order_r1" AS ON INSERT TO "rtest_order1" DO INSTEAD INSERT INTO "rtest_order2" ("a", "b", "c") VALUES (new."a", "nextval"('rtest_seq'::"text"), 'rule 1 - this should run 3rd or 4th'::"text");                                                                  
  1028. rtest_order1 |rtest_order_r2 |CREATE RULE "rtest_order_r2" AS ON INSERT TO "rtest_order1" DO INSERT INTO "rtest_order2" ("a", "b", "c") VALUES (new."a", "nextval"('rtest_seq'::"text"), 'rule 2 - this should run 1st'::"text");                                                                                 
  1029. rtest_order1 |rtest_order_r3 |CREATE RULE "rtest_order_r3" AS ON INSERT TO "rtest_order1" DO INSTEAD INSERT INTO "rtest_order2" ("a", "b", "c") VALUES (new."a", "nextval"('rtest_seq'::"text"), 'rule 3 - this should run 3rd or 4th'::"text");                                                                  
  1030. rtest_order1 |rtest_order_r4 |CREATE RULE "rtest_order_r4" AS ON INSERT TO "rtest_order1" WHERE ("rtest_order2"."a" < '100'::"int4") DO INSTEAD INSERT INTO "rtest_order2" ("a", "b", "c") VALUES (new."a", "nextval"('rtest_seq'::"text"), 'rule 4 - this should run 2nd'::"text");                              
  1031. rtest_person |rtest_pers_del |CREATE RULE "rtest_pers_del" AS ON DELETE TO "rtest_person" DO DELETE FROM "rtest_admin" WHERE ("rtest_admin"."pname" = old."pname");                                                                                                                                               
  1032. rtest_person |rtest_pers_upd |CREATE RULE "rtest_pers_upd" AS ON UPDATE TO "rtest_person" DO UPDATE rtest_admin SET "pname" = new."pname" WHERE ("rtest_admin"."pname" = old."pname");                                                                                                                            
  1033. rtest_system |rtest_sys_del  |CREATE RULE "rtest_sys_del" AS ON DELETE TO "rtest_system" DO (DELETE FROM "rtest_interface" WHERE ("rtest_interface"."sysname" = old."sysname"); DELETE FROM "rtest_admin" WHERE ("rtest_admin"."sysname" = old."sysname"); );                                                     
  1034. rtest_system |rtest_sys_upd  |CREATE RULE "rtest_sys_upd" AS ON UPDATE TO "rtest_system" DO (UPDATE rtest_interface SET "sysname" = new."sysname" WHERE ("rtest_interface"."sysname" = old."sysname"); UPDATE rtest_admin SET "sysname" = new."sysname" WHERE ("rtest_admin"."sysname" = old."sysname"); );       
  1035. rtest_t4     |rtest_t4_ins1  |CREATE RULE "rtest_t4_ins1" AS ON INSERT TO "rtest_t4" WHERE ((new."a" >= '10'::"int4") AND (new."a" < '20'::"int4")) DO INSTEAD INSERT INTO "rtest_t5" ("a", "b") VALUES (new."a", new."b");                                                                                       
  1036. rtest_t4     |rtest_t4_ins2  |CREATE RULE "rtest_t4_ins2" AS ON INSERT TO "rtest_t4" WHERE ((new."a" >= '20'::"int4") AND (new."a" < '30'::"int4")) DO INSERT INTO "rtest_t6" ("a", "b") VALUES (new."a", new."b");                                                                                               
  1037. rtest_t5     |rtest_t5_ins   |CREATE RULE "rtest_t5_ins" AS ON INSERT TO "rtest_t5" WHERE (new."a" > '15'::"int4") DO INSERT INTO "rtest_t7" ("a", "b") VALUES (new."a", new."b");                                                                                                                                
  1038. rtest_t6     |rtest_t6_ins   |CREATE RULE "rtest_t6_ins" AS ON INSERT TO "rtest_t6" WHERE (new."a" > '25'::"int4") DO INSTEAD INSERT INTO "rtest_t8" ("a", "b") VALUES (new."a", new."b");                                                                                                                        
  1039. rtest_v1     |rtest_v1_del   |CREATE RULE "rtest_v1_del" AS ON DELETE TO "rtest_v1" DO INSTEAD DELETE FROM "rtest_t1" WHERE ("rtest_t1"."a" = old."a");                                                                                                                                                           
  1040. rtest_v1     |rtest_v1_ins   |CREATE RULE "rtest_v1_ins" AS ON INSERT TO "rtest_v1" DO INSTEAD INSERT INTO "rtest_t1" ("a", "b") VALUES (new."a", new."b");                                                                                                                                                       
  1041. rtest_v1     |rtest_v1_upd   |CREATE RULE "rtest_v1_upd" AS ON UPDATE TO "rtest_v1" DO INSTEAD UPDATE rtest_t1 SET "a" = new."a", "b" = new."b" WHERE ("rtest_t1"."a" = old."a");                                                                                                                                 
  1042. shoelace     |shoelace_del   |CREATE RULE "shoelace_del" AS ON DELETE TO "shoelace" DO INSTEAD DELETE FROM "shoelace_data" WHERE ("shoelace_data"."sl_name" = old."sl_name");                                                                                                                                     
  1043. shoelace     |shoelace_ins   |CREATE RULE "shoelace_ins" AS ON INSERT TO "shoelace" DO INSTEAD INSERT INTO "shoelace_data" ("sl_name", "sl_avail", "sl_color", "sl_len", "sl_unit") VALUES (new."sl_name", new."sl_avail", new."sl_color", new."sl_len", new."sl_unit");                                          
  1044. shoelace     |shoelace_upd   |CREATE RULE "shoelace_upd" AS ON UPDATE TO "shoelace" DO INSTEAD UPDATE shoelace_data SET "sl_name" = new."sl_name", "sl_avail" = new."sl_avail", "sl_color" = new."sl_color", "sl_len" = new."sl_len", "sl_unit" = new."sl_unit" WHERE ("shoelace_data"."sl_name" = old."sl_name");
  1045. shoelace_data|log_shoelace   |CREATE RULE "log_shoelace" AS ON UPDATE TO "shoelace_data" WHERE (new."sl_avail" <> old."sl_avail") DO INSERT INTO "shoelace_log" ("sl_name", "sl_avail", "log_who", "log_when") VALUES (new."sl_name", new."sl_avail", 'Al Bundy'::"name", "datetime"('epoch'::"text"));           
  1046. shoelace_ok  |shoelace_ok_ins|CREATE RULE "shoelace_ok_ins" AS ON INSERT TO "shoelace_ok" DO INSTEAD UPDATE shoelace SET "sl_avail" = ("shoelace"."sl_avail" + new."ok_quant") WHERE ("shoelace"."sl_name" = new."ok_name");                                                                                      
  1047. (27 rows)