Facebook
From Sole Flamingo, 4 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 174
  1. 1.
  2. http://www.cs.put.poznan.pl/jjezierski/rsbd/tutorial1.pdf
  3. mkdir /var/lib/pgsql/rsbd1
  4. initdb /var/lib/pgsql/rsbd1
  5.  
  6. mkdir /var/lib/pgsql/rsbd2
  7. initdb /var/lib/pgsql/rsbd2
  8. RAPORT
  9.  
  10.  
  11. pg_ctl -D /var/lib/pgsql/rsbd1 -l logfile start
  12. pg_ctl -D /var/lib/pgsql/rsbd2 -l logfile start
  13. RAPORT
  14.  
  15. 2.
  16. psql -p 5432
  17. \set PROMPT1 '%n@RSBD1:%>%# '
  18. psql -p 5433
  19. \set PROMPT1 '%n@RSBD2:%>%# '
  20.  
  21. CREATE EXTENSION postgres_fdw;
  22.  
  23. \i ~/pracownicy.sql
  24.  
  25. \i ~/zespoly.sql
  26.  
  27. CREATE SERVER rsbd2 FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'localhost', port '5433', dbname 'postgres');
  28. CREATE USER MAPPING FOR postgres SERVER rsbd2 OPTIONS (user 'postgres');
  29. IMPORT FOREIGN SCHEMA public LIMIT TO (zespoly) FROM SERVER rsbd2 INTO public;
  30. SELECT * FROM zespoly;
  31. SELECT nazwisko, nazwa FROM pracownicy natural join zespoly;
  32.  
  33. CREATE SERVER rsbd1 FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'localhost', port '5432', dbname 'postgres');
  34. CREATE USER MAPPING FOR postgres SERVER rsbd1 OPTIONS (user 'postgres');
  35. IMPORT FOREIGN SCHEMA public LIMIT TO (pracownicy) FROM SERVER rsbd1 INTO public;
  36.  
  37. 3.
  38. begin;
  39. update zespoly set adres='PIOTROWO 1' where id_zesp=10;
  40. update pracownicy set placa_pod=999 where id_prac=100;
  41. commit;
  42.  
  43. Tak, posiadaja zmiany.
  44.  
  45.  
  46. pg_ctl -D /var/lib/pgsql/rsbd1 -l logfile restart
  47. pg_ctl -D /var/lib/pgsql/rsbd2 -l logfile restart
  48.  
  49. \c "port=5432"
  50. \c "port=5433"
  51.  
  52. begin;
  53. update pracownicy set placa_pod=888 where id_prac=100;
  54.  
  55. begin;
  56. update zespoly set adres='PIOTROWO 99' where id_zesp=10;
  57.  
  58. PREPARE TRANSACTION 'distributed-transaction01-rsbd1';
  59. pg_ctl -D /var/lib/pgsql/rsbd2  stop
  60. PREPARE TRANSACTION 'distributed-transaction01-rsbd2';
  61. pg_ctl -D /var/lib/pgsql/rsbd1 stop
  62.  
  63. pg_ctl -D /var/lib/pgsql/rsbd1 -l logfile start
  64. pg_ctl -D /var/lib/pgsql/rsbd2 -l logfile start
  65.  
  66. \c "port=5432"
  67.  select * from pg_prepared_xacts;
  68. \c "port=5433"
  69.  select * from pg_prepared_xacts;
  70.  
  71. ROLLBACK PREPARED 'distributed-transaction01-rsbd1';
  72.  
  73.  
  74. begin;
  75. update pracownicy set placa_pod=888 where id_prac=100;
  76.  
  77. begin;
  78. update zespoly set adres='PIOTROWO 99' where id_zesp=10;
  79.  
  80. PREPARE TRANSACTION 'distributed-transaction01-rsbd1';
  81. PREPARE TRANSACTION 'distributed-transaction01-rsbd2';
  82. pg_ctl -D /var/lib/pgsql/rsbd1  stop
  83. pg_ctl -D /var/lib/pgsql/rsbd2  stop
  84. pg_ctl -D /var/lib/pgsql/rsbd1 -l logfile start
  85. pg_ctl -D /var/lib/pgsql/rsbd2 -l logfile start
  86.  
  87. Zarowno dla rsbd1 jak i rsbd2 zapytanie ` select * from pg_prepared_xacts;` zwraca transakcje w statusie PREPARED
  88.  
  89. 4.
  90. begin;
  91. update pracownicy set placa_pod=placa_pod+10 where id_prac=100;
  92.  
  93. begin;
  94. update zespoly set adres='PIOTROWO 88' where id_zesp=10;
  95.  
  96. update zespoly set adres='PIOTROWO 77' where id_zesp=10;
  97.  
  98. update pracownicy set placa_pod=placa_pod+10 where id_prac=100;
  99.  
  100. 4.9: Nastpil rollback
  101.  
  102.  
  103. 4.12
  104. rsbd1:
  105. begin;
  106. SELECT * FROM pracownicy where id_prac=100 FOR UPDATE NOWAIT;
  107. update pracownicy set placa_pod=placa_pod+10 where id_prac=100;
  108. SELECT * FROM zespoly FOR UPDATE NOWAIT;
  109. update zespoly set adres='PIOTROWO 77' where id_zesp=10;
  110.  
  111. rsbd2
  112. begin;
  113. SELECT * FROM zespoly FOR UPDATE NOWAIT;
  114. update zespoly set adres='PIOTROWO 88' where id_zesp=10;
  115. SELECT * FROM pracownicy FOR UPDATE NOWAIT;
  116. update pracownicy set placa_pod=placa_pod+10 where id_prac=100;
  117.  
  118. Niestety przy transakcji rozproszonej `FOR UPDATE NOWAIT` nie dziaa. Nadal wystpuja zakleszczanie si transakcji.
  119.  
  120. 5.
  121. CREATE MATERIALIZED VIEW zespoly_replika AS SELECT * FROM zespoly;
  122. update zespoly set adres='PIOTROWO 43' where id_zesp=10;
  123. REFRESH MATERIALIZED VIEW zespoly_replika;
  124.  
  125. 5.6
  126. Perspektywa musi byc odswiezana poprzez wywolanie komendy. Nie wiadomo czy dane zostaly zmienione, nalezy wykonywac cykliczne odswiezenia.