Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c69315bb43 | ||
|
|
4bddb5c36c | ||
|
|
9a793a30b3 | ||
|
|
f6275688e7 | ||
|
|
10077f13c4 | ||
|
|
1afcc5c835 | ||
|
|
149e093c88 | ||
|
|
99d1c99963 | ||
|
|
b5af4ead0d | ||
|
|
9b85e0a4cd | ||
|
|
0be4fb937f | ||
|
|
05eb956aab | ||
|
|
36cb8e8428 | ||
|
|
28b1f68750 | ||
|
|
0b58bfe6bf | ||
|
|
7dfcc73e95 | ||
|
|
cbb89b09b1 | ||
|
|
7d0ba9448b | ||
|
|
05b595d32d | ||
|
|
396a22b6be | ||
|
|
7be7d3a024 | ||
|
|
8ba7cea2f1 | ||
|
|
e3aa616edd | ||
|
|
dc8832192d | ||
|
|
72794f9524 | ||
|
|
b337b64eb1 | ||
|
|
67ef438730 | ||
|
|
29053098fc | ||
|
|
b9a3178b43 | ||
|
|
7d068130a4 | ||
|
|
cb070fc365 | ||
|
|
396f6c9d73 | ||
|
|
8b7eeca545 | ||
|
|
702bc8c8ce | ||
|
|
cba3dc9457 | ||
|
|
4baaff4566 | ||
|
|
bdcf1f986f | ||
|
|
7609038a16 | ||
|
|
619680e71f | ||
|
|
fec63c6cf3 | ||
|
|
3e031ad334 | ||
|
|
75cbf9165e | ||
|
|
b6924a84d6 | ||
|
|
96f3ac8a53 | ||
|
|
dd4639d602 | ||
|
|
bfa859e9ce | ||
|
|
b1eba4fc4c | ||
|
|
4b183f7988 | ||
|
|
fb3b2a4635 | ||
|
|
db3d0c6e21 | ||
|
|
cedfd12f6a | ||
|
|
c9013a39b8 | ||
|
|
e04f5a0938 | ||
|
|
48dd32f0e4 | ||
|
|
87c1023c4f | ||
|
|
7ab096d87f | ||
|
|
736879567f | ||
|
|
e2b27da2ef | ||
|
|
4baae7512b | ||
|
|
6949b41fb9 | ||
|
|
4fd1e16bb4 | ||
|
|
c0c9034326 | ||
|
|
6c7f5d1a6b | ||
|
|
c9920063dd | ||
|
|
40b916dc2e | ||
|
|
16e8df8f78 | ||
|
|
b9f9ad8027 | ||
|
|
30107e38f3 | ||
|
|
8ea3346a9d | ||
|
|
c067289012 | ||
|
|
cad4c6b8af | ||
|
|
2ec460bf8f | ||
|
|
acf5eb7a26 | ||
|
|
0431cf7fc1 | ||
|
|
259a534a71 | ||
|
|
2a22cf077c | ||
|
|
1f2f405057 | ||
|
|
5483f70d4b | ||
|
|
af1c70f192 | ||
|
|
d8e00e6586 | ||
|
|
eb1c36bf5b | ||
|
|
377bf554b6 | ||
|
|
1d27cb9251 | ||
|
|
5c57fd0170 | ||
|
|
d6f01b552a | ||
|
|
4fbfcdfee9 | ||
|
|
cba42ef277 | ||
|
|
4fc49390ed | ||
|
|
a73f58160f | ||
|
|
14f617681f | ||
|
|
52829d6f31 | ||
|
|
b2864add54 | ||
|
|
1219dcb1d8 | ||
|
|
39401469fd | ||
|
|
8a6a6624ae | ||
|
|
7aec8bd9d7 | ||
|
|
a5a2a7c52f | ||
|
|
2836285ba2 | ||
|
|
b9686fcb00 | ||
|
|
edb74a0839 | ||
|
|
1ccdbf27e2 | ||
|
|
5fbf0b9fe5 | ||
|
|
8428df97ca | ||
|
|
978979c39f | ||
|
|
0e0d0c7c2e | ||
|
|
f4b910bffc | ||
|
|
e20e75aeba | ||
|
|
46a9d4a69d | ||
|
|
35cbe968f4 | ||
|
|
23eaa47fea | ||
|
|
861c66d180 | ||
|
|
1d7d6561f6 | ||
|
|
6d1e918c78 | ||
|
|
1e7517dc98 | ||
|
|
60265b306f | ||
|
|
f12d6336cf | ||
|
|
05938fa6e1 | ||
|
|
cc9297327b | ||
|
|
3ac789f615 | ||
|
|
4c2ae44e4c | ||
|
|
32fb3f3c1f | ||
|
|
625508e32a | ||
|
|
39a0f46159 | ||
|
|
62baa0dccb | ||
|
|
1f17051bec | ||
|
|
ad9a67d6d1 | ||
|
|
0ccfa7900c | ||
|
|
d98f411ea9 | ||
|
|
c19fc3628c | ||
|
|
20132f8daa | ||
|
|
7e2add8db1 | ||
|
|
d6ecc531e0 | ||
|
|
ed941b5b95 | ||
|
|
41e4f3eed9 | ||
|
|
bd3eeb7111 | ||
|
|
f1e7782ca2 | ||
|
|
4ede084b8f | ||
|
|
a6faa77e5b | ||
|
|
e2c5d9a916 | ||
|
|
26f79bafc6 | ||
|
|
47a0009d32 | ||
|
|
e33468e661 | ||
|
|
e24bd7c0e8 | ||
|
|
569bf4d5a2 | ||
|
|
f65d856d13 | ||
|
|
1daf4b08e5 | ||
|
|
80df33c179 | ||
|
|
1fd9353d4d | ||
|
|
62921600bd | ||
|
|
686f52f636 | ||
|
|
947630e0f0 | ||
|
|
64d5457e2b | ||
|
|
ec19fc2b01 | ||
|
|
993e1eb1b6 | ||
|
|
1131e0f742 | ||
|
|
d92a836647 | ||
|
|
288ba1d1f9 | ||
|
|
9587d2bb3b | ||
|
|
c2a54f3524 | ||
|
|
097080ba97 | ||
|
|
6ab102fcbc | ||
|
|
290e160e13 | ||
|
|
af13d6da16 | ||
|
|
6b31fc4552 | ||
|
|
660a75a582 | ||
|
|
15914fe5e3 | ||
|
|
96450fee63 | ||
|
|
b79b2b1265 | ||
|
|
a93c0c8d94 | ||
|
|
644575415e | ||
|
|
b14834b06c | ||
|
|
0987c955f5 | ||
|
|
bdb43f84e8 | ||
|
|
401358568a | ||
|
|
6969d5c16f | ||
|
|
2d024fd7e6 | ||
|
|
94bba36713 | ||
|
|
c08ec7a1bd | ||
|
|
fa29ba9163 | ||
|
|
c1a022c40c | ||
|
|
a18d469c90 | ||
|
|
fdf7a459eb | ||
|
|
abea2c7172 | ||
|
|
6027fdc10c | ||
|
|
ca088e83f7 | ||
|
|
e334b87b4c | ||
|
|
53b9fe1c86 | ||
|
|
415e9c0ac5 | ||
|
|
dfa367a127 | ||
|
|
bc5e710d49 | ||
|
|
c80f760d07 | ||
|
|
3eac4ba59e | ||
|
|
287c53cd5a | ||
|
|
6710969143 | ||
|
|
6c7116a20c | ||
|
|
17a4faeb6b | ||
|
|
4df23bd576 | ||
|
|
33953e9119 | ||
|
|
94051a0991 | ||
|
|
f334b132d9 | ||
|
|
b47c9039d7 | ||
|
|
659316d3cb | ||
|
|
21cbc6e9e5 | ||
|
|
50391ae3fd | ||
|
|
ce637ecd4b | ||
|
|
5a870a102e | ||
|
|
3f5aafd263 | ||
|
|
c47876e9ce | ||
|
|
c638b2a500 | ||
|
|
78a48bbe7e | ||
|
|
57fbeced39 | ||
|
|
d3d1f92102 | ||
|
|
222de66a83 | ||
|
|
374941bfab | ||
|
|
d9fff8c480 | ||
|
|
fb6e59bab8 | ||
|
|
01ef5c664f | ||
|
|
da937e2618 | ||
|
|
e7bea6686b | ||
|
|
b780339abb | ||
|
|
bbc46c0990 | ||
|
|
1527daede8 | ||
|
|
5330121b36 | ||
|
|
3f78cfa092 | ||
|
|
8d1bf6f735 | ||
|
|
cc4dfaf951 | ||
|
|
d3f058cf1f | ||
|
|
87985e9e45 | ||
|
|
b056fa5914 | ||
|
|
fc7edd76e1 | ||
|
|
a705a37999 | ||
|
|
7ee68d98d6 | ||
|
|
ac4827c33b | ||
|
|
140494454a | ||
|
|
43449be18c | ||
|
|
b37c5ff8c7 | ||
|
|
150a438a77 | ||
|
|
fb91ec1b75 | ||
|
|
9556e64c54 | ||
|
|
150b91f195 | ||
|
|
af7f58b4d2 | ||
|
|
0f525c8401 | ||
|
|
b7b94da285 | ||
|
|
1780973bb3 | ||
|
|
85bb7bf772 | ||
|
|
2f42481346 | ||
|
|
f5e2157658 | ||
|
|
48839983fd | ||
|
|
36d18ba5cb | ||
|
|
a607ab2d94 | ||
|
|
ec33c3e7ec | ||
|
|
9924fae378 | ||
|
|
05f3efbc97 | ||
|
|
e797eb17eb | ||
|
|
fc0e36b313 | ||
|
|
c78904501d | ||
|
|
501bff6f7a | ||
|
|
12f82820c9 | ||
|
|
66cb4e3bcf | ||
|
|
51c22608b2 | ||
|
|
034e96f713 | ||
|
|
97bd417ea8 | ||
|
|
7ce03f3bea | ||
|
|
636ab5cbab | ||
|
|
eef7461ae6 | ||
|
|
49b5ab71c2 | ||
|
|
bf25fcc919 | ||
|
|
b429a38176 | ||
|
|
c8945883c1 | ||
|
|
40013fb26c | ||
|
|
58aca506fe | ||
|
|
8700a17dad | ||
|
|
1d01b5a8a2 | ||
|
|
207812582d | ||
|
|
f1aa82ad36 | ||
|
|
5cb64f7602 | ||
|
|
70b2ead852 | ||
|
|
7e8cc539dc | ||
|
|
fb448bcecc | ||
|
|
e4eeba2aa7 | ||
|
|
8b815d4aac | ||
|
|
e046101305 | ||
|
|
88fc8772d1 | ||
|
|
4549abb6b3 | ||
|
|
13a3b153e5 | ||
|
|
2353702f0b | ||
|
|
0e38d1b82b | ||
|
|
e03676f138 | ||
|
|
faab0c3896 | ||
|
|
bf38a0caa8 | ||
|
|
319701dbbd | ||
|
|
a026353df8 | ||
|
|
c5e1e74757 | ||
|
|
a66dfff39d | ||
|
|
38f0809858 | ||
|
|
f3ee014cbd | ||
|
|
64ddfc0eb7 | ||
|
|
8fbe2fb8f2 | ||
|
|
ff5b92aaeb | ||
|
|
1b327d1997 | ||
|
|
eba306618c | ||
|
|
b923f5fcfa | ||
|
|
64aa739224 | ||
|
|
366dd3a973 | ||
|
|
f43b3b0ce5 | ||
|
|
3ca7bb854f | ||
|
|
97d3b6c7db | ||
|
|
28e1e34407 | ||
|
|
5a0731587a | ||
|
|
4577acae71 | ||
|
|
f9fee9103b | ||
|
|
6c12829cd4 | ||
|
|
a9399030f4 | ||
|
|
e6e49091b6 | ||
|
|
3ce1589681 | ||
|
|
42ac0d577d | ||
|
|
37c0de5d7d | ||
|
|
7b18ce10fe | ||
|
|
89c8a7f907 | ||
|
|
3de2e625b5 | ||
|
|
8c8be6461c | ||
|
|
292d76b39e | ||
|
|
294282c7ca | ||
|
|
0a543d0e95 | ||
|
|
48f2e2744c | ||
|
|
e408049bae | ||
|
|
d053742ca4 | ||
|
|
59edf50c02 | ||
|
|
fea1b9cf82 | ||
|
|
f72f4aa359 | ||
|
|
e32019882e | ||
|
|
63c7d14638 | ||
|
|
6ab43e4582 | ||
|
|
ec32099d2f | ||
|
|
66c4b9d05a | ||
|
|
fead2b25be | ||
|
|
3c56c0e4b7 | ||
|
|
c63442732b | ||
|
|
4d5c915144 | ||
|
|
323fcad8a7 | ||
|
|
31818bb67a | ||
|
|
6bd0ea7a02 | ||
|
|
53f460ca7d | ||
|
|
79de2ad571 | ||
|
|
17f18e795f | ||
|
|
ca33283930 | ||
|
|
262d1a1c95 | ||
|
|
9da8a188fa | ||
|
|
c35d449d7e | ||
|
|
9b7a38ac52 | ||
|
|
948feeb11f | ||
|
|
740164fbd0 | ||
|
|
5abb748c3e | ||
|
|
ff3555cf1d | ||
|
|
89a2e427f3 | ||
|
|
ff25afb88e | ||
|
|
55b917f24b | ||
|
|
a008f9ba79 | ||
|
|
1c0b826d23 | ||
|
|
59b47847d7 | ||
|
|
486e68b8be | ||
|
|
b640df5bdd | ||
|
|
9abbd30790 | ||
|
|
cf28d7df32 | ||
|
|
f404fdcf8a | ||
|
|
08062e67ca | ||
|
|
8967a510c9 | ||
|
|
e56a1f3e2d | ||
|
|
b1e6eaad61 | ||
|
|
b9cbf08b51 | ||
|
|
aeb4867bdf | ||
|
|
5f52bb59dd | ||
|
|
a0b8676f61 | ||
|
|
5e0daccf76 | ||
|
|
7a4951f211 | ||
|
|
d8c5bc4320 | ||
|
|
5303a36ff4 | ||
|
|
e70f115b48 | ||
|
|
8388f1e7ba | ||
|
|
f623d563b1 | ||
|
|
0fd1e0963e | ||
|
|
026334a71a | ||
|
|
83ec0f3d90 | ||
|
|
ed2b8ea1de | ||
|
|
be72cee6be | ||
|
|
ff877d6e91 | ||
|
|
b0846908da | ||
|
|
428e432732 | ||
|
|
ff6f0825b8 | ||
|
|
713ddb5f62 | ||
|
|
1806866bf5 | ||
|
|
696cb0fa05 | ||
|
|
cf948603cf | ||
|
|
426cc683eb | ||
|
|
027f23bc47 | ||
|
|
6833fdd731 | ||
|
|
4a3bcfa202 | ||
|
|
f3bb4776e4 | ||
|
|
c2acaa2fc8 | ||
|
|
4c34781b15 | ||
|
|
a3202ccb2d | ||
|
|
ca43f938bd | ||
|
|
b3a3b8beab | ||
|
|
cdc1248794 | ||
|
|
adc7155fe9 | ||
|
|
e247867abf | ||
|
|
aa6c199e98 | ||
|
|
932dcd9666 | ||
|
|
103cf0eba5 | ||
|
|
ff4a409e27 | ||
|
|
b02f81505b | ||
|
|
ec86152396 | ||
|
|
cdcc4e7314 | ||
|
|
d206b1c403 | ||
|
|
7a18ceab64 | ||
|
|
ea3dffe78d | ||
|
|
fd1c26408b | ||
|
|
7dc0c1d05c | ||
|
|
a7cf698d09 | ||
|
|
91049445dd | ||
|
|
6ae91592d1 | ||
|
|
22cc658dca | ||
|
|
10c6a4f8dc | ||
|
|
9c4573fd80 | ||
|
|
a48828e7a3 | ||
|
|
e0a3420cd9 | ||
|
|
1a64af2743 | ||
|
|
53ae657cc9 | ||
|
|
e0b670f229 | ||
|
|
36be50993e | ||
|
|
73fe22be79 | ||
|
|
9dc27c44e6 | ||
|
|
8b236e7bc8 | ||
|
|
83b207e7da | ||
|
|
fbd2f969a2 | ||
|
|
42220b1cb2 | ||
|
|
1c705cf9be | ||
|
|
2a86afc64c | ||
|
|
9ff015e73c | ||
|
|
3515e74204 | ||
|
|
9fd949335b | ||
|
|
9d307cf9ba | ||
|
|
c53c966222 | ||
|
|
895feeb4ad | ||
|
|
9e231641f2 | ||
|
|
ec1678abdc | ||
|
|
a8724b9764 | ||
|
|
af2fc30b95 | ||
|
|
0a7d9a69f7 | ||
|
|
25b6a0a1cf | ||
|
|
287f8d12de | ||
|
|
014ae2ea3f | ||
|
|
6814ad9e95 | ||
|
|
9c61670c9f | ||
|
|
3841bc5253 | ||
|
|
e987b3074d | ||
|
|
a562e73d34 | ||
|
|
81e2657bed | ||
|
|
706019d639 | ||
|
|
33aea87dea | ||
|
|
18a7e85c6a | ||
|
|
d1a9406bff | ||
|
|
98184e5835 | ||
|
|
622e8b7d21 | ||
|
|
67bc0c23ef | ||
|
|
34e409f313 | ||
|
|
5c34c10d4e | ||
|
|
64af035ce9 | ||
|
|
acc26744e3 | ||
|
|
94d6b85d72 | ||
|
|
628b37dc4d | ||
|
|
ff9daec5ec | ||
|
|
d5e6786bc7 | ||
|
|
d2e00282e2 | ||
|
|
5d9bcde50d | ||
|
|
046b56bab1 | ||
|
|
4021107124 | ||
|
|
8e18e0b536 | ||
|
|
213c9d683f | ||
|
|
b3413c85e3 | ||
|
|
8e1b0c459f | ||
|
|
4d95bc0365 | ||
|
|
ffcf7ccbf9 | ||
|
|
1d4e7e2642 | ||
|
|
181ed62ec2 | ||
|
|
cbea043ca1 | ||
|
|
45aa274a9e | ||
|
|
8ecdfb4298 | ||
|
|
c07053bce5 | ||
|
|
6eec5c3842 | ||
|
|
cc9d519fac | ||
|
|
3f0eee4c39 | ||
|
|
799b6d8f7c | ||
|
|
d9fba3a186 | ||
|
|
1fabf7f494 | ||
|
|
030a771b87 | ||
|
|
bb07d36963 | ||
|
|
a5af64b907 | ||
|
|
2e2fd34dde | ||
|
|
35997a07e7 | ||
|
|
4c64124588 | ||
|
|
953fb31e14 | ||
|
|
d7eb9f723f | ||
|
|
c752183199 | ||
|
|
adfef8e2bb | ||
|
|
cc0d467927 | ||
|
|
8f5a58a163 | ||
|
|
c42a90db8a | ||
|
|
b172cd6a16 | ||
|
|
822593d761 | ||
|
|
582c480611 | ||
|
|
4cfcda5d2f | ||
|
|
2480d08e0f | ||
|
|
cddb24bc50 | ||
|
|
5465842af0 | ||
|
|
14d29c7a92 | ||
|
|
d3f5e6e931 | ||
|
|
87d255ca91 | ||
|
|
2fca1033a0 | ||
|
|
be011a4f3d | ||
|
|
4ab06b4a2a | ||
|
|
0e6d8ed030 | ||
|
|
87487e6cdb | ||
|
|
9e078c0fa8 | ||
|
|
c2637be03f | ||
|
|
461849c276 | ||
|
|
a824d9dd59 | ||
|
|
7b96bf857c | ||
|
|
83bfdf9b3c | ||
|
|
7710d5e21c | ||
|
|
13bbaf9e4f | ||
|
|
77aae3c456 | ||
|
|
a737d1167c | ||
|
|
a954f22fe8 | ||
|
|
f828951fc4 | ||
|
|
bbaf2ac46d | ||
|
|
789c8e971f | ||
|
|
d3d666d773 | ||
|
|
d636b46460 | ||
|
|
2531385f1a | ||
|
|
081fab7466 | ||
|
|
a305c03238 | ||
|
|
6442854fb5 | ||
|
|
9d3654bd69 | ||
|
|
d2c3ab8844 | ||
|
|
d48a2ce870 | ||
|
|
8d74de09cc | ||
|
|
5dca51637c | ||
|
|
41508f7f67 | ||
|
|
02362d8aa4 | ||
|
|
500e59a3cf | ||
|
|
7db655c0c1 | ||
|
|
a483734190 | ||
|
|
ec56cb9d28 | ||
|
|
2ab5d2b647 | ||
|
|
749138791a | ||
|
|
6d881fa34e | ||
|
|
2a7b5a572f | ||
|
|
0c2a7e21c4 | ||
|
|
aa4f992e30 | ||
|
|
669a3a7673 | ||
|
|
c5e9aa6357 | ||
|
|
998c0cb7b3 | ||
|
|
e701da7390 | ||
|
|
19cd831225 | ||
|
|
56ac25155b | ||
|
|
94902e7aad | ||
|
|
c8666f0029 | ||
|
|
e770065277 | ||
|
|
8d33987f1c | ||
|
|
49fe54bc16 | ||
|
|
d93c701cf6 | ||
|
|
a8b3042b49 | ||
|
|
24ba9d8e8c | ||
|
|
af32e3c296 | ||
|
|
beb43c69dc | ||
|
|
bcf31d2317 | ||
|
|
b673a0d896 | ||
|
|
398675597a | ||
|
|
6bc5808c53 | ||
|
|
c38face9fc | ||
|
|
5219c25189 | ||
|
|
6122e3bb54 | ||
|
|
3a04f64545 | ||
|
|
5f911ed0d8 | ||
|
|
fc8eb888e4 | ||
|
|
d2ad900bc5 | ||
|
|
c5e856c4b8 | ||
|
|
1979ea53c7 | ||
|
|
16e28bb998 | ||
|
|
368d71b6ce | ||
|
|
8667af879c | ||
|
|
4bcf0637f9 | ||
|
|
5e98bf96bc | ||
|
|
201a27e4b3 | ||
|
|
ad871694cc | ||
|
|
bf62b9ccb7 | ||
|
|
1647fc54e1 | ||
|
|
0384f55de1 | ||
|
|
964c7b1d28 | ||
|
|
db5e181b4f | ||
|
|
abfc30db8b | ||
|
|
4925c6ce50 | ||
|
|
cc6ee1ddd2 | ||
|
|
80f897a513 | ||
|
|
b4fcb61d64 | ||
|
|
dd25bb0fff | ||
|
|
e17c50d304 | ||
|
|
d50e9f7fc2 | ||
|
|
0a3a90b400 | ||
|
|
4fc0f288c7 | ||
|
|
8ef3f232ab | ||
|
|
3d0078c73d | ||
|
|
51c7551d3f | ||
|
|
a62fc2fbff | ||
|
|
25be215180 | ||
|
|
0da2382c7d | ||
|
|
1d3be06cb5 | ||
|
|
ff095fc7c4 | ||
|
|
1904a64e42 | ||
|
|
8a76122949 | ||
|
|
ae82a4b279 | ||
|
|
3c52139ce5 | ||
|
|
794cbed57c | ||
|
|
5b09122676 | ||
|
|
19f96799df | ||
|
|
b100df3160 | ||
|
|
176ea5949b | ||
|
|
f79844e926 | ||
|
|
2d0f09144d | ||
|
|
e3a172e0e8 | ||
|
|
b519af280b | ||
|
|
64d9fd0a0b | ||
|
|
9002961e5d | ||
|
|
7e51a2f517 | ||
|
|
bb78d91d1b | ||
|
|
b086e1fd83 | ||
|
|
cc55c8db89 | ||
|
|
8875d8b741 | ||
|
|
af97ed78ef | ||
|
|
992dff64af | ||
|
|
b8ec021a07 | ||
|
|
406119d96c | ||
|
|
869b90121c | ||
|
|
bedfad002d | ||
|
|
9acc59d099 | ||
|
|
d13ee8db29 | ||
|
|
9817a9b20f | ||
|
|
56fb24c24a | ||
|
|
5d4bac85e5 | ||
|
|
545c76a411 | ||
|
|
e3e0e3db19 | ||
|
|
5fbb8b6204 | ||
|
|
1b11a6cd4b | ||
|
|
add5404f5e | ||
|
|
0b6b2e733a | ||
|
|
fc8d6d6e90 | ||
|
|
ffe2fea81c | ||
|
|
c80db7933c | ||
|
|
2b5514a944 | ||
|
|
61361dd2b8 | ||
|
|
01848e7d5b | ||
|
|
bc08512327 | ||
|
|
f64b572150 | ||
|
|
04d779c741 | ||
|
|
45a1dee9f1 | ||
|
|
f052ecffc0 | ||
|
|
9a6516a8b3 | ||
|
|
98c50afe8e | ||
|
|
94ca48674a | ||
|
|
d147b41d19 | ||
|
|
9ed3be335e | ||
|
|
ed1184fcf8 | ||
|
|
0203bbc7ef | ||
|
|
3765131d21 | ||
|
|
033ee23eba | ||
|
|
83e2ee04d1 | ||
|
|
6d1283f92d | ||
|
|
8459a45d72 | ||
|
|
4d9dfe7d04 | ||
|
|
2b00480605 | ||
|
|
a2a18d4b4a | ||
|
|
e2b00dda1b | ||
|
|
bfabcea6e9 | ||
|
|
05d3633cdf | ||
|
|
5a5da5f720 | ||
|
|
a87c07df93 | ||
|
|
d38d0ce805 | ||
|
|
04b1e26041 | ||
|
|
769f58970e | ||
|
|
9ac233f244 | ||
|
|
985546fff6 | ||
|
|
01a9a41bd9 | ||
|
|
0cb00c7b4f | ||
|
|
40e0175ee5 | ||
|
|
16bcb7d4a2 | ||
|
|
2de965d710 | ||
|
|
ab5d53f3b1 | ||
|
|
eb60b3892d | ||
|
|
703cefd9ae | ||
|
|
1bff94d0ea | ||
|
|
93f5fbc797 | ||
|
|
76a6feb2e7 | ||
|
|
ca8b5c68fd | ||
|
|
b128ba2f57 | ||
|
|
43022b7aa2 | ||
|
|
cbf5886430 | ||
|
|
d967d5046d | ||
|
|
3b95a416ca | ||
|
|
ec47a2aa66 | ||
|
|
b73aa6d000 | ||
|
|
b8f63adf41 | ||
|
|
7086719640 | ||
|
|
603ce21d24 | ||
|
|
0c9c57e608 | ||
|
|
18b77f15dd | ||
|
|
e1942d8c9e | ||
|
|
ad59380676 | ||
|
|
0f46f070ed | ||
|
|
1d0ac0f7dc | ||
|
|
71c962f51c | ||
|
|
7c729d5f0e | ||
|
|
317a17337d | ||
|
|
9a317f3ba6 | ||
|
|
5625fe0969 | ||
|
|
72f819ec67 | ||
|
|
e58b9c767b | ||
|
|
71a4b20d90 | ||
|
|
af1e9210b9 | ||
|
|
fe0577be5f | ||
|
|
37082a955b | ||
|
|
92741680b5 | ||
|
|
bbef9acaf6 | ||
|
|
f48a3c7dcb | ||
|
|
a84118823e | ||
|
|
78757564c8 | ||
|
|
41a3345101 | ||
|
|
6b6efd1c4d | ||
|
|
d53f2b69f2 | ||
|
|
5c04f1aa2e | ||
|
|
2de89dcaaf | ||
|
|
f2cc897f2f | ||
|
|
56e2c9db97 | ||
|
|
8ca8cb9409 | ||
|
|
0d518a5cb6 | ||
|
|
0f53fc8511 | ||
|
|
d7307fd334 | ||
|
|
ee1f97d124 | ||
|
|
09e2c0eac0 | ||
|
|
f873ab5374 | ||
|
|
8bcd1e4e60 | ||
|
|
e455114441 | ||
|
|
306b184e11 | ||
|
|
c8ef4733d0 | ||
|
|
71647c886d | ||
|
|
3583b094d0 | ||
|
|
da927f4897 | ||
|
|
f771d3a4bb | ||
|
|
d4fdd4601e | ||
|
|
b12c1f8740 | ||
|
|
ef91207669 | ||
|
|
d45072fae5 | ||
|
|
ff4c5392d6 | ||
|
|
485265979e | ||
|
|
88a443f73d | ||
|
|
2d27a97b8c | ||
|
|
06d454473c | ||
|
|
ae5254e8a9 | ||
|
|
1e94c3bd81 | ||
|
|
6179b216c5 | ||
|
|
76f581289c | ||
|
|
7bd0d55c83 | ||
|
|
084203debc | ||
|
|
b34078c6d2 | ||
|
|
b6765e00eb | ||
|
|
2567ed5784 | ||
|
|
3cffcc8f5b | ||
|
|
b4e5717bde | ||
|
|
9a7859c5cb | ||
|
|
e1fa1b0396 | ||
|
|
c2b23465cc | ||
|
|
271b6d91fc | ||
|
|
3766fa7f0b | ||
|
|
626681c5ba | ||
|
|
9c9fb293da | ||
|
|
2bc60c9142 | ||
|
|
0f11033989 | ||
|
|
c0c4524ec3 | ||
|
|
8b7ce2c276 | ||
|
|
5e4d3cc535 | ||
|
|
f6e7221359 | ||
|
|
d7ad375232 | ||
|
|
9c418188ee | ||
|
|
b69af1341b | ||
|
|
233652c3f1 | ||
|
|
923f2fc7c4 | ||
|
|
f5793e9a7a | ||
|
|
f96653e9af | ||
|
|
8c24d28740 | ||
|
|
d1c94ac73d | ||
|
|
fa6b77b42c | ||
|
|
4c6e7d4f4f | ||
|
|
53887c32bf | ||
|
|
060d7ba46b | ||
|
|
5877b49f64 | ||
|
|
352eb15dc7 | ||
|
|
66a1123268 | ||
|
|
95312f2d14 | ||
|
|
6145dc76fc | ||
|
|
526ee51485 | ||
|
|
1dab98c6a0 | ||
|
|
7e46e46080 | ||
|
|
81b0d1138b | ||
|
|
81f52a82c8 | ||
|
|
a7fd7d67b3 | ||
|
|
96c360e728 | ||
|
|
3e3f06c55d | ||
|
|
1745aaaa0a | ||
|
|
c67ed7d7d2 | ||
|
|
f6d8f9f5c5 | ||
|
|
a4c12555cb | ||
|
|
8d1868305d | ||
|
|
2cdee919c1 | ||
|
|
3f8c36789f | ||
|
|
631a08189a | ||
|
|
4808df5e95 | ||
|
|
4585597388 | ||
|
|
8f73956d1e | ||
|
|
8f2bda2309 | ||
|
|
9dde195af4 | ||
|
|
9468c80a78 | ||
|
|
1fecf70123 | ||
|
|
a11f42b3e0 | ||
|
|
683528b81c | ||
|
|
02b0f35442 | ||
|
|
1a5e60c44f | ||
|
|
a16e3523bd | ||
|
|
50c930f5fa | ||
|
|
9cdcad7a88 | ||
|
|
59f5c0d955 | ||
|
|
64e6700228 | ||
|
|
7414394ceb | ||
|
|
8b62cd1f04 | ||
|
|
239e3bb6f1 | ||
|
|
b283c0ba18 | ||
|
|
e59471d87d | ||
|
|
6bebce7015 | ||
|
|
eb65ab6b4b | ||
|
|
3a69d50458 | ||
|
|
9c45a62b53 | ||
|
|
ed59584fe4 | ||
|
|
bf7de8e7a5 | ||
|
|
9c745db413 | ||
|
|
7d0ed90796 | ||
|
|
b0681f55e9 | ||
|
|
86b30b3c83 | ||
|
|
b92e2fcfc9 | ||
|
|
b1f6664292 | ||
|
|
cb635f6706 | ||
|
|
e46468321d | ||
|
|
4ad2fbf7bb | ||
|
|
64e1e004ae | ||
|
|
524626b895 | ||
|
|
b804f7db03 | ||
|
|
d4657dcd32 | ||
|
|
f905dc07cf | ||
|
|
76dd163f0e | ||
|
|
659009c1de | ||
|
|
35fb3bb38f | ||
|
|
6da3a07bc0 | ||
|
|
65da59c7f6 | ||
|
|
c16837538e | ||
|
|
3e0d8d1920 | ||
|
|
b743b21840 | ||
|
|
36eea6bdda | ||
|
|
45adff6087 | ||
|
|
837e3e5e83 | ||
|
|
23869cd61f | ||
|
|
e95eb14651 | ||
|
|
2556771c32 | ||
|
|
1b9d219988 | ||
|
|
ceb29547e2 | ||
|
|
95f63f6af8 | ||
|
|
74f7fee8b5 | ||
|
|
d90b2621da | ||
|
|
93bc1f3c57 | ||
|
|
41ceda01d0 | ||
|
|
e8f0454b39 | ||
|
|
f97e294c80 | ||
|
|
4e3783c544 | ||
|
|
2adca6bbc4 | ||
|
|
7e1e068370 | ||
|
|
99c7a50fd6 | ||
|
|
3297546e0a | ||
|
|
48336fd7f4 | ||
|
|
fbf7b4aec3 | ||
|
|
db7d72cca8 | ||
|
|
3381516013 | ||
|
|
628e609e6a | ||
|
|
5c1493bd7e | ||
|
|
725726f083 | ||
|
|
ea3203f466 | ||
|
|
f615ef30f9 | ||
|
|
fd1f71587f | ||
|
|
e1c5a06bf0 | ||
|
|
3bc373fff0 | ||
|
|
20bc17eb6f | ||
|
|
4a17ad312f | ||
|
|
7066841467 | ||
|
|
c0c9543323 | ||
|
|
4c50940634 | ||
|
|
f7836b67af | ||
|
|
e3225b6565 | ||
|
|
0bbe35a7f6 | ||
|
|
662d0d5699 | ||
|
|
8f72beb9d6 | ||
|
|
b507eb8857 | ||
|
|
aaab5c51a7 | ||
|
|
955bb22cd1 | ||
|
|
37b19e0be2 | ||
|
|
a5ad956088 | ||
|
|
1e1e1f027a | ||
|
|
2c013c9f0f | ||
|
|
c5ca45c461 | ||
|
|
04fa7dee68 | ||
|
|
efe613d13e | ||
|
|
befd4b1fa8 | ||
|
|
6d26d5833f | ||
|
|
345cfd7c60 | ||
|
|
c956f730e9 | ||
|
|
5f81d2b4b1 | ||
|
|
8f020c1ee6 | ||
|
|
4f7bcc2919 | ||
|
|
50b1ba5c80 | ||
|
|
11cfea3860 | ||
|
|
5e0dfff42a | ||
|
|
53bd2c2dc6 | ||
|
|
6820b85902 | ||
|
|
b36004b702 | ||
|
|
6465dc951c | ||
|
|
2d8aff6ca0 | ||
|
|
fbe7b56054 | ||
|
|
cb05d2924f | ||
|
|
ae0624ae8a | ||
|
|
44f9ba4a57 | ||
|
|
7686c33cbd | ||
|
|
ca8e14455f | ||
|
|
31be1ae026 | ||
|
|
598ff0eecd | ||
|
|
2906cde6d2 | ||
|
|
1135821870 | ||
|
|
5ebc9d7d2e | ||
|
|
227a4dd8d0 | ||
|
|
7360533bc8 | ||
|
|
64ffed0ddb | ||
|
|
4c2e309bdc | ||
|
|
c56fe813a5 | ||
|
|
7b66777600 | ||
|
|
a0c85431dc | ||
|
|
38f642d361 | ||
|
|
bd799ea51a | ||
|
|
7c61017f57 | ||
|
|
6e2ee9a21f | ||
|
|
a86a8c6a34 | ||
|
|
f725cc2307 | ||
|
|
1bee39a67e | ||
|
|
7d91cca14d | ||
|
|
5677b1e5f8 | ||
|
|
0795b22ae6 | ||
|
|
3d1a9624c1 | ||
|
|
4f9eaf850d | ||
|
|
25b89f7624 | ||
|
|
c5ca394cec | ||
|
|
faff8d1fb3 | ||
|
|
ab8e9a8ea5 | ||
|
|
f28e8126af | ||
|
|
d336cade85 | ||
|
|
e5ef6a7b21 | ||
|
|
9470c68c18 | ||
|
|
828235dd9b | ||
|
|
1ac13a2788 | ||
|
|
58e4f766d8 | ||
|
|
9c30d983bd | ||
|
|
74e3f976c1 | ||
|
|
131ff4de48 | ||
|
|
7b0a6e7377 | ||
|
|
0b7bde2775 | ||
|
|
86a3696ab4 | ||
|
|
3a4ff2677e | ||
|
|
7d979fb196 | ||
|
|
a91762fb30 | ||
|
|
0c823455a0 | ||
|
|
bf974e73ce | ||
|
|
9dfa5ea77d | ||
|
|
c2f1a7bdc5 | ||
|
|
efa971edb4 | ||
|
|
0747329575 | ||
|
|
70be075dcd | ||
|
|
b5b9ee46a1 | ||
|
|
bf8e569bde | ||
|
|
b38847680b | ||
|
|
3b35398925 | ||
|
|
7c6d34408c | ||
|
|
ce5f63291e | ||
|
|
8ce7ccb031 | ||
|
|
8f8adcf71b | ||
|
|
953a9d7fd1 | ||
|
|
56a4263a5c | ||
|
|
4fff26c571 | ||
|
|
cc5cfa0997 | ||
|
|
74719f2805 | ||
|
|
b397ba7787 | ||
|
|
c4d61f5a55 | ||
|
|
38278c179e | ||
|
|
ae7059aec1 | ||
|
|
5809710149 | ||
|
|
07527ba69b | ||
|
|
20c23ff6d8 | ||
|
|
0d9757d438 | ||
|
|
0133b750ee | ||
|
|
fe416c838b | ||
|
|
143ae19b8d | ||
|
|
b2b14051c3 | ||
|
|
e6821a610b | ||
|
|
74c620e478 | ||
|
|
cb052f1988 | ||
|
|
931a399890 | ||
|
|
02e799c917 | ||
|
|
0957670d4e | ||
|
|
08e00ccebc | ||
|
|
38b69c91a1 | ||
|
|
63c9aaea35 | ||
|
|
7f2ff5af5c | ||
|
|
7ecc0169df | ||
|
|
903b300b9e | ||
|
|
9f992a9e5d | ||
|
|
d548a5bc50 | ||
|
|
826d2d913c | ||
|
|
04d0ab4adf | ||
|
|
0b4a874f30 | ||
|
|
473afd950c | ||
|
|
7f2e87b27d | ||
|
|
2f37f0ca51 | ||
|
|
1711834229 | ||
|
|
9e0998c4d5 | ||
|
|
ba027e992e | ||
|
|
e7dc6df723 | ||
|
|
74e794b416 | ||
|
|
3299b0c1b0 | ||
|
|
08880ebd2e | ||
|
|
ed90045deb | ||
|
|
609c41154f | ||
|
|
7b6469bd35 | ||
|
|
dfb66b427c | ||
|
|
39bfb575da | ||
|
|
901e3ede39 | ||
|
|
e89f205aa6 | ||
|
|
dccd4f0bba | ||
|
|
99c6b171e4 | ||
|
|
0f5d4cd7b7 | ||
|
|
e256f734df | ||
|
|
9ed2506062 | ||
|
|
adf4634459 | ||
|
|
2dbd09530e | ||
|
|
d8ecbcf293 | ||
|
|
3ad0862c59 | ||
|
|
1b7dce124b | ||
|
|
24c0816042 | ||
|
|
9d6098ddf2 | ||
|
|
4d6b019949 | ||
|
|
cee65fbf9a | ||
|
|
f9707a8bf5 | ||
|
|
1af431dcc2 | ||
|
|
4033bf3748 | ||
|
|
0f5a97fa6e | ||
|
|
8eeb12b600 | ||
|
|
69069e9af3 | ||
|
|
83660ec9ed | ||
|
|
6b9ae466c2 | ||
|
|
5ce3c4a5c8 | ||
|
|
f8df935404 | ||
|
|
ffc1c6c3b7 | ||
|
|
dd4849070a | ||
|
|
44b2f49839 | ||
|
|
0cd67b15cb | ||
|
|
448ede53c6 | ||
|
|
cbd29cf45b | ||
|
|
3414de9ab2 | ||
|
|
30dc805cf6 | ||
|
|
ce8e6b47c1 | ||
|
|
aca97d9f57 | ||
|
|
b539637426 | ||
|
|
b1221d5517 | ||
|
|
5a8c916bc0 | ||
|
|
677221cd9c | ||
|
|
d2efee5943 | ||
|
|
0010935707 | ||
|
|
6fb4df67a9 | ||
|
|
0fa4609220 | ||
|
|
1cdbb9a643 | ||
|
|
e90b3dad01 | ||
|
|
e61a1045f5 | ||
|
|
b89e306df0 | ||
|
|
f002b11106 | ||
|
|
bc4e8a3c82 | ||
|
|
76a4dee451 | ||
|
|
f62c20d0b9 | ||
|
|
ccd28101d6 | ||
|
|
4ca60e07b2 | ||
|
|
6d1926bb63 | ||
|
|
1141aeb524 | ||
|
|
9fec812366 | ||
|
|
a811841735 | ||
|
|
a2307c230a | ||
|
|
7b5fd9bfea | ||
|
|
a7ee4e5909 | ||
|
|
9cc2985d13 | ||
|
|
19beb62f81 | ||
|
|
28be10a1b5 | ||
|
|
444a364a8d | ||
|
|
4a195e7ef6 | ||
|
|
ad64491a98 | ||
|
|
7a2716bf77 | ||
|
|
64c419e6f8 | ||
|
|
23aac4f580 | ||
|
|
b4b658c59d | ||
|
|
4d727015fd | ||
|
|
78f0c9c4a5 | ||
|
|
c2d9219add | ||
|
|
fddcbbff67 | ||
|
|
aa5b1d50b9 | ||
|
|
21359c6c74 | ||
|
|
c38bf04f51 | ||
|
|
5f9ea22941 | ||
|
|
00e13b0811 | ||
|
|
b9e533e31a | ||
|
|
bc0b25d995 | ||
|
|
1a89c1f85f | ||
|
|
37d82d457c | ||
|
|
8f7b30075e | ||
|
|
47479e5e5c | ||
|
|
8fd3ddc4ae | ||
|
|
deab1bfaba | ||
|
|
04729f63b8 | ||
|
|
0ce3434631 | ||
|
|
094129e2be | ||
|
|
3e86ed5d21 | ||
|
|
41bcce09ce | ||
|
|
343c3ee49c | ||
|
|
12d6271b13 | ||
|
|
c65f60771a | ||
|
|
c983aae881 | ||
|
|
1013d7ccdd | ||
|
|
d945c6f843 | ||
|
|
dabe64a8df | ||
|
|
fbc3b1a318 | ||
|
|
6adc1bfd42 | ||
|
|
e7e4d5cf0a | ||
|
|
9f836f5433 | ||
|
|
e3807ec3d6 | ||
|
|
40fa1aff6b | ||
|
|
4787de6968 | ||
|
|
3f7e921cce | ||
|
|
4e414f57e6 | ||
|
|
c98fb887cc | ||
|
|
d2457f2a1d | ||
|
|
e38c38cd58 | ||
|
|
374c5e952f | ||
|
|
38e5ded821 | ||
|
|
85a1855928 | ||
|
|
44a5a3f2fc | ||
|
|
7fe1d89891 | ||
|
|
e43a87da09 | ||
|
|
55dc06de15 | ||
|
|
f61d22d58d | ||
|
|
fd92974902 | ||
|
|
ec64910e0c | ||
|
|
4ecd05e33b | ||
|
|
af6ff20020 | ||
|
|
ad862f4084 | ||
|
|
65a6c18263 | ||
|
|
7cc76c7d2d | ||
|
|
6528d086ba | ||
|
|
f56b4030f1 | ||
|
|
8b13f158ab | ||
|
|
920c27bb31 | ||
|
|
964eddf952 | ||
|
|
2786f7ac5a | ||
|
|
9dd957a2aa | ||
|
|
c1ad7d81f4 | ||
|
|
a4ef5ea48b | ||
|
|
44ab4648a8 | ||
|
|
19016c3733 | ||
|
|
e18ce2c9e3 | ||
|
|
0ceb2e2767 | ||
|
|
191e2b6242 | ||
|
|
603d91be0e | ||
|
|
262dcdcf54 | ||
|
|
74be3a9f52 | ||
|
|
5c65766ece | ||
|
|
bae8a2bd5d | ||
|
|
6d0ed91d31 | ||
|
|
45179ccb8c | ||
|
|
ebee7a5b72 | ||
|
|
ae73f13812 | ||
|
|
e302a6199a | ||
|
|
e5e9981836 | ||
|
|
461c0abce1 | ||
|
|
02b83146be | ||
|
|
9754b0fe14 | ||
|
|
92a997b16a | ||
|
|
8cfdfd898d | ||
|
|
448b4c07c1 | ||
|
|
6d026b3e28 | ||
|
|
3a9a635419 | ||
|
|
6875d00e44 | ||
|
|
83e646c7d4 | ||
|
|
d0d194b60d | ||
|
|
c8109beaa7 | ||
|
|
42d2a18b91 | ||
|
|
1e59ec74e1 | ||
|
|
701e6f86f5 | ||
|
|
da5545ff57 | ||
|
|
fea44c07c7 | ||
|
|
e539bc2ae7 | ||
|
|
9bdca4b409 | ||
|
|
40027dd502 | ||
|
|
bd545fd5b2 | ||
|
|
441a3d4533 | ||
|
|
3f939dfc11 | ||
|
|
837925a47c | ||
|
|
4dc7f24b5f | ||
|
|
9ec8d05a64 | ||
|
|
4ee9a95360 | ||
|
|
3a87e05f80 | ||
|
|
f24348b2b0 | ||
|
|
91a288c2bb | ||
|
|
fd53e4f5f9 | ||
|
|
e327066523 | ||
|
|
2121adb7fb | ||
|
|
18c2faf7a9 | ||
|
|
48dc4bacc4 | ||
|
|
950809ee55 | ||
|
|
c7a49490a2 | ||
|
|
f8cb62180e | ||
|
|
dfdaf7f6d1 | ||
|
|
9c0c046a38 | ||
|
|
5ae1036a24 | ||
|
|
36c9eb3dfd | ||
|
|
fe096116be | ||
|
|
e30cbe2579 | ||
|
|
c6424e3897 | ||
|
|
0f9b9b9dcf | ||
|
|
6b613fdf36 | ||
|
|
9d804d2857 | ||
|
|
b14285cdbf | ||
|
|
1438eb6364 | ||
|
|
976faa5e2f | ||
|
|
2c02e6fc23 | ||
|
|
61b440261f | ||
|
|
fbd10ef4b6 | ||
|
|
abe5303448 | ||
|
|
bef692d431 | ||
|
|
7c18ddfe7d | ||
|
|
9a0d92469b | ||
|
|
bce7e8346d | ||
|
|
3dcee71a92 | ||
|
|
d644b4f94e | ||
|
|
3a30f27153 | ||
|
|
19984d6563 | ||
|
|
43176a8c6f | ||
|
|
849a1b1a89 | ||
|
|
b921a55c46 | ||
|
|
b0abc4048e | ||
|
|
a55ac2fdd1 | ||
|
|
3afeb8ca46 | ||
|
|
a701e8c766 | ||
|
|
246bb01736 | ||
|
|
cc91e5da94 | ||
|
|
5b99646798 | ||
|
|
a5b79564ff | ||
|
|
3d5d507f4b | ||
|
|
e1020aefdd | ||
|
|
cc38bc132e | ||
|
|
053519aef6 | ||
|
|
1408bad8ba | ||
|
|
33cc2a7514 | ||
|
|
d6a754e850 | ||
|
|
fc05ef49ce | ||
|
|
b36a290b54 | ||
|
|
0ca7dbccf6 | ||
|
|
e67bad3461 | ||
|
|
e2e5a8208c | ||
|
|
a47cbbe26c | ||
|
|
59707fc8af | ||
|
|
25ace94d10 | ||
|
|
ca4d5d0ca4 | ||
|
|
600690a789 | ||
|
|
77931d2315 | ||
|
|
8bf178b0a3 | ||
|
|
d4bf7164f9 | ||
|
|
7468ca36ae | ||
|
|
572b5a126a | ||
|
|
36e5708464 | ||
|
|
d4697e8f1c | ||
|
|
9479f0e632 | ||
|
|
aff84103d9 | ||
|
|
a61a9e5b8f | ||
|
|
eb8168285e | ||
|
|
1ed4d0f95e | ||
|
|
31849ea95f | ||
|
|
d7f5e13cdd | ||
|
|
33aeacd8d1 | ||
|
|
f3bf068066 | ||
|
|
719f8c8fd2 | ||
|
|
fa8b3edda5 | ||
|
|
f71e2e8040 | ||
|
|
39992a817d | ||
|
|
7b85253465 | ||
|
|
35b1e1d0d2 | ||
|
|
711ea3bfa1 | ||
|
|
8eb6f8061d | ||
|
|
2c4ed4d115 | ||
|
|
fc233ed993 | ||
|
|
1d8810775c | ||
|
|
d28e249673 | ||
|
|
c7cd57db91 | ||
|
|
d2a7f7fffe | ||
|
|
27b6e07e21 | ||
|
|
a2f5e6ad8f | ||
|
|
ea0d3eb812 | ||
|
|
9de1489322 | ||
|
|
9e3165c0ff | ||
|
|
0f92f54452 | ||
|
|
b8072bd630 | ||
|
|
c13b1b60e3 | ||
|
|
a908ef7c61 | ||
|
|
5b411caabe | ||
|
|
7f3c3fa6f9 | ||
|
|
476d7c5fc9 | ||
|
|
1377244e52 | ||
|
|
173cb60691 | ||
|
|
2aac87569b | ||
|
|
fa21e25cb2 | ||
|
|
8a21d9b500 | ||
|
|
8b7b63868f | ||
|
|
96ce298789 | ||
|
|
6c692df118 | ||
|
|
9ace229152 | ||
|
|
5b9383c880 | ||
|
|
9fd9ca2673 | ||
|
|
72e5d4b426 | ||
|
|
ac6c6fbf97 | ||
|
|
a726635290 | ||
|
|
ca40add29b | ||
|
|
2ced82c7b3 | ||
|
|
d81960a6eb | ||
|
|
f23b0702f2 | ||
|
|
a92c1b43a2 | ||
|
|
9796f50362 | ||
|
|
d65930a8a6 | ||
|
|
a92bad7909 | ||
|
|
5467b5e085 | ||
|
|
ca32828281 | ||
|
|
7787def660 | ||
|
|
dce5038ffd | ||
|
|
1ed6272e7b | ||
|
|
ab424b27d1 | ||
|
|
a693014371 | ||
|
|
bfb65e82aa | ||
|
|
4bbc811aed | ||
|
|
d2d819529d | ||
|
|
ea706be7fc | ||
|
|
400896c563 | ||
|
|
d4280c896d | ||
|
|
02edea9bd7 | ||
|
|
2932ef770d | ||
|
|
7eaa3179ad | ||
|
|
40b8da8223 | ||
|
|
17ad46fe9d | ||
|
|
8faec3e0e9 | ||
|
|
7d5668141d | ||
|
|
e77f933fe7 | ||
|
|
69109a19db | ||
|
|
1ec1db1ecb | ||
|
|
038fd6ce21 | ||
|
|
65af8bcc5a | ||
|
|
1dfc5f4c0c | ||
|
|
c05a8663cc | ||
|
|
235b6d285c | ||
|
|
44e1a405f0 | ||
|
|
aaa8ab3856 | ||
|
|
5f9bb1c160 | ||
|
|
357a020828 | ||
|
|
5e0c113c7b | ||
|
|
8056e7e3e3 | ||
|
|
1a25fdffbb | ||
|
|
1632e5287a | ||
|
|
381f5edbd5 | ||
|
|
031167fbea | ||
|
|
3da85f415d | ||
|
|
8ac38a076b | ||
|
|
c80ea7ae89 | ||
|
|
1b6ab6b3bb | ||
|
|
aa8854db53 | ||
|
|
c57fc74e18 | ||
|
|
28892bb07f | ||
|
|
82935ad3be | ||
|
|
332351efaf | ||
|
|
d753719891 | ||
|
|
77d0409c5b | ||
|
|
7d07770244 | ||
|
|
24399daefe | ||
|
|
08706ba6b2 | ||
|
|
787a441343 | ||
|
|
c4db223a64 | ||
|
|
31c7f3eaba | ||
|
|
be69470d55 | ||
|
|
7b6101bc6d | ||
|
|
1569be7866 | ||
|
|
2265ffc0a7 | ||
|
|
d616cb88aa | ||
|
|
15ecf5d821 | ||
|
|
dc8ab7cd2a | ||
|
|
48a5143485 | ||
|
|
f6a9af0aa4 | ||
|
|
483e2ca8d0 | ||
|
|
d983225683 | ||
|
|
d8d88b948a | ||
|
|
31339737a6 | ||
|
|
2494c7d3ed | ||
|
|
2320370fd2 | ||
|
|
9d2f3b5ee9 | ||
|
|
294bf27985 | ||
|
|
3d8754cd3c | ||
|
|
0228d16990 | ||
|
|
c32a325c11 | ||
|
|
d28f8bc7ee | ||
|
|
a6dce27ffa | ||
|
|
6d08d9aa9f | ||
|
|
8125320093 | ||
|
|
ecaaa8a1b5 | ||
|
|
b9bc628189 | ||
|
|
0e6794f2f5 | ||
|
|
9179b7464b | ||
|
|
15a494c189 | ||
|
|
19f0181756 | ||
|
|
8d681d68d7 | ||
|
|
25c98f8054 | ||
|
|
78c8fbbe00 | ||
|
|
f192be3667 | ||
|
|
05ce3445b5 | ||
|
|
a1aa080956 | ||
|
|
a8c8ea69e3 | ||
|
|
fc86faf51e | ||
|
|
f538546c4d | ||
|
|
71d7b14320 | ||
|
|
7330b3520f | ||
|
|
6b100b60f8 | ||
|
|
08009f8edc | ||
|
|
b60bd73f88 | ||
|
|
af230c812b | ||
|
|
5f104b0e0e | ||
|
|
9bf0d0ace0 | ||
|
|
56a17f7c8e | ||
|
|
522a92586a | ||
|
|
c142296f3f | ||
|
|
d27b4831d6 | ||
|
|
7aa213a5ce | ||
|
|
44e770aa0b | ||
|
|
99c99a9ce9 | ||
|
|
346ee6ba5f | ||
|
|
32e97b6422 | ||
|
|
f1c04096e5 | ||
|
|
89d40d38d9 | ||
|
|
460c66ab3f | ||
|
|
15c99ec9e7 | ||
|
|
4a0a4941af | ||
|
|
dbf78bf214 | ||
|
|
02ed2289e6 | ||
|
|
55e7e481d4 | ||
|
|
f874276d0f | ||
|
|
1585e6b424 | ||
|
|
103393fee6 | ||
|
|
eeff75ba20 | ||
|
|
f7b8969c72 | ||
|
|
74cec6594e | ||
|
|
af27af8d42 | ||
|
|
73e1cbc0b9 | ||
|
|
d62fba024b | ||
|
|
ae49b556ce | ||
|
|
2a76027cce | ||
|
|
c8026873b4 | ||
|
|
7ffe71d12f | ||
|
|
c02705c53c | ||
|
|
2074534b72 | ||
|
|
27e446a0b0 | ||
|
|
c35c72c551 | ||
|
|
4bfffa3806 | ||
|
|
42eac6f846 | ||
|
|
261cec1d20 | ||
|
|
725d9b4bbf | ||
|
|
b7105093e2 | ||
|
|
9274df0f11 | ||
|
|
351cb3e6ca | ||
|
|
bb5e2b98e9 | ||
|
|
e3992527fb | ||
|
|
1b7a77f5cb | ||
|
|
1ce6c2aee1 | ||
|
|
314fcabbeb | ||
|
|
f742c5eb8a | ||
|
|
0ddd053e88 | ||
|
|
169d8fa480 | ||
|
|
9bfef1f6e5 | ||
|
|
08f2121544 | ||
|
|
40879a5784 | ||
|
|
977d148c40 | ||
|
|
1f430227aa | ||
|
|
8dac933a66 | ||
|
|
1e07ef13cf | ||
|
|
af0a24a5bc | ||
|
|
56ef085412 | ||
|
|
bcab0e3754 | ||
|
|
10d8135dcc | ||
|
|
6021e07761 | ||
|
|
f6ac0d5877 | ||
|
|
1810d810d8 | ||
|
|
0998ddefa2 | ||
|
|
82ca5145c2 | ||
|
|
377fe80046 | ||
|
|
eb48765a5a | ||
|
|
09db3ddd5c | ||
|
|
39765903d4 | ||
|
|
d9cfbf592e | ||
|
|
6d18842dd3 | ||
|
|
438d591d5b | ||
|
|
c474ca2c5f | ||
|
|
be04bea2b6 | ||
|
|
5db72a6916 | ||
|
|
453f26817a | ||
|
|
51c11a21fa | ||
|
|
cd9e37bac5 | ||
|
|
3d7450b308 | ||
|
|
48176ea986 | ||
|
|
621426ac55 | ||
|
|
5d8eeba0dd | ||
|
|
6fe83d1f06 | ||
|
|
a06f78b2d5 | ||
|
|
5c1ce23780 | ||
|
|
47855eae0b | ||
|
|
5dd1ada8dd | ||
|
|
c94fc73c11 | ||
|
|
d846ae64ea | ||
|
|
f16b18371e | ||
|
|
4b8e655948 | ||
|
|
79e1b0c5d8 | ||
|
|
de3f3e6e61 | ||
|
|
793dbc6e7f | ||
|
|
d1e823bf39 | ||
|
|
873deaa92d | ||
|
|
78ac1ee69c | ||
|
|
5a27961102 | ||
|
|
3786954a65 | ||
|
|
bd5536dbf9 | ||
|
|
6b9e8c3039 | ||
|
|
9d33b03be9 | ||
|
|
351928a1e0 | ||
|
|
b20558cb99 | ||
|
|
764677431f | ||
|
|
a10b0c7786 | ||
|
|
a72bae9e2f | ||
|
|
f91908f627 | ||
|
|
c5ad2c03a2 | ||
|
|
6decb4cb4a | ||
|
|
1ad59057d8 | ||
|
|
cfb20048bb | ||
|
|
92539589d8 | ||
|
|
b8739baef4 | ||
|
|
fcfe7fae54 | ||
|
|
a2c1aa2c4c | ||
|
|
a9ff5c799e | ||
|
|
173517985e | ||
|
|
87c86beb38 | ||
|
|
d13d2c6dda | ||
|
|
620e3a803d | ||
|
|
4e0bd557d9 | ||
|
|
7deda52bd9 | ||
|
|
22f20a38ec | ||
|
|
b764046587 | ||
|
|
d38f520805 | ||
|
|
56e2af9efc | ||
|
|
51d73b1672 | ||
|
|
092f830c3c | ||
|
|
b30a42ab9e | ||
|
|
c543930ac4 | ||
|
|
c6f9d447f7 | ||
|
|
737bc6a965 | ||
|
|
e39838455e | ||
|
|
94b40775a1 | ||
|
|
7efef73ff7 | ||
|
|
8bf1c96065 | ||
|
|
c7fd1ae535 | ||
|
|
008a458fe9 | ||
|
|
fbc6c30b62 | ||
|
|
c64eb3507c | ||
|
|
1b33c52eac | ||
|
|
accc941818 | ||
|
|
0c20466f2c | ||
|
|
c4cf6372e3 | ||
|
|
3e4b5fd0d7 | ||
|
|
3f3416c13e | ||
|
|
7798584e1c | ||
|
|
d59063d79f | ||
|
|
a6edfb498f | ||
|
|
ab04b30726 | ||
|
|
dc4f59e664 | ||
|
|
8738f6dd98 | ||
|
|
039766b492 | ||
|
|
2da970a26c | ||
|
|
86e1f33231 | ||
|
|
702fbac1c0 | ||
|
|
7483ddf2b2 | ||
|
|
78b041465e | ||
|
|
5e3aa305fd | ||
|
|
703478c13d | ||
|
|
8d53c10643 | ||
|
|
025c98ced8 | ||
|
|
8e214ca8fb | ||
|
|
23265061b2 | ||
|
|
9d985d3d8f | ||
|
|
03477d407e | ||
|
|
2dd88e5a4e | ||
|
|
2452d90300 | ||
|
|
508f97b08e | ||
|
|
3f67f512ec | ||
|
|
fdc3028124 | ||
|
|
3a3eea0320 | ||
|
|
d95a6f2af7 | ||
|
|
a3d3c74e67 | ||
|
|
c2db647379 | ||
|
|
6cc3423cbe | ||
|
|
eb658a75ab | ||
|
|
b2205fc6e1 | ||
|
|
5768ade198 | ||
|
|
b0727cc532 | ||
|
|
9e8af67202 | ||
|
|
69d0fbe419 | ||
|
|
7b050a4c31 | ||
|
|
96085213fe | ||
|
|
2ce2b457bf | ||
|
|
a2171aa27b | ||
|
|
ea3d71c0df | ||
|
|
b154be24ec | ||
|
|
3590c9172c | ||
|
|
e981868246 | ||
|
|
5ee8045916 | ||
|
|
36086722b3 | ||
|
|
8edd5946e5 | ||
|
|
a0b2a28ee2 | ||
|
|
39a845ad31 | ||
|
|
669bdc7e38 | ||
|
|
5d4c073730 | ||
|
|
48ca83f31d | ||
|
|
fff4060b31 | ||
|
|
9fdda038a9 | ||
|
|
ef67409d61 | ||
|
|
d90472014d | ||
|
|
a2b67b933e | ||
|
|
b98e881d84 | ||
|
|
e978621597 | ||
|
|
5fe52b9cfe | ||
|
|
5c6d00d545 | ||
|
|
6429a5b31a | ||
|
|
e68c8305a2 | ||
|
|
e095d382b3 | ||
|
|
25ada15546 | ||
|
|
5581f0909a | ||
|
|
462b86df8d | ||
|
|
6645625e6b | ||
|
|
cfb68d73a0 | ||
|
|
9574f43f87 | ||
|
|
a53be65ab0 | ||
|
|
cc989c5c08 | ||
|
|
313224e6f5 | ||
|
|
2adb29ffc0 | ||
|
|
80ccd62d38 | ||
|
|
b81ff45d34 | ||
|
|
81b78dd2b2 | ||
|
|
e2302a6c9b | ||
|
|
2486b79450 | ||
|
|
0b52ef6eb0 | ||
|
|
a533620684 | ||
|
|
09d8d0f362 | ||
|
|
4e067835c3 | ||
|
|
37278f2cd3 | ||
|
|
16d2a3096a | ||
|
|
083509eb97 | ||
|
|
0c154deeec | ||
|
|
082c9707c0 | ||
|
|
15798ee168 | ||
|
|
e37b7eae3f | ||
|
|
ae2d588f46 | ||
|
|
12d93d0805 | ||
|
|
2549688bdf | ||
|
|
c2ed799113 | ||
|
|
71526ac79f | ||
|
|
3d685ef96c | ||
|
|
2fdde6218a | ||
|
|
09693d14d1 | ||
|
|
dcaeb20e29 | ||
|
|
d93ec3bb91 | ||
|
|
f29852f6f0 | ||
|
|
7d5fc84747 | ||
|
|
4a3a5174b2 | ||
|
|
e0d094b2aa | ||
|
|
e3190b86ab | ||
|
|
b9b0a573e5 | ||
|
|
0dbfbd8dfc | ||
|
|
6e42d9113b | ||
|
|
460fb7ec29 | ||
|
|
c86a2b643a | ||
|
|
b2042f48cd | ||
|
|
d276f37e87 | ||
|
|
7c88ee7cff | ||
|
|
93ddc4a5ba | ||
|
|
9f12747d9b | ||
|
|
5a086a9173 | ||
|
|
e1067ffe67 | ||
|
|
d5f537aae4 | ||
|
|
5b12483416 | ||
|
|
07eb541806 | ||
|
|
065a3aa2f5 | ||
|
|
2aa2d79de2 | ||
|
|
a0deab901d | ||
|
|
4bc4ca1ba9 | ||
|
|
ac8e8961ce | ||
|
|
2c51925638 | ||
|
|
e0eac875b6 | ||
|
|
9ac08c263b | ||
|
|
658a2de619 | ||
|
|
a487a51135 | ||
|
|
2d58f60a53 | ||
|
|
faa49687be | ||
|
|
3ddf941cd7 | ||
|
|
37dece2cd8 | ||
|
|
1ead82f9b8 | ||
|
|
48dbf5a3dc | ||
|
|
0a95550fc0 | ||
|
|
1c2b312d49 | ||
|
|
62e08d2b7e | ||
|
|
f34adaca41 | ||
|
|
aaf5d64fe0 | ||
|
|
3f5fb4b61c | ||
|
|
f9254126e5 | ||
|
|
4676d7ef02 | ||
|
|
42b8dbb58f | ||
|
|
b7c0914f33 | ||
|
|
c8a2057410 | ||
|
|
64e42bebe2 | ||
|
|
7275ce906e | ||
|
|
7ed97eeec4 | ||
|
|
0bb40de1c4 | ||
|
|
bd7808a104 | ||
|
|
4842d589a6 | ||
|
|
11c541adc6 | ||
|
|
c746cfddfe | ||
|
|
2b7f8d8298 | ||
|
|
fe6f9aae61 | ||
|
|
8bc07c45f5 | ||
|
|
058afad9eb | ||
|
|
1e6eca1787 | ||
|
|
89b0028684 | ||
|
|
d80087f6d5 | ||
|
|
b0df4d3604 | ||
|
|
c32ff3a7ee | ||
|
|
4c55044440 | ||
|
|
b13627398b | ||
|
|
b30ec71098 | ||
|
|
649ca2eeac | ||
|
|
98546e1876 | ||
|
|
7e79814cb0 | ||
|
|
ac403d0dfa | ||
|
|
72f3730c34 | ||
|
|
aa9a4c30d3 | ||
|
|
3a2145e5fa | ||
|
|
333a22496c | ||
|
|
488dc1849d | ||
|
|
e718be72e3 | ||
|
|
9dd1bae3c7 | ||
|
|
718ac02806 | ||
|
|
7bab200e4d | ||
|
|
f5ef022ef5 | ||
|
|
5a302684f7 | ||
|
|
7d6f077cf8 | ||
|
|
b853bda2a2 | ||
|
|
abdd3190fe | ||
|
|
5894001eb2 | ||
|
|
8ae8fea6d2 | ||
|
|
81e077da5e | ||
|
|
dc65cbb08c | ||
|
|
8596f15ae7 | ||
|
|
a302269bb4 | ||
|
|
d7491ca14d | ||
|
|
700a2e8df1 | ||
|
|
e5b2ec7e2f | ||
|
|
2b1910c1c1 | ||
|
|
d046a2800d | ||
|
|
b4d44541bb | ||
|
|
cb7bcaf939 | ||
|
|
4ee40e348c | ||
|
|
f07463024c | ||
|
|
9853d8bfd6 | ||
|
|
0ed47fcd2b | ||
|
|
098ab9e428 | ||
|
|
49095ccba6 | ||
|
|
1f4affcb1e | ||
|
|
437f0df0f3 | ||
|
|
14dcb70b95 | ||
|
|
c88a63edf8 | ||
|
|
ffdd58ffb4 | ||
|
|
3a797b1efa | ||
|
|
8aea86613e | ||
|
|
7f59463e3b | ||
|
|
585ba81492 | ||
|
|
c1ba645dce | ||
|
|
811ac6eb6c | ||
|
|
53f5562468 | ||
|
|
c84df9cc0f | ||
|
|
e5d97e72e4 | ||
|
|
fe236316de | ||
|
|
27bb7d8c7a | ||
|
|
566f03beca | ||
|
|
07f2df7e66 | ||
|
|
fb0d8c348a | ||
|
|
f0c86741a4 | ||
|
|
a29890368c | ||
|
|
9c69c1a277 | ||
|
|
be31fb08f1 | ||
|
|
1321a623bd | ||
|
|
fde8d17e8d | ||
|
|
c43185ce3f | ||
|
|
3d80ec1f47 | ||
|
|
86ba622455 | ||
|
|
2872b5c5d3 | ||
|
|
723d97971d | ||
|
|
7d758d401e | ||
|
|
15b8d4711e | ||
|
|
3f63f65674 | ||
|
|
24dc7f4a91 | ||
|
|
f5cc1d1c7e | ||
|
|
b973d6055d | ||
|
|
ded65340fe | ||
|
|
4bb71c56ad | ||
|
|
ff06a18155 | ||
|
|
9395ce3fda | ||
|
|
60dbb81883 | ||
|
|
d4348bd726 | ||
|
|
3d7ecd16aa | ||
|
|
49a59f8929 | ||
|
|
bf6ee28dae | ||
|
|
80032e9658 | ||
|
|
7780cbfb83 | ||
|
|
47e9ef070e | ||
|
|
ec199e5e49 | ||
|
|
8031961205 | ||
|
|
7bad4ca535 | ||
|
|
68132e2a8f | ||
|
|
408df750be | ||
|
|
03d3b8c03c | ||
|
|
9d8360641f | ||
|
|
d6ee715d83 | ||
|
|
351d86e149 | ||
|
|
0f62fecca2 | ||
|
|
6ffb82fb6d | ||
|
|
a2be30d257 | ||
|
|
8cf7c41ad9 | ||
|
|
5e40f9904d | ||
|
|
059dad747d | ||
|
|
7d3903463c | ||
|
|
04a24680a6 | ||
|
|
d70dea5072 | ||
|
|
778e0cd402 | ||
|
|
9317fe21b2 | ||
|
|
8be3517c6d | ||
|
|
ed6ddbb8de | ||
|
|
77949ac4f7 | ||
|
|
8c7417b735 | ||
|
|
008bc6da28 | ||
|
|
faa66f1636 | ||
|
|
cb5d7190c4 | ||
|
|
6cf3913c8e | ||
|
|
9225493a93 | ||
|
|
4267207c7f | ||
|
|
cafd2af96d | ||
|
|
544483ae1f | ||
|
|
e8114b5dc6 | ||
|
|
87b9549ff4 | ||
|
|
5a5a9314f3 | ||
|
|
4fc36a9053 | ||
|
|
8279e7e01c | ||
|
|
f77fceb1b2 | ||
|
|
4ea2246333 | ||
|
|
832b8fc038 | ||
|
|
2d537b6909 | ||
|
|
ea33ab308e | ||
|
|
e0639602e6 | ||
|
|
296c23784f | ||
|
|
3132fa175a | ||
|
|
20637bcacc | ||
|
|
a01ee87749 | ||
|
|
4c86079654 | ||
|
|
291e645d77 | ||
|
|
8e467788a3 | ||
|
|
71e40a7299 | ||
|
|
d9847ed1f3 | ||
|
|
db95414cf1 | ||
|
|
df7de2ef71 | ||
|
|
731ba32e81 | ||
|
|
32197a8405 | ||
|
|
2570f7d75c | ||
|
|
f65eb546b7 | ||
|
|
aeb42b1059 | ||
|
|
0d3cd2d466 | ||
|
|
76217ffa8f | ||
|
|
b27a884bda | ||
|
|
85d1459372 | ||
|
|
e5a91d30bf | ||
|
|
3fc0cc3e92 | ||
|
|
44cc7a308a | ||
|
|
c1e80ac38a | ||
|
|
be090552f8 | ||
|
|
e54ccb1302 | ||
|
|
2036e9d9a8 | ||
|
|
1b850ff616 | ||
|
|
a5a83da045 | ||
|
|
751b6c28b5 | ||
|
|
4c660f2155 | ||
|
|
701f21186b | ||
|
|
1317e4254b | ||
|
|
589663d7d9 | ||
|
|
884d9db54b | ||
|
|
617440e1db | ||
|
|
5372467569 | ||
|
|
9089750e21 | ||
|
|
2f9a29f663 | ||
|
|
447a1c9dd7 | ||
|
|
530eb3972b | ||
|
|
5d098fe4b0 | ||
|
|
3a50c17110 | ||
|
|
85b40ee4f0 | ||
|
|
9e85fb3de3 | ||
|
|
181bec62ce | ||
|
|
9c7691c891 | ||
|
|
14036b7aeb | ||
|
|
02c3863e8c | ||
|
|
6683522491 | ||
|
|
ee679e39e5 | ||
|
|
db1eb75298 | ||
|
|
cb3801a5e8 | ||
|
|
73b6b95fbc | ||
|
|
18f055fa5e | ||
|
|
9e90350e44 | ||
|
|
65d9f88c63 | ||
|
|
eca8e706dd | ||
|
|
b41557b54b | ||
|
|
0ccf2dad22 | ||
|
|
2097d37f76 | ||
|
|
0ca4426dd0 | ||
|
|
bc3c857b35 | ||
|
|
b948f43dda | ||
|
|
f7214b7cfe | ||
|
|
75f887f5dc | ||
|
|
e10dd6a80f | ||
|
|
960433dd90 | ||
|
|
32e3da7857 | ||
|
|
2a4ba132ad | ||
|
|
6e7ca8c4b0 | ||
|
|
7dc6181d1e | ||
|
|
921c0ac71a | ||
|
|
ad656a9d41 | ||
|
|
56cc1f0aaf | ||
|
|
bf56a6723b | ||
|
|
179bac3fd0 | ||
|
|
08df09af96 | ||
|
|
3c1dc18656 | ||
|
|
12276b6033 | ||
|
|
a12a02cc14 | ||
|
|
740d411524 | ||
|
|
2e68c6ff75 | ||
|
|
102ffd141c | ||
|
|
a0271c7656 | ||
|
|
358af42c50 | ||
|
|
48e257e5af | ||
|
|
36f76f5e2c | ||
|
|
ab642344d4 | ||
|
|
e230787f21 | ||
|
|
b563040cf3 | ||
|
|
addcf2c6e2 | ||
|
|
3f563d8cbf | ||
|
|
88c0968cab | ||
|
|
e5407ab2bd | ||
|
|
13db981445 | ||
|
|
446c2a19a5 | ||
|
|
0e03712a85 | ||
|
|
b18001ce57 | ||
|
|
f46cab6862 | ||
|
|
20c9082b8d | ||
|
|
e20f26c500 | ||
|
|
048c90a695 | ||
|
|
dca9745e97 | ||
|
|
45fa74ae46 | ||
|
|
f92b0961ee | ||
|
|
57ed02a9aa | ||
|
|
3e09f1bf40 | ||
|
|
91ca746c27 | ||
|
|
a2f626046a | ||
|
|
32cdfa2969 | ||
|
|
c71315f8cd | ||
|
|
57a2559f11 | ||
|
|
850afd7402 | ||
|
|
ddf7f04c94 | ||
|
|
9bee91b6f6 | ||
|
|
b3ca172f3a | ||
|
|
9fa29457a4 | ||
|
|
459c6ab796 | ||
|
|
da9f9017a9 | ||
|
|
94d2ad9584 | ||
|
|
9229156cf6 | ||
|
|
02f9b72d3e | ||
|
|
c0ef0a893d | ||
|
|
a60cfd3cc3 | ||
|
|
d4a3e4d92c | ||
|
|
5afa4f1995 | ||
|
|
0c8226ff39 | ||
|
|
065bda37b4 | ||
|
|
a2edf317a9 | ||
|
|
f86f58dc56 | ||
|
|
f0debdd513 | ||
|
|
6ead597b43 | ||
|
|
9a47e574e3 | ||
|
|
0bd77937de | ||
|
|
6a43c3d90b | ||
|
|
9dd357a9ee | ||
|
|
1a756efe82 | ||
|
|
18e4b30634 | ||
|
|
6589f82e77 | ||
|
|
3f089f31a3 | ||
|
|
0fcfe63092 | ||
|
|
d55555c544 | ||
|
|
90004119af | ||
|
|
f8497d4e7a | ||
|
|
eb3cd689a1 | ||
|
|
3687472201 | ||
|
|
b372f08a59 | ||
|
|
5198a881b7 | ||
|
|
233736897d | ||
|
|
cd5243ac6d | ||
|
|
d1f5511566 | ||
|
|
6fce58f2ad | ||
|
|
26bbc0e877 | ||
|
|
98b7603ebd | ||
|
|
f9087475d4 | ||
|
|
dbb4a46d46 | ||
|
|
3012778def | ||
|
|
4c9853f10d | ||
|
|
5448de2d3f | ||
|
|
a92595012f | ||
|
|
c933771016 | ||
|
|
ed5fc20ee2 | ||
|
|
a0ff0e30fb | ||
|
|
3def9792be | ||
|
|
a7b8d77ed7 | ||
|
|
cb0a914099 | ||
|
|
21333490ef | ||
|
|
5f5818ba78 | ||
|
|
c4d9ef9210 | ||
|
|
52780079f3 | ||
|
|
6475a70514 | ||
|
|
296d22ad83 | ||
|
|
c79614786f | ||
|
|
c7ae5024d5 | ||
|
|
f403e61b66 | ||
|
|
86fb879a0e | ||
|
|
ab5632d5eb | ||
|
|
eee23aa642 | ||
|
|
bb25e85834 | ||
|
|
375e2e0d13 | ||
|
|
9450065850 | ||
|
|
98ce8a298a | ||
|
|
7286d13d19 | ||
|
|
530cc19f58 | ||
|
|
bfa26be7f0 | ||
|
|
ca4db8871e | ||
|
|
146da066b0 | ||
|
|
12dc2c418d | ||
|
|
1c5cb63aff | ||
|
|
794bd50ed1 | ||
|
|
26b3bc3f74 | ||
|
|
64e6570f00 | ||
|
|
783b7516a7 | ||
|
|
abd0748a77 | ||
|
|
fb51ef569e | ||
|
|
b54cf2edca | ||
|
|
55e50144f3 | ||
|
|
a2f4628590 | ||
|
|
ce14696165 | ||
|
|
29c3c0cf7f | ||
|
|
3e2a1c4eca | ||
|
|
17ce84dd0a | ||
|
|
5839e7cda8 | ||
|
|
ebf5e871e0 | ||
|
|
5370bb4515 | ||
|
|
be386e77f2 | ||
|
|
a026f339c3 | ||
|
|
552a1bfaa6 | ||
|
|
6089dcd09a | ||
|
|
64964f82cf | ||
|
|
3a38f6b147 | ||
|
|
1dca4313f7 | ||
|
|
f664b71565 | ||
|
|
b12690703f | ||
|
|
8a96e8a673 | ||
|
|
31b0791ab9 | ||
|
|
4486f4d3ab | ||
|
|
719b6e8c37 | ||
|
|
18bc7a6eaf | ||
|
|
9e2127b2a5 | ||
|
|
2793747d3c | ||
|
|
749ba4a25c | ||
|
|
e4823e9099 | ||
|
|
91c5ff4a90 | ||
|
|
25fcdab9db | ||
|
|
14a5d05b80 | ||
|
|
183c83f0d2 | ||
|
|
df31fe7dc4 | ||
|
|
1126ee77ec | ||
|
|
6c723a7e43 | ||
|
|
71a8c0f317 | ||
|
|
b76bb58378 | ||
|
|
5284a1c66b | ||
|
|
b5f9fffadd | ||
|
|
892fb83907 | ||
|
|
7648bd9646 | ||
|
|
c86a3d64fc | ||
|
|
c2ad97d0ab | ||
|
|
7573fac29f | ||
|
|
9b4317fb25 | ||
|
|
275d13d40f | ||
|
|
08c4deba5a | ||
|
|
3413a42af4 | ||
|
|
7b9504bdfb | ||
|
|
18cad32bd4 | ||
|
|
38b90f7b00 | ||
|
|
6addd207af | ||
|
|
98817a718f | ||
|
|
9898e114f1 | ||
|
|
67242862c4 | ||
|
|
2b7e3ce64e | ||
|
|
49b139bb75 | ||
|
|
b11a0d50e6 | ||
|
|
33e9b74388 | ||
|
|
cc282b3585 | ||
|
|
92f9ad48a8 | ||
|
|
1bb510cdd4 | ||
|
|
fa267805c9 | ||
|
|
556278dbc5 | ||
|
|
365ec0ba9f | ||
|
|
4587cf73c2 | ||
|
|
65aba21c14 | ||
|
|
0bf6e81faa | ||
|
|
f4d6290b50 | ||
|
|
ca8dc42d14 | ||
|
|
a4e746c5a4 | ||
|
|
1c796720be | ||
|
|
483eeeca39 | ||
|
|
f27527a614 | ||
|
|
609904cfb3 | ||
|
|
82e912ffad | ||
|
|
6c4049f29a | ||
|
|
9466278be2 | ||
|
|
e4029cca04 | ||
|
|
bcb2f833cd | ||
|
|
a0a15fa643 | ||
|
|
c28509ac28 | ||
|
|
542be2b2d4 | ||
|
|
9a77d4dc1a | ||
|
|
558d25fabc | ||
|
|
be7bb81a19 | ||
|
|
228d4bb321 | ||
|
|
656e239e55 | ||
|
|
300de05a20 | ||
|
|
3f817494f8 | ||
|
|
b097cec45e | ||
|
|
a707d818f5 | ||
|
|
1c70a43b91 | ||
|
|
c7c199210d | ||
|
|
3e7cdcdf90 | ||
|
|
1fc06b8d57 | ||
|
|
43f1953aa7 | ||
|
|
4616a74029 | ||
|
|
952197f130 | ||
|
|
68588fbb44 | ||
|
|
c1d04747a1 | ||
|
|
f8611416ec | ||
|
|
2e55b1f660 | ||
|
|
f3462e36a4 | ||
|
|
43d97b0e6f | ||
|
|
458036ad6b | ||
|
|
1ee9cddceb | ||
|
|
ed3c692b1f | ||
|
|
b0475566ca | ||
|
|
3489f94ca7 | ||
|
|
553be14000 | ||
|
|
a25e808e06 | ||
|
|
bf183bdcff | ||
|
|
95a5b1e459 | ||
|
|
9e69e13468 | ||
|
|
ae4924995a | ||
|
|
55b5080c77 | ||
|
|
593d86d3f2 | ||
|
|
8e132eab08 | ||
|
|
324e3e74be | ||
|
|
7dca844cbe | ||
|
|
8029d9e65e | ||
|
|
cea41cb4a9 | ||
|
|
5eb1c57320 | ||
|
|
5462aeab11 | ||
|
|
a850852847 | ||
|
|
291ee5366c | ||
|
|
a1b48d2c64 | ||
|
|
913e92a96e | ||
|
|
b82e6dbdb8 | ||
|
|
6ded547a0d | ||
|
|
a7d40e238e | ||
|
|
ed1bd74301 | ||
|
|
1bd0a0edf5 | ||
|
|
7fac72cac5 | ||
|
|
d0310b669e | ||
|
|
62e6848dc8 | ||
|
|
1bc1ef7f17 | ||
|
|
ffb829e80c | ||
|
|
796a8a013a | ||
|
|
535739c0c7 | ||
|
|
72f0e87367 | ||
|
|
f278490540 | ||
|
|
76b0e3e9f7 | ||
|
|
98e86a8160 | ||
|
|
9e5487d5ad | ||
|
|
8c2e965f6e | ||
|
|
f8f00b4ecf | ||
|
|
4da4a05611 | ||
|
|
9ae9ccff16 | ||
|
|
eaa90ee8eb | ||
|
|
31bbdd6a12 | ||
|
|
974d395a48 | ||
|
|
a67f6e4f9c | ||
|
|
ed0c4037ad | ||
|
|
b562ab7681 | ||
|
|
3e35dc95e5 | ||
|
|
ddf5b33219 | ||
|
|
1c9badec9c | ||
|
|
8f3bdf1cf3 | ||
|
|
3b9e8e47ec | ||
|
|
b85831fb5f | ||
|
|
fd0ed81f7f | ||
|
|
b5c299c5ad | ||
|
|
5a253f9053 | ||
|
|
11d5613866 | ||
|
|
3984544bdb | ||
|
|
e226b2fa75 | ||
|
|
e8b192be3e | ||
|
|
8368eed645 | ||
|
|
28b637c99c | ||
|
|
53a5410337 | ||
|
|
8222bf6420 | ||
|
|
0998d349ca | ||
|
|
f3bde7b5f1 | ||
|
|
8fcf527632 | ||
|
|
4eb17afe4e | ||
|
|
d2577e32e6 | ||
|
|
e582ffca38 | ||
|
|
59649ca42c | ||
|
|
e2ac6187dc | ||
|
|
df9aaf19c2 | ||
|
|
275c671576 | ||
|
|
86bbc3a9e8 | ||
|
|
b3d49c61a5 | ||
|
|
7f947f146c | ||
|
|
e6bd085c15 | ||
|
|
52d0241a17 | ||
|
|
b53de0c31d | ||
|
|
19491d79a5 | ||
|
|
dd6ae193ff | ||
|
|
fbbbc36221 | ||
|
|
7f3e8596e3 | ||
|
|
103b08c9c5 | ||
|
|
99a7ada58a | ||
|
|
6415294782 | ||
|
|
79e6480513 | ||
|
|
cc5a7ea334 | ||
|
|
4b56962c1b | ||
|
|
0668a52c6b |
No files matched your search
@@ -0,0 +1,14 @@
|
||||
.git
|
||||
web/node_modules
|
||||
web/*.log
|
||||
web/regression
|
||||
web/**/tests/
|
||||
web/**/*.pyc
|
||||
web/**/__pycache__
|
||||
.DS_Store
|
||||
web/pgadmin/messages.pot
|
||||
web/pgadmin/translations/??/LC_MESSAGES/messages.po
|
||||
Dockerfile
|
||||
docs/en_US/_build/**/*
|
||||
src-build/**/*
|
||||
dist/**/*
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve pgAdmin
|
||||
title: ''
|
||||
labels: Bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**_Please note that security bugs or issues should be reported to security@pgadmin.org._**
|
||||
|
||||
**Describe the bug**
|
||||
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. See the error
|
||||
|
||||
**Expected behavior**
|
||||
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Error message**
|
||||
|
||||
If possible, include the full, unedited text of any error messages displayed.
|
||||
|
||||
**Screenshots**
|
||||
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Desktop (please complete the following information):**
|
||||
- OS: [e.g. Windows 10, OSX monterey]
|
||||
- Version: [e.g. 6.15]
|
||||
- Mode: [e.g Desktop or Server]
|
||||
- Browser (if running in server mode): [e.g. chrome, safari]
|
||||
- Package type: [e.g. RPM, DEB, Python, Container, etc.]
|
||||
|
||||
**Additional context**
|
||||
|
||||
Add any other context about the problem here.
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea or new feature for pgAdmin
|
||||
title: ''
|
||||
labels: Feature
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the solution you'd like**
|
||||
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
|
||||
Add any other context or screenshots about the feature request here.
|
||||
@@ -0,0 +1,55 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "docker"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
labels:
|
||||
- "Dependencies"
|
||||
commit-message:
|
||||
prefix: "Docker dependency"
|
||||
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
labels:
|
||||
- "Dependencies"
|
||||
commit-message:
|
||||
prefix: "Python dependency"
|
||||
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/tools"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
labels:
|
||||
- "Dependencies"
|
||||
commit-message:
|
||||
prefix: "Python dependency"
|
||||
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/web/regression"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
labels:
|
||||
- "Dependencies"
|
||||
commit-message:
|
||||
prefix: "Python dependency"
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/runtime"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
labels:
|
||||
- "Dependencies"
|
||||
commit-message:
|
||||
prefix: "Python dependency"
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/web"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
labels:
|
||||
- "Dependencies"
|
||||
commit-message:
|
||||
prefix: "Python dependency"
|
||||
@@ -0,0 +1,23 @@
|
||||
name: Check container build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Build the container
|
||||
run: docker build .
|
||||
@@ -0,0 +1,61 @@
|
||||
name: Check documentation builds
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Install platform dependencies
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev latexmk texlive-latex-recommended tex-gyre texlive-latex-extra
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: make install-python
|
||||
|
||||
- name: Check the HTML build
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
make docs
|
||||
|
||||
- name: Archive HTML
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: pgadmin4-html-build-output
|
||||
path: docs/en_US/_build/html/*
|
||||
|
||||
- name: Check the ePub build
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
make docs-epub
|
||||
|
||||
- name: Archive ePub
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: pgadmin4-epub-build-output
|
||||
path: docs/en_US/_build/epub/pgAdmin4.epub
|
||||
|
||||
- name: Check the PDF build
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
make docs-pdf
|
||||
|
||||
- name: Archive PDF
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: pgadmin4-pdf-build-output
|
||||
path: docs/en_US/_build/latex/pgadmin4.pdf
|
||||
@@ -0,0 +1,30 @@
|
||||
name: Check Javascript style
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Install Node modules
|
||||
run: |
|
||||
cd web
|
||||
yarn install
|
||||
|
||||
- name: Run the linter
|
||||
run: |
|
||||
cd web
|
||||
yarn run linter
|
||||
@@ -0,0 +1,39 @@
|
||||
name: Check Python build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Install platform dependencies
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: make install-python
|
||||
|
||||
- name: Check the Python wheel build
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
make pip
|
||||
|
||||
- name: Archive Python wheel
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: pgadmin4-python-build-output
|
||||
path: dist/*
|
||||
@@ -0,0 +1,37 @@
|
||||
name: Check Python style
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: |
|
||||
sudo pip install --upgrade pip
|
||||
sudo pip install pycodestyle
|
||||
|
||||
- name: Check the documentation
|
||||
run: pycodestyle --config=.pycodestyle docs/
|
||||
|
||||
- name: Check the packaging
|
||||
run: pycodestyle --config=.pycodestyle pkg/
|
||||
|
||||
- name: Check the application
|
||||
run: pycodestyle --config=.pycodestyle web/
|
||||
|
||||
- name: Check the tools
|
||||
run: pycodestyle --config=.pycodestyle tools/
|
||||
@@ -0,0 +1,39 @@
|
||||
name: Check tarball build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Install platform dependencies
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: make install-python
|
||||
|
||||
- name: Check the tarball build
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
make src
|
||||
|
||||
- name: Archive source tarball
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: pgadmin4-tarball-build-output
|
||||
path: dist/*
|
||||
@@ -0,0 +1,34 @@
|
||||
name: Check translations
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Install platform dependencies
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y python3-babel python3-jinja2
|
||||
|
||||
- name: Check we can extract messages
|
||||
run: make msg-extract
|
||||
|
||||
- name: Check we can update the catalogs
|
||||
run: make msg-update
|
||||
|
||||
- name: Check the catalogs will compile
|
||||
run: make msg-compile
|
||||
@@ -0,0 +1,39 @@
|
||||
name: Run Javascript tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-latest, windows-latest]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Upgrade yarn
|
||||
run: |
|
||||
yarn set version berry
|
||||
|
||||
- name: Install Node modules
|
||||
run: |
|
||||
cd web
|
||||
yarn install
|
||||
|
||||
- name: Run the tests
|
||||
run: |
|
||||
cd web
|
||||
yarn run test:karma-once
|
||||
@@ -0,0 +1,285 @@
|
||||
# This workflow requires the following configuration in Github
|
||||
#
|
||||
# Vars:
|
||||
# ENABLE_EPAS_TESTS - Set to true to enable this test
|
||||
#
|
||||
# Secrets:
|
||||
# EDB_REPO_USERNAME - Username for accessing EDB Repos 1.0
|
||||
# EDB_REPO_PASSWORD - Password for accessing EDB Repos 1.0
|
||||
# EDB_SBP_URL - URL to the EDB StackBuilder Plus catalog
|
||||
|
||||
name: Run Python tests on EPAS
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
# Only run if the tests are enabled
|
||||
# TODO: Figure out a way to test for the presence of the secrets instead
|
||||
if: vars.ENABLE_EPAS_TESTS == 'true'
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-22.04, windows-latest]
|
||||
pgver: [11, 12, 13, 14, 15]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup the EDB APT repo on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
sudo su -c 'echo "deb [arch=amd64] https://apt.enterprisedb.com/$(lsb_release -cs)-edb/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/edb-$(lsb_release -cs).list'
|
||||
sudo su -c 'echo "machine apt.enterprisedb.com login ${{ secrets.EDB_REPO_USERNAME }} password ${{ secrets.EDB_REPO_PASSWORD }}" > /etc/apt/auth.conf.d/edb.conf'
|
||||
sudo wget -q -O - https://apt.enterprisedb.com/edb-deb.gpg.key | sudo apt-key add -
|
||||
|
||||
- name: Install platform dependencies on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev edb-as${{ matrix.pgver }}-server edb-as${{ matrix.pgver }}-server-pldebugger edb-as${{ matrix.pgver }}-pgagent
|
||||
|
||||
- name: Install platform dependencies on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
FOR /f "delims=" %%F IN ('python tools\get_sb_package.py "${{ secrets.EDB_SBP_URL }}" "edb_as${{ matrix.pgver }}_dbserver" "windows-x64"') DO SET INSTALLER_EXE=%%F
|
||||
ECHO Running %INSTALLER_EXE%...
|
||||
%INSTALLER_EXE% --prefix C:\EPAS\${{ matrix.pgver }} --datadir C:\EPAS\${{ matrix.pgver }}\data --serverport 58${{ matrix.pgver }} --superpassword enterprisedb --create_samples no --install_runtimes 0 --mode unattended --unattendedmodeui none --disable-components stackbuilderplus${{ matrix.pgver < 15 && ',pgadmin4' || '' }}
|
||||
|
||||
choco install -y mitkerberos
|
||||
|
||||
REM Ignore error 3010 (reboot required)
|
||||
IF %ERRORLEVEL% EQU 3010 cmd /c "exit /b 0"
|
||||
shell: cmd
|
||||
|
||||
- name: Create the tablespace directory on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
sudo mkdir -p /var/lib/edb-as/tablespaces/${{ matrix.pgver }}
|
||||
sudo chown enterprisedb:enterprisedb /var/lib/edb-as/tablespaces/${{ matrix.pgver }}
|
||||
|
||||
- name: Create the tablespace directory on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
mkdir "C:\EPAS\${{ matrix.pgver }}\tablespaces"
|
||||
icacls "C:\EPAS\${{ matrix.pgver }}\tablespaces" /grant "NETWORK SERVICE":(OI)(CI)F /T
|
||||
shell: cmd
|
||||
|
||||
- name: Start PostgreSQL on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
# Note: we use a custom port for PostgreSQL as the runner may already have a version of PostgreSQL installed
|
||||
sudo su -c "echo local all all trust > /etc/edb-as/${{ matrix.pgver }}/main/pg_hba.conf"
|
||||
sudo sed -i "s/port = 544[0-9]/port = 58${{ matrix.pgver }}/g" /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf
|
||||
sudo sed -i "s/shared_preload_libraries = '/shared_preload_libraries = '\$libdir\/plugin_debugger,/g" /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf
|
||||
sudo su - enterprisedb -c "mkdir -p /var/run/edb-as/${{ matrix.pgver }}-main.epas_stat_tmp"
|
||||
sudo systemctl restart edb-as@${{ matrix.pgver }}-main
|
||||
|
||||
until sudo runuser -l enterprisedb -c "/usr/lib/edb-as/${{ matrix.pgver }}/bin/pg_isready -p 58${{ matrix.pgver }}" 2>/dev/null; do
|
||||
>&2 echo "EPAS is unavailable - sleeping for 2 seconds"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
psql -U enterprisedb -d postgres -p 58${{ matrix.pgver }} -c 'CREATE EXTENSION IF NOT EXISTS pgagent;'
|
||||
|
||||
- name: Install Python dependencies on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: make install-python-testing
|
||||
|
||||
- name: Install Python dependencies on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
SET LIB=C:\EPAS\${{ matrix.pgver }}\lib;%LIB%
|
||||
SET INCLUDE=C:\EPAS\${{ matrix.pgver }}\include;%INCLUDE%
|
||||
python -m venv venv
|
||||
call venv\Scripts\activate.bat
|
||||
python -m pip install --upgrade pip
|
||||
pip install wheel sphinx sphinxcontrib-youtube -r web\regression\requirements.txt
|
||||
shell: cmd
|
||||
|
||||
- name: Create the test configuration on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
cat <<EOF > web/config_local.py
|
||||
from config import *
|
||||
|
||||
# Debug mode
|
||||
DEBUG = True
|
||||
|
||||
# App mode
|
||||
SERVER_MODE = False
|
||||
|
||||
# Log
|
||||
CONSOLE_LOG_LEVEL = DEBUG
|
||||
FILE_LOG_LEVEL = DEBUG
|
||||
|
||||
DEFAULT_SERVER = '127.0.0.1'
|
||||
|
||||
UPGRADE_CHECK_ENABLED = False
|
||||
|
||||
LOG_FILE = "$(pwd)/var/pgadmin4.log"
|
||||
SESSION_DB_PATH = "$(pwd)/var/sessions"
|
||||
STORAGE_DIR = "$(pwd)/var/storage"
|
||||
SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
|
||||
TEST_SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
|
||||
AZURE_CREDENTIAL_CACHE_DIR = "$(pwd)/var/azurecredentialcache"
|
||||
EOF
|
||||
|
||||
cat <<EOF > web/regression/test_config.json
|
||||
{
|
||||
"pgAdmin4_login_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER@EXAMPLE.COM"
|
||||
},
|
||||
"pgAdmin4_test_user_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER2@EXAMPLE.COM"
|
||||
},
|
||||
"pgAdmin4_test_non_admin_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER@EXAMPLE.COM"
|
||||
},
|
||||
"server_group": 1,
|
||||
"server_credentials": [
|
||||
{
|
||||
"name": "EPAS ${{ matrix.pgver }}",
|
||||
"comment": "EPAS ${{ matrix.pgver }} Server",
|
||||
"db_username": "enterprisedb",
|
||||
"host": "/var/run/edb-as",
|
||||
"db_password": "",
|
||||
"db_port": 58${{ matrix.pgver }},
|
||||
"maintenance_db": "postgres",
|
||||
"sslmode": "prefer",
|
||||
"tablespace_path": "/var/lib/edb-as/tablespaces/${{ matrix.pgver }}",
|
||||
"enabled": true,
|
||||
"default_binary_paths": {
|
||||
"pg": "",
|
||||
"ppas": "/usr/lib/edb-as/${{ matrix.pgver }}/bin"
|
||||
}
|
||||
}
|
||||
],
|
||||
"server_update_data": [
|
||||
{
|
||||
"comment": "This is test update comment"
|
||||
}
|
||||
]
|
||||
}
|
||||
EOF
|
||||
|
||||
- name: Create the test configuration on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
FOR /f "delims=" %%D IN ('python -c "import os; print(os.getcwd().replace('\\', '\\\\'))"') DO SET WORKING_DIR=%%D
|
||||
|
||||
> web\config_local.py (
|
||||
@echo.from config import *
|
||||
@echo.
|
||||
@echo.# Debug mode
|
||||
@echo.DEBUG = True
|
||||
@echo.
|
||||
@echo.# App mode
|
||||
@echo.SERVER_MODE = False
|
||||
@echo.
|
||||
@echo.# Log
|
||||
@echo.CONSOLE_LOG_LEVEL = DEBUG
|
||||
@echo.FILE_LOG_LEVEL = DEBUG
|
||||
@echo.
|
||||
@echo.DEFAULT_SERVER = '127.0.0.1'
|
||||
@echo.
|
||||
@echo.UPGRADE_CHECK_ENABLED = False
|
||||
@echo.
|
||||
@echo.LOG_FILE = "%WORKING_DIR%\\var\\pgadmin4.log"
|
||||
@echo.SESSION_DB_PATH = "%WORKING_DIR%\\var\\sessions"
|
||||
@echo.STORAGE_DIR = "%WORKING_DIR%\\var\\storage"
|
||||
@echo.SQLITE_PATH = "%WORKING_DIR%\\var\\pgadmin4.db"
|
||||
@echo.TEST_SQLITE_PATH = "%WORKING_DIR%\\var\\test_pgadmin4.db"
|
||||
@echo.AZURE_CREDENTIAL_CACHE_DIR = "%WORKING_DIR%\\var\\azurecredentialcache"
|
||||
)
|
||||
|
||||
> web\regression\test_config.json (
|
||||
@echo.{
|
||||
@echo. "pgAdmin4_login_credentials": {
|
||||
@echo. "new_password": "NEWPASSWORD",
|
||||
@echo. "login_password": "PASSWORD",
|
||||
@echo. "login_username": "USER@EXAMPLE.COM"
|
||||
@echo. },
|
||||
@echo. "pgAdmin4_test_user_credentials": {
|
||||
@echo. "new_password": "NEWPASSWORD",
|
||||
@echo. "login_password": "PASSWORD",
|
||||
@echo. "login_username": "USER2@EXAMPLE.COM"
|
||||
@echo. },
|
||||
@echo. "pgAdmin4_test_non_admin_credentials": {
|
||||
@echo. "new_password": "NEWPASSWORD",
|
||||
@echo. "login_password": "PASSWORD",
|
||||
@echo. "login_username": "USER@EXAMPLE.COM"
|
||||
@echo. },
|
||||
@echo. "server_group": 1,
|
||||
@echo. "server_credentials": [
|
||||
@echo. {
|
||||
@echo. "name": "EPAS ${{ matrix.pgver }}",
|
||||
@echo. "comment": "EPAS ${{ matrix.pgver }} Server",
|
||||
@echo. "db_username": "enterprisedb",
|
||||
@echo. "host": "127.0.0.1",
|
||||
@echo. "db_password": "enterprisedb",
|
||||
@echo. "db_port": 58${{ matrix.pgver }},
|
||||
@echo. "maintenance_db": "postgres",
|
||||
@echo. "sslmode": "prefer",
|
||||
@echo. "tablespace_path": "C:\\EPAS\\${{ matrix.pgver }}\\tablespaces",
|
||||
@echo. "enabled": true,
|
||||
@echo. "default_binary_paths": {
|
||||
@echo. "pg": "",
|
||||
@echo. "ppas": "C:\\EPAS\\${{ matrix.pgver }}\\bin"
|
||||
@echo. }
|
||||
@echo. }
|
||||
@echo. ],
|
||||
@echo. "server_update_data": [
|
||||
@echo. {
|
||||
@echo. "comment": "This is test update comment"
|
||||
@echo. }
|
||||
@echo. ]
|
||||
@echo.}
|
||||
)
|
||||
shell: cmd
|
||||
|
||||
- name: Run the tests on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
make check-python
|
||||
|
||||
- name: Run the tests on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
call venv\Scripts\activate.bat
|
||||
python web\regression\runtests.py --exclude feature_tests
|
||||
shell: cmd
|
||||
|
||||
- name: Archive server log
|
||||
if: success() || failure()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: server-log-epas${{ matrix.pgver }}
|
||||
path: var/pgadmin4.log
|
||||
|
||||
- name: Archive regression log
|
||||
if: success() || failure()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: regression-log-epas${{ matrix.pgver }}
|
||||
path: web/regression/regression.log
|
||||
@@ -0,0 +1,304 @@
|
||||
name: Run Python tests on PostgreSQL
|
||||
|
||||
# Note: we use a custom port (and installation directory on Windows) for
|
||||
# PostgreSQL as the runners may already have a version installed.
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-latest, windows-latest]
|
||||
pgver: [11, 12, 13, 14, 15]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup the PGDG APT repo on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||
run: |
|
||||
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
|
||||
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
||||
|
||||
- name: Install platform dependencies on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev postgresql-${{ matrix.pgver }} postgresql-${{ matrix.pgver }}-pldebugger pgagent
|
||||
|
||||
- name: Install platform dependencies on macOS
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
run: |
|
||||
brew install postgresql@${{ matrix.pgver }}
|
||||
|
||||
- name: Uninstall PostgreSQL if already present
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
if exist "C:\Program Files\PostgreSQL\{{ matrix.pgver }}\uninstall-postgresql.exe" (
|
||||
"C:\Program Files\PostgreSQL\{{ matrix.pgver }}\uninstall-postgresql.exe" --mode unattended
|
||||
)
|
||||
reg delete "HKLM\SOFTWARE\PostgreSQL" /f
|
||||
shell: cmd
|
||||
|
||||
- name: Install platform dependencies on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
choco install -y postgresql${{ matrix.pgver }} --params "/Password:postgres /Port:59${{ matrix.pgver }}" --ia "--prefix C:\PostgreSQL\${{ matrix.pgver }} --datadir C:\PostgreSQL\${{ matrix.pgver }}\data --install_runtimes 0 --disable-components pgAdmin,stackbuilder --enable-components server,commandlinetools"
|
||||
choco install -y mitkerberos
|
||||
|
||||
REM Ignore error 3010 (reboot required)
|
||||
IF %ERRORLEVEL% EQU 3010 cmd /c "exit /b 0"
|
||||
shell: cmd
|
||||
|
||||
- name: Create the tablespace directory on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||
run: |
|
||||
sudo mkdir -p /var/lib/postgresql/tablespaces/${{ matrix.pgver }}
|
||||
sudo chown postgres:postgres /var/lib/postgresql/tablespaces/${{ matrix.pgver }}
|
||||
|
||||
- name: Create the tablespace directory on macOS
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
run: |
|
||||
mkdir -p /usr/local/var/tablespaces/${{ matrix.pgver }}
|
||||
|
||||
- name: Create the tablespace directory on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
mkdir "C:\PostgreSQL\${{ matrix.pgver }}\tablespaces"
|
||||
icacls "C:\PostgreSQL\${{ matrix.pgver }}\tablespaces" /grant "NETWORK SERVICE":(OI)(CI)F /T
|
||||
shell: cmd
|
||||
|
||||
- name: Start PostgreSQL on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||
run: |
|
||||
sudo su -c "echo local all all trust > /etc/postgresql/${{ matrix.pgver }}/main/pg_hba.conf"
|
||||
sudo sed -i "s/port = 543[0-9]/port = 59${{ matrix.pgver }}/g" /etc/postgresql/${{ matrix.pgver }}/main/postgresql.conf
|
||||
sudo sed -i "s/#shared_preload_libraries = ''/shared_preload_libraries = '\$libdir\/plugin_debugger'/g" /etc/postgresql/${{ matrix.pgver }}/main/postgresql.conf
|
||||
sudo su - postgres -c "/usr/lib/postgresql/${{ matrix.pgver }}/bin/postgres -D /var/lib/postgresql/${{ matrix.pgver }}/main -c config_file=/etc/postgresql/${{ matrix.pgver }}/main/postgresql.conf &"
|
||||
|
||||
until sudo runuser -l postgres -c "pg_isready -p 59${{ matrix.pgver }}" 2>/dev/null; do
|
||||
>&2 echo "Postgres is unavailable - sleeping for 2 seconds"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
psql -U postgres -p 59${{ matrix.pgver }} -c 'CREATE EXTENSION pgagent;'
|
||||
psql -U postgres -p 59${{ matrix.pgver }} -c 'CREATE EXTENSION pldbgapi;'
|
||||
|
||||
- name: Start PostgreSQL on macOS
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
run: |
|
||||
echo local all all trust > /usr/local/var/postgresql@${{ matrix.pgver }}/pg_hba.conf
|
||||
sed -i '' "s/#port = 543[0-9]/port = 59${{ matrix.pgver }}/g" /usr/local/var/postgresql@${{ matrix.pgver }}/postgresql.conf
|
||||
brew services restart postgresql@${{ matrix.pgver }}
|
||||
|
||||
until /usr/local/opt/postgresql@${{ matrix.pgver }}/bin/pg_isready -p 59${{ matrix.pgver }} 2>/dev/null; do
|
||||
>&2 echo "Postgres is unavailable - sleeping for 2 seconds"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
psql postgres -p 59${{ matrix.pgver }} -c 'CREATE ROLE postgres SUPERUSER LOGIN;'
|
||||
|
||||
- name: Install Python dependencies on Linux and macOS
|
||||
if: ${{ matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest' }}
|
||||
run: make install-python-testing
|
||||
|
||||
- name: Install Python dependencies on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
SET LIB=C:\PostgreSQL\${{ matrix.pgver }}\lib;%LIB%
|
||||
SET INCLUDE=C:\PostgreSQL\${{ matrix.pgver }}\include;%INCLUDE%
|
||||
python -m venv venv
|
||||
call venv\Scripts\activate.bat
|
||||
python -m pip install --upgrade pip
|
||||
pip install wheel sphinx sphinxcontrib-youtube -r web\regression\requirements.txt
|
||||
shell: cmd
|
||||
|
||||
- name: Create the test configuration on Linux and macOS
|
||||
if: ${{ matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest' }}
|
||||
run: |
|
||||
cat <<EOF > web/config_local.py
|
||||
from config import *
|
||||
|
||||
# Debug mode
|
||||
DEBUG = True
|
||||
|
||||
# App mode
|
||||
SERVER_MODE = False
|
||||
|
||||
# Log
|
||||
CONSOLE_LOG_LEVEL = DEBUG
|
||||
FILE_LOG_LEVEL = DEBUG
|
||||
|
||||
DEFAULT_SERVER = '127.0.0.1'
|
||||
|
||||
UPGRADE_CHECK_ENABLED = False
|
||||
|
||||
LOG_FILE = "$(pwd)/var/pgadmin4.log"
|
||||
SESSION_DB_PATH = "$(pwd)/var/sessions"
|
||||
STORAGE_DIR = "$(pwd)/var/storage"
|
||||
SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
|
||||
TEST_SQLITE_PATH = "$(pwd)/var/pgadmin4.db"
|
||||
AZURE_CREDENTIAL_CACHE_DIR = "$(pwd)/var/azurecredentialcache"
|
||||
EOF
|
||||
|
||||
cat <<EOF > web/regression/test_config.json
|
||||
{
|
||||
"pgAdmin4_login_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER@EXAMPLE.COM"
|
||||
},
|
||||
"pgAdmin4_test_user_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER2@EXAMPLE.COM"
|
||||
},
|
||||
"pgAdmin4_test_non_admin_credentials": {
|
||||
"new_password": "NEWPASSWORD",
|
||||
"login_password": "PASSWORD",
|
||||
"login_username": "USER@EXAMPLE.COM"
|
||||
},
|
||||
"server_group": 1,
|
||||
"server_credentials": [
|
||||
{
|
||||
"name": "PostgreSQL ${{ matrix.pgver }}",
|
||||
"comment": "PostgreSQL ${{ matrix.pgver }} Server",
|
||||
"db_username": "postgres",
|
||||
"host": "${{ matrix.os == 'macos-latest' && '/tmp' || matrix.os == 'ubuntu-latest' && '/var/run/postgresql' || '127.0.0.1' }}",
|
||||
"db_password": "postgres",
|
||||
"db_port": 59${{ matrix.pgver }},
|
||||
"maintenance_db": "postgres",
|
||||
"sslmode": "prefer",
|
||||
"tablespace_path": "${{ matrix.os == 'macos-latest' && format('/usr/local/var/tablespaces/{0}', matrix.pgver) || format('/var/lib/postgresql/tablespaces/{0}', matrix.pgver) }}",
|
||||
"enabled": true,
|
||||
"default_binary_paths": {
|
||||
"pg": "${{ matrix.os == 'macos-latest' && format('/usr/local/opt/postgresql@{0}/bin', matrix.pgver) || format('/usr/lib/postgresql/{0}/bin', matrix.pgver) }}",
|
||||
"ppas": ""
|
||||
}
|
||||
}
|
||||
],
|
||||
"server_update_data": [
|
||||
{
|
||||
"comment": "This is test update comment"
|
||||
}
|
||||
]
|
||||
}
|
||||
EOF
|
||||
|
||||
- name: Create the test configuration on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
FOR /f "delims=" %%D IN ('python -c "import os; print(os.getcwd().replace('\\', '\\\\'))"') DO SET WORKING_DIR=%%D
|
||||
|
||||
> web\config_local.py (
|
||||
@echo.from config import *
|
||||
@echo.
|
||||
@echo.# Debug mode
|
||||
@echo.DEBUG = True
|
||||
@echo.
|
||||
@echo.# App mode
|
||||
@echo.SERVER_MODE = False
|
||||
@echo.
|
||||
@echo.# Log
|
||||
@echo.CONSOLE_LOG_LEVEL = DEBUG
|
||||
@echo.FILE_LOG_LEVEL = DEBUG
|
||||
@echo.
|
||||
@echo.DEFAULT_SERVER = '127.0.0.1'
|
||||
@echo.
|
||||
@echo.UPGRADE_CHECK_ENABLED = False
|
||||
@echo.
|
||||
@echo.LOG_FILE = "%WORKING_DIR%\\var\\pgadmin4.log"
|
||||
@echo.SESSION_DB_PATH = "%WORKING_DIR%\\var\\sessions"
|
||||
@echo.STORAGE_DIR = "%WORKING_DIR%\\var\\storage"
|
||||
@echo.SQLITE_PATH = "%WORKING_DIR%\\var\\pgadmin4.db"
|
||||
@echo.TEST_SQLITE_PATH = "%WORKING_DIR%\\var\\test_pgadmin4.db"
|
||||
@echo.AZURE_CREDENTIAL_CACHE_DIR = "%WORKING_DIR%\\var\\azurecredentialcache"
|
||||
)
|
||||
|
||||
> web\regression\test_config.json (
|
||||
@echo.{
|
||||
@echo. "pgAdmin4_login_credentials": {
|
||||
@echo. "new_password": "NEWPASSWORD",
|
||||
@echo. "login_password": "PASSWORD",
|
||||
@echo. "login_username": "USER@EXAMPLE.COM"
|
||||
@echo. },
|
||||
@echo. "pgAdmin4_test_user_credentials": {
|
||||
@echo. "new_password": "NEWPASSWORD",
|
||||
@echo. "login_password": "PASSWORD",
|
||||
@echo. "login_username": "USER2@EXAMPLE.COM"
|
||||
@echo. },
|
||||
@echo. "pgAdmin4_test_non_admin_credentials": {
|
||||
@echo. "new_password": "NEWPASSWORD",
|
||||
@echo. "login_password": "PASSWORD",
|
||||
@echo. "login_username": "USER@EXAMPLE.COM"
|
||||
@echo. },
|
||||
@echo. "server_group": 1,
|
||||
@echo. "server_credentials": [
|
||||
@echo. {
|
||||
@echo. "name": "PostgreSQL ${{ matrix.pgver }}",
|
||||
@echo. "comment": "PostgreSQL ${{ matrix.pgver }} Server",
|
||||
@echo. "db_username": "postgres",
|
||||
@echo. "host": "127.0.0.1",
|
||||
@echo. "db_password": "postgres",
|
||||
@echo. "db_port": 59${{ matrix.pgver }},
|
||||
@echo. "maintenance_db": "postgres",
|
||||
@echo. "sslmode": "prefer",
|
||||
@echo. "tablespace_path": "C:\\PostgreSQL\\${{ matrix.pgver }}\\tablespaces",
|
||||
@echo. "enabled": true,
|
||||
@echo. "default_binary_paths": {
|
||||
@echo. "pg": "C:\\PostgreSQL\\${{ matrix.pgver }}\\bin",
|
||||
@echo. "ppas": ""
|
||||
@echo. }
|
||||
@echo. }
|
||||
@echo. ],
|
||||
@echo. "server_update_data": [
|
||||
@echo. {
|
||||
@echo. "comment": "This is test update comment"
|
||||
@echo. }
|
||||
@echo. ]
|
||||
@echo.}
|
||||
)
|
||||
shell: cmd
|
||||
|
||||
- name: Run the tests on Linux and macOS
|
||||
if: ${{ matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest' }}
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
make check-python
|
||||
|
||||
- name: Run the tests on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
call venv\Scripts\activate.bat
|
||||
python web\regression\runtests.py --exclude feature_tests
|
||||
shell: cmd
|
||||
|
||||
- name: Archive server log
|
||||
if: success() || failure()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: server-log-${{ matrix.os }}-pg${{ matrix.pgver }}
|
||||
path: var/pgadmin4.log
|
||||
|
||||
- name: Archive regression log
|
||||
if: success() || failure()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: regression-log-${{ matrix.os }}-pg${{ matrix.pgver }}
|
||||
path: web/regression/regression.log
|
||||
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
# This workflow requires the following configuration in Github
|
||||
#
|
||||
# Variables:
|
||||
# SONARQUBE_PROJECT_KEY - The project key in SonarQube
|
||||
#
|
||||
# Secrets:
|
||||
# SONARQUBE_TOKEN - SonarQube API token
|
||||
# SONARQUBE_HOST - The URL of the SonarQube host
|
||||
|
||||
name: SonarQube scan
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
|
||||
concurrency:
|
||||
group: sonarqube
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build:
|
||||
# Only run if the project key is set
|
||||
if: vars.SONARQUBE_PROJECT_KEY != null
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Create the scan properties file
|
||||
run: |
|
||||
cat <<EOF > sonar-project.properties
|
||||
sonar.projectKey=${{ vars.SONARQUBE_PROJECT_KEY }}
|
||||
sonar.projectName=pgAdmin 4
|
||||
sonar.projectVersion=%VERSION%
|
||||
|
||||
# Ignore templates and SQL scripts as they confuse the scanner
|
||||
sonar.exclusions=**/templates/**/*, **/*.sql
|
||||
|
||||
# Let SonarQube know where tests can be found
|
||||
sonar.test.inclusions=**/tests/**, web/regression
|
||||
|
||||
# Python compatibility
|
||||
sonar.python.version=3.7, 3.8, 3.9, 3.10, 3.11
|
||||
EOF
|
||||
|
||||
APP_RELEASE=`grep "^APP_RELEASE" web/config.py | cut -d"=" -f2 | sed 's/ //g'`
|
||||
APP_REVISION=`grep "^APP_REVISION" web/config.py | cut -d"=" -f2 | sed 's/ //g'`
|
||||
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
|
||||
sed -i "s/%VERSION%/${APP_LONG_VERSION}/g" sonar-project.properties
|
||||
|
||||
- name: SonarQube Scan
|
||||
uses: sonarsource/sonarqube-scan-action@master
|
||||
env:
|
||||
SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }}
|
||||
SONAR_HOST_URL: ${{ secrets.SONARQUBE_HOST }}
|
||||
@@ -9,6 +9,7 @@
|
||||
.DS_Store
|
||||
.idea
|
||||
.vscode
|
||||
.yarn
|
||||
/*.diff
|
||||
/*.patch
|
||||
/dist
|
||||
@@ -19,11 +20,12 @@
|
||||
/redhat-build
|
||||
/src-build
|
||||
/win-build
|
||||
/win-temp
|
||||
_build
|
||||
/build-*
|
||||
pgadmin4.log
|
||||
pkg/win32/installer.iss
|
||||
pkg/mac/codesign.conf
|
||||
pkg/mac/codesign.confx
|
||||
pkg/mac/framework.conf
|
||||
runtime/.qmake.cache
|
||||
runtime/.qmake.stash
|
||||
@@ -51,4 +53,8 @@ auditjs.html
|
||||
auditpy.txt
|
||||
/venv/
|
||||
.scannerwork/
|
||||
web/coverage/
|
||||
web/coverage/
|
||||
web/.coverage
|
||||
web/regression/.coverage
|
||||
web/regression/covhtml/
|
||||
web/regression/htmlcov/
|
||||
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2018, The pgAdmin Development Team
|
||||
# Copyright (C) 2013 - 2023, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
#########################################################################
|
||||
@@ -12,19 +12,23 @@
|
||||
# and clean up the web/ source code
|
||||
#########################################################################
|
||||
|
||||
FROM node:12-alpine3.11 AS app-builder
|
||||
FROM alpine:latest AS app-builder
|
||||
|
||||
RUN apk add --no-cache \
|
||||
autoconf \
|
||||
automake \
|
||||
bash \
|
||||
g++ \
|
||||
git \
|
||||
libc6-compat \
|
||||
libjpeg-turbo-dev \
|
||||
libpng-dev \
|
||||
libtool \
|
||||
make \
|
||||
nasm \
|
||||
git \
|
||||
nodejs \
|
||||
npm \
|
||||
yarn \
|
||||
zlib-dev
|
||||
|
||||
# Create the /pgadmin4 directory and copy the source into it. Explicitly
|
||||
@@ -41,15 +45,9 @@ RUN rm -rf /pgadmin4/web/*.log \
|
||||
WORKDIR /pgadmin4/web
|
||||
|
||||
# Build the JS vendor code in the app-builder, and then remove the vendor source.
|
||||
RUN npm install && \
|
||||
npm audit fix && \
|
||||
rm -f yarn.lock && \
|
||||
yarn import && \
|
||||
# Commented the below line to avoid vulnerability in lodash package.
|
||||
# Refer https://www.npmjs.com/advisories/1523.
|
||||
# Once fixed we will uncomment it.
|
||||
# yarn audit && \
|
||||
rm -f package-lock.json && \
|
||||
RUN export CPPFLAGS="-DPNG_ARM_NEON_OPT=0" && \
|
||||
yarn set version berry && \
|
||||
yarn install && \
|
||||
yarn run bundle && \
|
||||
rm -rf node_modules \
|
||||
yarn.lock \
|
||||
@@ -60,28 +58,43 @@ RUN npm install && \
|
||||
karma.conf.js \
|
||||
./pgadmin/static/js/generated/.cache
|
||||
|
||||
#########################################################################
|
||||
# Next, create the base environment for Python
|
||||
#########################################################################
|
||||
|
||||
FROM alpine:latest as env-builder
|
||||
|
||||
# Install dependencies
|
||||
COPY requirements.txt /
|
||||
RUN apk add --no-cache \
|
||||
make \
|
||||
python3 \
|
||||
py3-pip && \
|
||||
apk add --no-cache --virtual build-deps \
|
||||
build-base \
|
||||
openssl-dev \
|
||||
libffi-dev \
|
||||
postgresql-dev \
|
||||
krb5-dev \
|
||||
rust \
|
||||
cargo \
|
||||
zlib-dev \
|
||||
libjpeg-turbo-dev \
|
||||
libpng-dev \
|
||||
python3-dev && \
|
||||
python3 -m venv --system-site-packages --without-pip /venv && \
|
||||
/venv/bin/python3 -m pip install --no-cache-dir -r requirements.txt && \
|
||||
apk del --no-cache build-deps
|
||||
|
||||
#########################################################################
|
||||
# Now, create a documentation build container for the Sphinx docs
|
||||
#########################################################################
|
||||
|
||||
FROM python:3.8-alpine3.11 as docs-builder
|
||||
FROM env-builder as docs-builder
|
||||
|
||||
# Install only dependencies absolutely required for documentation building
|
||||
RUN apk add --no-cache \
|
||||
make \
|
||||
build-base \
|
||||
openssl-dev \
|
||||
libffi-dev && \
|
||||
pip install --no-cache-dir \
|
||||
sphinx \
|
||||
flask_security_too \
|
||||
flask_paranoid \
|
||||
python-dateutil \
|
||||
flask_sqlalchemy \
|
||||
flask_gravatar \
|
||||
flask_migrate \
|
||||
simplejson \
|
||||
cryptography
|
||||
# Install Sphinx
|
||||
RUN /venv/bin/python3 -m pip install --no-cache-dir sphinx
|
||||
RUN /venv/bin/python3 -m pip install --no-cache-dir sphinxcontrib-youtube
|
||||
|
||||
# Copy the docs from the local tree. Explicitly remove any existing builds that
|
||||
# may be present
|
||||
@@ -90,31 +103,27 @@ COPY web /pgadmin4/web
|
||||
RUN rm -rf /pgadmin4/docs/en_US/_build
|
||||
|
||||
# Build the docs
|
||||
RUN LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 make -C /pgadmin4/docs/en_US -f Makefile.sphinx html
|
||||
RUN LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 /venv/bin/sphinx-build /pgadmin4/docs/en_US /pgadmin4/docs/en_US/_build/html
|
||||
|
||||
# Cleanup unwanted files
|
||||
RUN rm -rf /pgadmin4/docs/en_US/_build/html/.doctrees
|
||||
RUN rm -rf /pgadmin4/docs/en_US/_build/html/_sources
|
||||
RUN rm -rf /pgadmin4/docs/en_US/_build/html/_static/*.png
|
||||
|
||||
#########################################################################
|
||||
# Create additional builders to get all of the PostgreSQL utilities
|
||||
#########################################################################
|
||||
|
||||
FROM postgres:9.5-alpine as pg95-builder
|
||||
FROM postgres:9.6-alpine as pg96-builder
|
||||
FROM postgres:10-alpine as pg10-builder
|
||||
FROM postgres:11-alpine as pg11-builder
|
||||
FROM postgres:12-alpine as pg12-builder
|
||||
FROM postgres:13-alpine as pg13-builder
|
||||
FROM postgres:14-alpine as pg14-builder
|
||||
FROM postgres:15-alpine as pg15-builder
|
||||
|
||||
FROM alpine:3.11 as tool-builder
|
||||
FROM alpine:latest as tool-builder
|
||||
|
||||
# Copy the PG binaries
|
||||
COPY --from=pg95-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-9.5/
|
||||
COPY --from=pg95-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-9.5/
|
||||
COPY --from=pg95-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-9.5/
|
||||
COPY --from=pg95-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-9.5/
|
||||
|
||||
COPY --from=pg96-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-9.6/
|
||||
COPY --from=pg96-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-9.6/
|
||||
COPY --from=pg96-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-9.6/
|
||||
COPY --from=pg96-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-9.6/
|
||||
|
||||
COPY --from=pg10-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-10/
|
||||
COPY --from=pg10-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-10/
|
||||
COPY --from=pg10-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-10/
|
||||
@@ -130,13 +139,35 @@ COPY --from=pg12-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-12/
|
||||
COPY --from=pg12-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-12/
|
||||
COPY --from=pg12-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-12/
|
||||
|
||||
COPY --from=pg13-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-13/
|
||||
COPY --from=pg13-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-13/
|
||||
COPY --from=pg13-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-13/
|
||||
COPY --from=pg13-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-13/
|
||||
|
||||
COPY --from=pg14-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-14/
|
||||
COPY --from=pg14-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-14/
|
||||
COPY --from=pg14-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-14/
|
||||
COPY --from=pg14-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-14/
|
||||
|
||||
COPY --from=pg15-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-15/
|
||||
COPY --from=pg15-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-15/
|
||||
COPY --from=pg15-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-15/
|
||||
COPY --from=pg15-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-15/
|
||||
|
||||
#########################################################################
|
||||
# Assemble everything into the final container.
|
||||
#########################################################################
|
||||
|
||||
FROM python:3.8-alpine3.11
|
||||
FROM alpine:latest
|
||||
|
||||
# Copy in the Python packages
|
||||
COPY --from=env-builder /venv /venv
|
||||
|
||||
# Copy in the tools
|
||||
COPY --from=tool-builder /usr/local/pgsql /usr/local/
|
||||
COPY --from=pg15-builder /usr/local/lib/libpq.so.5.15 /usr/lib/
|
||||
RUN ln -s libpq.so.5.15 /usr/lib/libpq.so.5 && \
|
||||
ln -s libpq.so.5.15 /usr/lib/libpq.so
|
||||
|
||||
WORKDIR /pgadmin4
|
||||
ENV PYTHONPATH=/pgadmin4
|
||||
@@ -144,53 +175,40 @@ ENV PYTHONPATH=/pgadmin4
|
||||
# Copy in the code and docs
|
||||
COPY --from=app-builder /pgadmin4/web /pgadmin4
|
||||
COPY --from=docs-builder /pgadmin4/docs/en_US/_build/html/ /pgadmin4/docs
|
||||
COPY requirements.txt /pgadmin4/requirements.txt
|
||||
COPY pkg/docker/run_pgadmin.py /pgadmin4
|
||||
COPY pkg/docker/gunicorn_config.py /pgadmin4
|
||||
COPY pkg/docker/entrypoint.sh /entrypoint.sh
|
||||
|
||||
# License files
|
||||
COPY LICENSE /pgadmin4/LICENSE
|
||||
COPY DEPENDENCIES /pgadmin4/DEPENDENCIES
|
||||
|
||||
# Install build-dependencies, build & install C extensions and purge deps in
|
||||
# one RUN step
|
||||
RUN apk add --no-cache --virtual \
|
||||
build-deps \
|
||||
build-base \
|
||||
postgresql-dev \
|
||||
libffi-dev \
|
||||
linux-headers && \
|
||||
apk add \
|
||||
# Install runtime dependencies and configure everything in one RUN step
|
||||
RUN apk add \
|
||||
python3 \
|
||||
py3-pip \
|
||||
postfix \
|
||||
postgresql-client \
|
||||
postgresql-libs \
|
||||
krb5-libs \
|
||||
libjpeg-turbo \
|
||||
shadow \
|
||||
sudo \
|
||||
libedit \
|
||||
libldap \
|
||||
libcap && \
|
||||
pip install --upgrade pip && \
|
||||
pip install --no-cache-dir -r requirements.txt && \
|
||||
pip install --no-cache-dir gunicorn==19.9.0 && \
|
||||
apk del --no-cache build-deps && \
|
||||
echo "pgadmin ALL = NOPASSWD: /usr/sbin/postfix start" > /etc/sudoers.d/postfix
|
||||
|
||||
# We need the v12 libpq, which is only in the 'edge' build of Alpine at present
|
||||
COPY --from=pg12-builder /usr/local/lib/libpq.so.5.12 /usr/lib/
|
||||
RUN ln -sf /usr/lib/libpq.so.5.12 /usr/lib/libpq.so.5
|
||||
|
||||
# Copy the runner script
|
||||
COPY pkg/docker/run_pgadmin.py /pgadmin4
|
||||
COPY pkg/docker/entrypoint.sh /entrypoint.sh
|
||||
|
||||
# Precompile and optimize python code to save time and space on startup
|
||||
RUN python -O -m compileall -x node_modules /pgadmin4
|
||||
|
||||
RUN groupadd -g 5050 pgadmin && \
|
||||
useradd -r -u 5050 -g pgadmin pgadmin && \
|
||||
/venv/bin/python3 -m pip install --no-cache-dir gunicorn && \
|
||||
find / -type d -name '__pycache__' -exec rm -rf {} + && \
|
||||
useradd -r -u 5050 -g root -s /sbin/nologin pgadmin && \
|
||||
mkdir -p /var/lib/pgadmin && \
|
||||
chown pgadmin:pgadmin /var/lib/pgadmin && \
|
||||
mkdir -p /var/log/pgadmin && \
|
||||
chown pgadmin:pgadmin /var/log/pgadmin && \
|
||||
chown pgadmin:root /var/lib/pgadmin && \
|
||||
chmod g=u /var/lib/pgadmin && \
|
||||
touch /pgadmin4/config_distro.py && \
|
||||
chown pgadmin:pgadmin /pgadmin4/config_distro.py && \
|
||||
setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/python3.8
|
||||
chown pgadmin:root /pgadmin4/config_distro.py && \
|
||||
chmod g=u /pgadmin4/config_distro.py && \
|
||||
chmod g=u /etc/passwd && \
|
||||
setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/python3.11 && \
|
||||
echo "pgadmin ALL = NOPASSWD: /usr/sbin/postfix start" > /etc/sudoers.d/postfix && \
|
||||
echo "pgadminr ALL = NOPASSWD: /usr/sbin/postfix start" >> /etc/sudoers.d/postfix
|
||||
|
||||
USER pgadmin
|
||||
|
||||
# Finish up
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
pgAdmin 4
|
||||
|
||||
Copyright (C) 2013 - 2020, The pgAdmin Development Team
|
||||
Copyright (C) 2013 - 2023, The pgAdmin Development Team
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose, without fee, and without a written agreement is
|
||||
|
||||
@@ -3,6 +3,7 @@ SETLOCAL
|
||||
|
||||
SET WD=%CD%
|
||||
SET "BUILDROOT=%WD%\win-build"
|
||||
SET "TMPDIR=%WD%\win-temp"
|
||||
SET "DISTROOT=%WD%\dist"
|
||||
|
||||
SET CMDOPTIONS=""
|
||||
@@ -18,19 +19,13 @@ IF "%1" == "clean" (
|
||||
EXIT /B %ERRORLEVEL%
|
||||
)
|
||||
|
||||
set "ARCHITECTURE=x64"
|
||||
if "%Platform%" == "X86" (
|
||||
set "ARCHITECTURE=x86"
|
||||
)
|
||||
|
||||
REM Main build sequence
|
||||
CALL :SET_ENVIRONMENT
|
||||
CALL :VALIDATE_ENVIRONMENT || EXIT /B 1
|
||||
CALL :CLEAN || EXIT /B 1
|
||||
CALL :CREATE_VIRTUAL_ENV || EXIT /B 1
|
||||
CALL :CREATE_RUNTIME_ENV || EXIT /B 1
|
||||
CALL :CREATE_PYTHON_ENV || EXIT /B 1
|
||||
CALL :CLEANUP_ENV || EXIT /B 1
|
||||
CALL :CREATE_RUNTIME_ENV || EXIT /B 1
|
||||
CALL :CREATE_INSTALLER || EXIT /B 1
|
||||
CALL :SIGN_INSTALLER || EXIT /B 1
|
||||
|
||||
@@ -42,7 +37,10 @@ REM Main build sequence Ends
|
||||
ECHO Removing build directory...
|
||||
IF EXIST "%BUILDROOT%" RD "%BUILDROOT%" /S /Q > nul || EXIT /B 1
|
||||
|
||||
ECHO Removing temp build directory...
|
||||
ECHO Removing tmp directory...
|
||||
IF EXIST "%TMPDIR%" RD "%TMPDIR%" /S /Q > nul || EXIT /B 1
|
||||
|
||||
ECHO Removing installer build directory...
|
||||
IF EXIST "%WD%\pkg\win32\Output" rd "%WD%\pkg\win32\Output" /S /Q > nul || EXIT /B 1
|
||||
|
||||
ECHO Removing installer configuration script...
|
||||
@@ -54,14 +52,14 @@ REM Main build sequence Ends
|
||||
:SET_ENVIRONMENT
|
||||
ECHO Configuring the environment...
|
||||
IF "%PGADMIN_PYTHON_DIR%" == "" SET "PGADMIN_PYTHON_DIR=C:\Python38"
|
||||
IF "%PGADMIN_QT_DIR%" == "" SET "PGADMIN_QT_DIR=C:\Qt\5.14.2\msvc2017_64"
|
||||
IF "%PGADMIN_KRB5_DIR%" == "" SET "PGADMIN_KRB5_DIR=C:\Program Files\MIT\Kerberos"
|
||||
IF "%PGADMIN_POSTGRES_DIR%" == "" SET "PGADMIN_POSTGRES_DIR=C:\Program Files (x86)\PostgreSQL\12"
|
||||
IF "%PGADMIN_INNOTOOL_DIR%" == "" SET "PGADMIN_INNOTOOL_DIR=C:\Program Files (x86)\Inno Setup 6"
|
||||
IF "%PGADMIN_VCREDIST_DIR%" == "" SET "PGADMIN_VCREDIST_DIR=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Redist\MSVC\14.16.27012"
|
||||
IF "%PGADMIN_SIGNTOOL_DIR%" == "" SET "PGADMIN_SIGNTOOL_DIR=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64"
|
||||
|
||||
REM Set REDIST_NAME (the filename)
|
||||
set "VCREDIST_FILE=vcredist_%ARCHITECTURE%.exe"
|
||||
set "VCREDIST_FILE=vcredist_x64.exe"
|
||||
|
||||
REM Set additional variables we need
|
||||
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_RELEASE =" %WD%\web\config.py') DO SET APP_MAJOR=%%a
|
||||
@@ -73,13 +71,13 @@ REM Main build sequence Ends
|
||||
FOR /F "tokens=2* DELims='" %%a IN ('findstr /C:"APP_NAME =" web\config.py') DO SET APP_NAME=%%a
|
||||
FOR /f "tokens=1 DELims=." %%G IN ('%PGADMIN_PYTHON_DIR%/python.exe -c "print('%APP_NAME%'.lower().replace(' ', ''))"') DO SET APP_SHORTNAME=%%G
|
||||
SET APP_VERSION=%APP_MAJOR%.%APP_MINOR%
|
||||
SET INSTALLERNAME=%APP_SHORTNAME%-%APP_MAJOR%.%APP_MINOR%-%APP_VERSION_SUFFIX%-%ARCHITECTURE%.exe
|
||||
IF "%APP_VERSION_SUFFIX%" == "" SET INSTALLERNAME=%APP_SHORTNAME%-%APP_MAJOR%.%APP_MINOR%-%ARCHITECTURE%.exe
|
||||
SET INSTALLERNAME=%APP_SHORTNAME%-%APP_MAJOR%.%APP_MINOR%-%APP_VERSION_SUFFIX%-x64.exe
|
||||
IF "%APP_VERSION_SUFFIX%" == "" SET INSTALLERNAME=%APP_SHORTNAME%-%APP_MAJOR%.%APP_MINOR%-x64.exe
|
||||
|
||||
REM get Python version for the runtime build ex. 2.7.1 will be 27
|
||||
REM get Python version for the runtime build ex. 3.9.2 will be 39
|
||||
FOR /f "tokens=1 DELims=." %%G IN ('%PGADMIN_PYTHON_DIR%/python.exe -c "import sys; print(sys.version.split(' ')[0])"') DO SET PYTHON_MAJOR=%%G
|
||||
FOR /f "tokens=2 DELims=." %%G IN ('%PGADMIN_PYTHON_DIR%/python.exe -c "import sys; print(sys.version.split(' ')[0])"') DO SET PYTHON_MINOR=%%G
|
||||
SET "PYTHON_VERSION=%PYTHON_MAJOR%%PYTHON_MINOR%"
|
||||
FOR /f "tokens=3 DELims=." %%G IN ('%PGADMIN_PYTHON_DIR%/python.exe -c "import sys; print(sys.version.split(' ')[0])"') DO SET PYTHON_REVISION=%%G
|
||||
|
||||
EXIT /B 0
|
||||
|
||||
@@ -93,10 +91,9 @@ REM Main build sequence Ends
|
||||
ECHO Installer name: %INSTALLERNAME%
|
||||
ECHO.
|
||||
ECHO Python directory: %PGADMIN_PYTHON_DIR%
|
||||
ECHO Python DLL: %PGADMIN_PYTHON_DIR%\Python%PYTHON_VERSION%.dll
|
||||
ECHO Python version: %PYTHON_MAJOR%.%PYTHON_MINOR%
|
||||
ECHO Python version: %PYTHON_MAJOR%.%PYTHON_MINOR%.%PYTHON_REVISION%
|
||||
ECHO.
|
||||
ECHO Qt directory: %PGADMIN_QT_DIR%
|
||||
ECHO KRB5 directory: %PGADMIN_KRB5_DIR%
|
||||
ECHO PostgreSQL directory: %PGADMIN_POSTGRES_DIR%
|
||||
ECHO.
|
||||
ECHO VC++ redist directory: %PGADMIN_VCREDIST_DIR%
|
||||
@@ -123,15 +120,9 @@ REM Main build sequence Ends
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
IF NOT EXIST "%PGADMIN_QT_DIR%" (
|
||||
ECHO !PGADMIN_QT_DIR! does not exist.
|
||||
ECHO Please install Qt and set the PGADMIN_QT_DIR environment variable.
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
IF NOT EXIST "%PGADMIN_QT_DIR%\bin\qmake.exe" (
|
||||
ECHO !QMAKE! does not exist.
|
||||
ECHO Please install Qt and set the PGADMIN_QT_DIR environment variable.
|
||||
IF NOT EXIST "%PGADMIN_KRB5_DIR%" (
|
||||
ECHO !PGADMIN_KRB5_DIR! does not exist.
|
||||
ECHO Please install MIT Kerberos for Windows and set the PGADMIN_KRB5_DIR environment variable.
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
@@ -141,12 +132,6 @@ REM Main build sequence Ends
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
IF NOT EXIST "%PGADMIN_PYTHON_DIR%\Python%PYTHON_VERSION%.dll" (
|
||||
ECHO !PGADMIN_PYTHON_DIR!\Python!PYTHON_VERSION!.dll does not exist.
|
||||
ECHO Please check your Python installation is complete.
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
IF NOT EXIST "%PGADMIN_POSTGRES_DIR%" (
|
||||
ECHO !PGADMIN_POSTGRES_DIR! does not exist.
|
||||
ECHO Please install PostgreSQL and set the PGADMIN_POSTGRES_DIR environment variable.
|
||||
@@ -166,46 +151,75 @@ REM Main build sequence Ends
|
||||
|
||||
:CREATE_VIRTUAL_ENV
|
||||
ECHO Creating virtual environment...
|
||||
IF NOT EXIST "%BUILDROOT%" MKDIR "%BUILDROOT%"
|
||||
|
||||
CD "%BUILDROOT%"
|
||||
IF NOT EXIST "%TMPDIR%" MKDIR "%TMPDIR%"
|
||||
|
||||
CD "%TMPDIR%"
|
||||
|
||||
REM Note that we must use virtualenv.exe here, as the venv module doesn't allow python.exe to relocate.
|
||||
"%PGADMIN_PYTHON_DIR%\Scripts\virtualenv.exe" venv
|
||||
|
||||
XCOPY /S /I /E /H /Y "%PGADMIN_PYTHON_DIR%\DLLs" "%BUILDROOT%\venv\DLLs" > nul || EXIT /B 1
|
||||
XCOPY /S /I /E /H /Y "%PGADMIN_PYTHON_DIR%\Lib" "%BUILDROOT%\venv\Lib" > nul || EXIT /B 1
|
||||
XCOPY /S /I /E /H /Y "%PGADMIN_PYTHON_DIR%\DLLs" "%TMPDIR%\venv\DLLs" > nul || EXIT /B 1
|
||||
XCOPY /S /I /E /H /Y "%PGADMIN_PYTHON_DIR%\Lib" "%TMPDIR%\venv\Lib" > nul || EXIT /B 1
|
||||
|
||||
ECHO Activating virtual environment - %BUILDROOT%\venv...
|
||||
CALL "%BUILDROOT%\venv\Scripts\activate" || EXIT /B 1
|
||||
ECHO Activating virtual environment - %TMPDIR%\venv...
|
||||
CALL "%TMPDIR%\venv\Scripts\activate" || EXIT /B 1
|
||||
|
||||
ECHO Installing dependencies...
|
||||
CALL pip install -r "%WD%\requirements.txt" || EXIT /B 1
|
||||
CALL pip install sphinx || EXIT /B 1
|
||||
|
||||
REM If this is Python 3.6+, we need to remove the hack above or it will break qmake. Sigh.
|
||||
IF %PYTHON_VERSION% GEQ 36 SET CL=
|
||||
CALL python -m pip install --upgrade pip || EXIT /B 1
|
||||
CALL pip install --only-binary=cryptography -r "%WD%\requirements.txt" || EXIT /B 1
|
||||
|
||||
CD %WD%
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:CREATE_PYTHON_ENV
|
||||
ECHO Staging Python...
|
||||
MKDIR "%BUILDROOT%\python\Lib" || EXIT /B 1
|
||||
|
||||
ECHO Downloading embedded Python...
|
||||
REM Get the python embeddable and extract it to %BUILDROOT%\python
|
||||
CD "%TMPDIR%
|
||||
%PGADMIN_PYTHON_DIR%\python -c "import sys; from urllib.request import urlretrieve; urlretrieve('https://www.python.org/ftp/python/' + sys.version.split(' ')[0] + '/python-' + sys.version.split(' ')[0] + '-embed-amd64.zip', 'python-embedded.zip')" || EXIT /B 1
|
||||
%PGADMIN_PYTHON_DIR%\python -c "import zipfile; z = zipfile.ZipFile('python-embedded.zip', 'r'); z.extractall('../win-build/python/')" || EXIT /B 1
|
||||
|
||||
ECHO Copying site-packages...
|
||||
XCOPY /S /I /E /H /Y "%TMPDIR%\venv\Lib\site-packages" "%BUILDROOT%\python\Lib\site-packages" > nul || EXIT /B 1
|
||||
|
||||
REM NOTE: There is intentionally no space after "site" in the line below, to prevent Python barfing if there's one in the file
|
||||
ECHO import site>> "%BUILDROOT%\python\python%PYTHON_MAJOR%%PYTHON_MINOR%._pth"
|
||||
|
||||
ECHO Staging Kerberos components...
|
||||
COPY "%PGADMIN_KRB5_DIR%\bin\kinit.exe" "%BUILDROOT%\python" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_KRB5_DIR%\bin\krb5_64.dll" "%BUILDROOT%\python" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_KRB5_DIR%\bin\comerr64.dll" "%BUILDROOT%\python" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_KRB5_DIR%\bin\k5sprt64.dll" "%BUILDROOT%\python" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_KRB5_DIR%\bin\gssapi64.dll" "%BUILDROOT%\python" > nul || EXIT /B 1
|
||||
|
||||
ECHO Cleaning up unnecessary .pyc and .pyo files...
|
||||
FOR /R "%BUILDROOT%\python" %%f in (*.pyc *.pyo) do DEL /q "%%f" 1> nul 2>&1
|
||||
ECHO Removing tests...
|
||||
FOR /R "%BUILDROOT%\python\Lib" %%f in (test tests) do RD /Q /S "%%f" 1> nul 2>&1
|
||||
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:CREATE_RUNTIME_ENV
|
||||
IF NOT EXIST "%BUILDROOT%" MKDIR "%BUILDROOT%"
|
||||
MKDIR "%BUILDROOT%\runtime"
|
||||
|
||||
CD "%WD%\web"
|
||||
|
||||
ECHO Installing javascript dependencies...
|
||||
CALL yarn install || EXIT /B 1
|
||||
|
||||
ECHO Bundling javascript...
|
||||
CALL yarn run bundle || EXIT /B 1
|
||||
|
||||
ECHO Removing webpack caches...
|
||||
RD /Q /S "%WD%\web\pgadmin\static\js\generated\.cache" 1> nul 2>&1
|
||||
|
||||
ECHO Copying web directory...
|
||||
XCOPY /S /I /E /H /Y "%WD%\web" "%BUILDROOT%\web" > nul || EXIT /B 1
|
||||
ROBOCOPY /S "%WD%\web" "%BUILDROOT%\web" > nul
|
||||
CALL :CHECK_ROBOCOPY_ERROR
|
||||
|
||||
ECHO Installing javascript dependencies...
|
||||
CD "%BUILDROOT%\web"
|
||||
CALL yarn install || EXIT /B 1
|
||||
|
||||
ECHO Bundling javascript...
|
||||
CALL yarn run bundle || EXIT /B 1
|
||||
|
||||
ECHO Cleaning up unnecessary .pyc and .pyo files...
|
||||
FOR /R "%BUILDROOT%\web" %%f in (*.pyc *.pyo) do DEL /q "%%f" 1> nul 2>&1
|
||||
@@ -232,51 +246,60 @@ REM Main build sequence Ends
|
||||
ECHO } >> "%BUILDROOT%\web\config_distro.py"
|
||||
|
||||
ECHO Building docs...
|
||||
CALL pip install sphinx || EXIT /B 1
|
||||
CALL pip install sphinxcontrib-youtube || EXIT /B 1
|
||||
MKDIR "%BUILDROOT%\docs\en_US\html"
|
||||
CD "%WD%\docs\en_US"
|
||||
CALL "%BUILDROOT%\venv\Scripts\python.exe" build_code_snippet.py || EXIT /B 1
|
||||
CALL "%BUILDROOT%\venv\Scripts\sphinx-build.exe" "%WD%\docs\en_US" "%BUILDROOT%\docs\en_US\html" || EXIT /B 1
|
||||
CALL "%TMPDIR%\venv\Scripts\python.exe" build_code_snippet.py || EXIT /B 1
|
||||
CALL "%TMPDIR%\venv\Scripts\sphinx-build.exe" "%WD%\docs\en_US" "%BUILDROOT%\docs\en_US\html" || EXIT /B 1
|
||||
|
||||
ECHO Removing Sphinx
|
||||
CALL pip uninstall -y sphinx Pygments alabaster colorama docutils imagesize requests snowballstemmer
|
||||
REM Remove unnecessary doc files
|
||||
DEL /q "%BUILDROOT%\docs\en_US\html\_static\*.png" 1> nul 2>&1
|
||||
RD /Q /S "%BUILDROOT%\docs\en_US\html\_sources" 1> nul 2>&1
|
||||
|
||||
ECHO Assembling runtime environment...
|
||||
CD "%WD%\runtime"
|
||||
ECHO Staging runtime components...
|
||||
XCOPY /S /I /E /H /Y "%WD%\runtime\assets" "%BUILDROOT%\runtime\assets" > nul || EXIT /B 1
|
||||
XCOPY /S /I /E /H /Y "%WD%\runtime\src" "%BUILDROOT%\runtime\src" > nul || EXIT /B 1
|
||||
|
||||
ECHO Running qmake...
|
||||
CALL set "PGADMIN_PYTHON_DIR=%PGADMIN_PYTHON_DIR%" && "%PGADMIN_QT_DIR%\bin\qmake.exe" || EXIT /B 1
|
||||
COPY "%WD%\runtime\package.json" "%BUILDROOT%\runtime\" > nul || EXIT /B 1
|
||||
CD "%BUILDROOT%\runtime\"
|
||||
CALL yarn install --production=true || EXIT /B 1
|
||||
|
||||
ECHO Cleaning the build directory...
|
||||
CALL nmake clean || EXIT /B 1
|
||||
ECHO Downloading NWjs to %TMPDIR%...
|
||||
REM Get a fresh copy of nwjs.
|
||||
REM NOTE: The nw download servers seem to be very unreliable, so at the moment we're using wget which retries
|
||||
|
||||
ECHO Running make...
|
||||
CALL nmake || EXIT /B 1
|
||||
REM YARN
|
||||
REM CALL yarn --cwd "%TMPDIR%" add nw || EXIT /B
|
||||
REM YARN END
|
||||
|
||||
ECHO Staging pgAdmin4.exe...
|
||||
COPY "%WD%\runtime\release\pgAdmin4.exe" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
REM WGET
|
||||
FOR /f "tokens=2 delims='" %%i IN ('yarn info nw ^| findstr "latest: "') DO SET "NW_VERSION=%%i"
|
||||
:GET_NW
|
||||
wget https://dl.nwjs.io/v%NW_VERSION%/nwjs-v%NW_VERSION%-win-x64.zip -O "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip"
|
||||
IF %ERRORLEVEL% NEQ 0 GOTO GET_NW
|
||||
|
||||
ECHO Staging Qt components...
|
||||
COPY "%PGADMIN_QT_DIR%\bin\Qt5Core.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_QT_DIR%\bin\Qt5Gui.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_QT_DIR%\bin\Qt5Widgets.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_QT_DIR%\bin\Qt5Network.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_QT_DIR%\bin\Qt5Svg.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
MKDIR "%BUILDROOT%\runtime\platforms" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_QT_DIR%\plugins\platforms\qwindows.dll" "%BUILDROOT%\runtime\platforms" > nul || EXIT /B 1
|
||||
MKDIR "%BUILDROOT%\runtime\imageformats" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_QT_DIR%\plugins\imageformats\qsvg.dll" "%BUILDROOT%\runtime\imageformats" > nul || EXIT /B 1
|
||||
ECHO [Paths] > "%BUILDROOT%\runtime\qt.conf"
|
||||
ECHO Plugins=plugins >> "%BUILDROOT%\runtime\qt.conf"
|
||||
tar -C "%TMPDIR%" -xvf "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip" || EXIT /B 1
|
||||
REM WGET END
|
||||
|
||||
REM YARN
|
||||
REM XCOPY /S /I /E /H /Y "%TMPDIR%\node_modules\nw\nwjs\*" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
REM YARN END
|
||||
|
||||
REM WGET
|
||||
XCOPY /S /I /E /H /Y "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64\*" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
REM WGET END
|
||||
|
||||
MOVE "%BUILDROOT%\runtime\nw.exe" "%BUILDROOT%\runtime\pgAdmin4.exe"
|
||||
|
||||
ECHO Replacing executable icon...
|
||||
CALL yarn --cwd "%TMPDIR%" add winresourcer || EXIT /B
|
||||
"%TMPDIR%\node_modules\winresourcer\bin\Resourcer.exe" -op:upd -src:"%BUILDROOT%\runtime\pgAdmin4.exe" -type:Icongroup -name:IDR_MAINFRAME -file:"%WD%\pkg\win32\Resources\pgAdmin4.ico"
|
||||
|
||||
ECHO Staging PostgreSQL components...
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libpq.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
IF "%ARCHITECTURE%" == "x64" (
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libcrypto-1_1-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libssl-1_1-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
) ELSE (
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libcrypto-1_1.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libssl-1_1.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
)
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libcrypto-1_1-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libssl-1_1-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%PGADMIN_POSTGRES_DIR%\bin\libintl-*.dll" COPY "%PGADMIN_POSTGRES_DIR%\bin\libintl-*.dll" "%BUILDROOT%\runtime" > nul
|
||||
IF EXIST "%PGADMIN_POSTGRES_DIR%\bin\libiconv-*.dll" COPY "%PGADMIN_POSTGRES_DIR%\bin\libiconv-*.dll" "%BUILDROOT%\runtime" > nul
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\zlib.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
@@ -291,22 +314,6 @@ REM Main build sequence Ends
|
||||
|
||||
CD %WD%
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:CREATE_PYTHON_ENV
|
||||
ECHO Staging Python...
|
||||
COPY %PGADMIN_PYTHON_DIR%\python%PYTHON_VERSION%.dll "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY %PGADMIN_PYTHON_DIR%\python.exe "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY %PGADMIN_PYTHON_DIR%\pythonw.exe "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
|
||||
ECHO Cleaning up unnecessary .pyc and .pyo files...
|
||||
FOR /R "%BUILDROOT%\venv" %%f in (*.pyc *.pyo) do DEL /q "%%f" 1> nul 2>&1
|
||||
ECHO Removing tests...
|
||||
FOR /R "%BUILDROOT%\venv\Lib" %%f in (test tests) do RD /Q /S "%%f" 1> nul 2>&1
|
||||
ECHO Removing TCL...
|
||||
RD /Q /S "%BUILDROOT%\venv\tcl" 1> nul 2>&1
|
||||
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:CREATE_INSTALLER
|
||||
@@ -319,16 +326,9 @@ REM Main build sequence Ends
|
||||
CD "%WD%\pkg\win32"
|
||||
|
||||
ECHO Processing installer configuration script...
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in" "-o" "%WD%\pkg\win32\installer.iss.in_stage1" "-s" MYAPP_NAME -r """%APP_NAME%"""
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage1" "-o" "%WD%\pkg\win32\installer.iss.in_stage2" "-s" MYAPP_FULLVERSION -r """%APP_VERSION%"""
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage2" "-o" "%WD%\pkg\win32\installer.iss.in_stage3" "-s" MYAPP_VERSION -r """v%APP_MAJOR%"""
|
||||
|
||||
SET ARCMODE=
|
||||
IF "%ARCHITECTURE%" == "x64" (
|
||||
set ARCMODE="x64"
|
||||
)
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage3" "-o" "%WD%\pkg\win32\installer.iss.in_stage4" "-s" MYAPP_ARCHITECTURESMODE -r """%ARCMODE%"""
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage4" "-o" "%WD%\pkg\win32\installer.iss" "-s" MYAPP_VCDIST -r """%PGADMIN_VCREDIST_DIRNAME%\%VCREDIST_FILE%"""
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in" "-o" "%WD%\pkg\win32\installer.iss.in_stage1" "-s" MYAPP_FULLVERSION -r """%APP_VERSION%"""
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage1" "-o" "%WD%\pkg\win32\installer.iss.in_stage2" "-s" MYAPP_VERSION -r """v%APP_MAJOR%"""
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage2" "-o" "%WD%\pkg\win32\installer.iss" "-s" MYAPP_VCDIST -r """%PGADMIN_VCREDIST_DIRNAME%\%VCREDIST_FILE%"""
|
||||
|
||||
ECHO Cleaning up...
|
||||
DEL /s "%WD%\pkg\win32\installer.iss.in_stage*" > nul
|
||||
@@ -337,7 +337,7 @@ REM Main build sequence Ends
|
||||
CALL "%PGADMIN_INNOTOOL_DIR%\ISCC.exe" /q "%WD%\pkg\win32\installer.iss" || EXIT /B 1
|
||||
|
||||
ECHO Renaming installer...
|
||||
MOVE "%WD%\pkg\win32\Output\Setup.exe" "%DISTROOT%\%INSTALLERNAME%" > nul || EXIT /B 1
|
||||
MOVE "%WD%\pkg\win32\Output\pgadmin4-setup.exe" "%DISTROOT%\%INSTALLERNAME%" > nul || EXIT /B 1
|
||||
|
||||
ECHO Location - %DISTROOT%\%INSTALLERNAME%
|
||||
ECHO Installer generated successfully.
|
||||
@@ -348,7 +348,7 @@ REM Main build sequence Ends
|
||||
|
||||
:SIGN_INSTALLER
|
||||
ECHO Attempting to sign the installer...
|
||||
CALL "%PGADMIN_SIGNTOOL_DIR%\signtool.exe" sign /t http://timestamp.verisign.com/scripts/timstamp.dll "%DISTROOT%\%INSTALLERNAME%"
|
||||
CALL "%PGADMIN_SIGNTOOL_DIR%\signtool.exe" sign /tr http://timestamp.digicert.com "%DISTROOT%\%INSTALLERNAME%"
|
||||
IF %ERRORLEVEL% NEQ 0 (
|
||||
ECHO.
|
||||
ECHO ************************************************************
|
||||
@@ -360,14 +360,6 @@ REM Main build sequence Ends
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:CLEANUP_ENV
|
||||
ECHO Cleaning the build environment...
|
||||
RD "%BUILDROOT%\venv\Include" /S /Q 1> nul 2>&1
|
||||
DEL /s "%BUILDROOT%\venv\pip-selfcheck.json" 1> nul 2>&1
|
||||
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:USAGE
|
||||
ECHO Invalid command line options.
|
||||
ECHO Usage: "Make.bat [clean]"
|
||||
@@ -375,3 +367,6 @@ REM Main build sequence Ends
|
||||
|
||||
EXIT /B 1
|
||||
|
||||
:CHECK_ROBOCOPY_ERROR
|
||||
IF %ERRORLEVEL% GEQ 8 EXIT /B %ERRORLEVEL%
|
||||
EXIT /B 0
|
||||
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2018, The pgAdmin Development Team
|
||||
# Copyright (C) 2013 - 2023, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
#########################################################################
|
||||
@@ -18,22 +18,19 @@ APP_REVISION := $(shell grep ^APP_REVISION web/config.py | awk -F"=" '{print $$N
|
||||
#########################################################################
|
||||
|
||||
# Include only platform-independent builds in all
|
||||
all: docs pip src runtime
|
||||
all: docs pip src
|
||||
|
||||
appbundle: docs
|
||||
appbundle:
|
||||
./pkg/mac/build.sh
|
||||
|
||||
install-node:
|
||||
cd web && npm install
|
||||
cd web && npm audit fix
|
||||
rm -f web/yarn.lock
|
||||
cd web && yarn import
|
||||
# Commented the below line to avoid vulnerability in lodash package.
|
||||
# Refer https://www.npmjs.com/advisories/1523.
|
||||
# Once fixed we will uncomment it.
|
||||
# cd web && yarn audit
|
||||
rm -f package-lock.json
|
||||
rm -f web/package-lock.json
|
||||
cd web && yarn install
|
||||
|
||||
install-python:
|
||||
./tools/setup-python-env.sh
|
||||
|
||||
install-python-testing:
|
||||
./tools/setup-python-env.sh --test
|
||||
|
||||
bundle:
|
||||
cd web && yarn run bundle
|
||||
@@ -85,23 +82,13 @@ check-js: install-node linter
|
||||
check-js-coverage:
|
||||
cd web && yarn run test:karma-coverage
|
||||
|
||||
runtime-debug:
|
||||
cd runtime && qmake CONFIG+=debug && make
|
||||
|
||||
runtime:
|
||||
cd runtime && qmake CONFIG+=release && make
|
||||
|
||||
# Include all clean sub-targets in clean
|
||||
clean: clean-appbundle clean-debian clean-dist clean-docs clean-node clean-pip clean-redhat clean-src clean-runtime
|
||||
clean: clean-appbundle clean-debian clean-dist clean-docs clean-node clean-pip clean-redhat clean-src
|
||||
rm -rf web/pgadmin/static/js/generated/*
|
||||
rm -rf web/pgadmin/static/js/generated/.cache
|
||||
rm -rf web/pgadmin/static/css/generated/*
|
||||
rm -rf web/pgadmin/static/css/generated/.cache
|
||||
|
||||
clean-runtime:
|
||||
if [ -f runtime/Makefile ]; then (cd runtime && make clean); fi;
|
||||
rm -rf build-*
|
||||
|
||||
clean-appbundle:
|
||||
rm -rf mac-build/
|
||||
|
||||
@@ -131,7 +118,7 @@ debian:
|
||||
|
||||
docker:
|
||||
echo $(APP_NAME)
|
||||
docker build -t ${APP_NAME} -t $(APP_NAME):latest -t $(APP_NAME):$(APP_RELEASE) -t $(APP_NAME):$(APP_RELEASE).$(APP_REVISION) .
|
||||
docker build --pull -t ${APP_NAME} -t $(APP_NAME):latest -t $(APP_NAME):$(APP_RELEASE) -t $(APP_NAME):$(APP_RELEASE).$(APP_REVISION) .
|
||||
|
||||
docs:
|
||||
LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 $(MAKE) -C docs/en_US -f Makefile.sphinx html
|
||||
@@ -151,7 +138,7 @@ msg-extract:
|
||||
cd web && pybabel extract -F babel.cfg -o pgadmin/messages.pot pgadmin
|
||||
|
||||
msg-update:
|
||||
cd web && pybabel update -i pgadmin/messages.pot -d pgadmin/translations
|
||||
cd web && pybabel update --no-fuzzy-matching -i pgadmin/messages.pot -d pgadmin/translations
|
||||
|
||||
.PHONY: docs
|
||||
|
||||
|
||||
@@ -1,321 +0,0 @@
|
||||
pgAdmin 4
|
||||
=========
|
||||
|
||||
pgAdmin 4 is a rewrite of the popular pgAdmin3 management tool for the
|
||||
PostgreSQL (http://www.postgresql.org) database.
|
||||
|
||||
In the following documentation and examples, "$PGADMIN4_SRC/" is used to denote
|
||||
the top-level directory of a copy of the pgAdmin source tree, either from a
|
||||
tarball or a git checkout.
|
||||
|
||||
Architecture
|
||||
------------
|
||||
|
||||
pgAdmin 4 is written as a web application in Python, using jQuery and Bootstrap
|
||||
for the client side processing and UI. On the server side, Flask is being
|
||||
utilised.
|
||||
|
||||
Although developed using web technologies, pgAdmin 4 can be deployed either on
|
||||
a web server using a browser, or standalone on a workstation. The runtime/
|
||||
subdirectory contains a QT based runtime application intended to allow this -
|
||||
it is essentially a Python application server that runs in the system tray
|
||||
and allows the user to connect to the application using their web browser.
|
||||
|
||||
Building the Runtime
|
||||
--------------------
|
||||
|
||||
To build the runtime, the following packages must be installed:
|
||||
|
||||
- QT 5 (Use the VC++ build on Windows, not MinGW).
|
||||
- Python 3.4+
|
||||
|
||||
An environment variable named PGADMIN_PYTHON_DIR must be set to the directory
|
||||
in which Python has been installed, for example:
|
||||
|
||||
- /usr
|
||||
- /usr/local/python-3.8
|
||||
- C:\Python38
|
||||
|
||||
Assuming both qmake is in the path:
|
||||
|
||||
dpage@hal:~/git/pgadmin4$ cd runtime
|
||||
dpage@hal:~/git/pgadmin4/runtime$ export PGADMIN_PYTHON_DIR=/opt/local
|
||||
dpage@hal:~/git/pgadmin4/runtime$ qmake
|
||||
Project MESSAGE: ==================================
|
||||
Project MESSAGE: Configuring the pgAdmin 4 runtime.
|
||||
Project MESSAGE: ==================================
|
||||
Project MESSAGE: Qt version: 5
|
||||
Project MESSAGE: Platform: macOS
|
||||
Project MESSAGE: Python executable: /opt/local/bin/python3
|
||||
Project MESSAGE: Python version: 3.8 (38)
|
||||
Project MESSAGE: Python config: /opt/local/bin/python3-config
|
||||
Project MESSAGE: CXXFLAGS: -pipe -stdlib=libc++ -I/opt/local/Library/Frameworks/Python.framework/Versions/3.8/include/python3.8 -I/opt/local/Library/Frameworks/Python.framework/Versions/3.8/include/python3.8
|
||||
Project MESSAGE: LDFLAGS: -stdlib=libc++ -L/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/config-3.8-darwin -ldl -framework CoreFoundation
|
||||
Project MESSAGE: LIBS: -lpython3.8 -ldl -framework CoreFoundation
|
||||
dpage@hal:~/git/pgadmin4/runtime$ make
|
||||
...
|
||||
|
||||
To build the runtime in debug mode, use the option below with qmake:
|
||||
$ qmake CONFIG+=debug
|
||||
|
||||
To build the runtime in release mode, use the option below with qmake:
|
||||
$ qmake CONFIG+=release
|
||||
|
||||
By default, the runtime application will be built in release mode.
|
||||
|
||||
On Linux, an executable called 'pgAdmin4' will be built, on Windows,
|
||||
'pgAdmin4.exe', and on Mac OS X, an app bundle called pgAdmin4.app will be
|
||||
created.
|
||||
|
||||
You can also use Qt Creator to build, develop and debug the runtime. Simply
|
||||
open the $PGADMIN4_SRC/runtime/pgAdmin4.pro project file in Qt Creator and
|
||||
configure the project with a supported version of Qt when prompted.
|
||||
|
||||
Create Database Migrations
|
||||
--------------------------
|
||||
|
||||
In order to make changes to the SQLite DB, navigate to the 'web' directory:
|
||||
|
||||
(pgadmin4) $ cd $PGADMIN4_SRC/web
|
||||
|
||||
Create a migration file with the following command:
|
||||
|
||||
(pgadmin4) $ FLASK_APP=pgAdmin4.py flask db revision
|
||||
|
||||
This will create a file in: $PGADMIN4_SRC/web/migrations/versions/ .
|
||||
Add any changes to the 'upgrade' function.
|
||||
Increment the SCHEMA_VERSION in $PGADMIN4_SRC/web/pgadmin/model/__init__.py file.
|
||||
|
||||
There is no need to increment the SETTINGS_SCHEMA_VERSION.
|
||||
|
||||
Configuring the Python Environment
|
||||
----------------------------------
|
||||
|
||||
In order to run the Python code, a suitable runtime environment is required.
|
||||
Python version 3.4 and later are currently supported. It is recommended that a
|
||||
Python Virtual Environment is setup for this purpose, rather than using the
|
||||
system Python environment. On Linux and Mac systems, the process is fairly
|
||||
simple - adapt as required for your distribution:
|
||||
|
||||
1) Install the virtualenv packages into the system Python environment
|
||||
|
||||
$ sudo pip install virtualenv virtualenvwrapper
|
||||
|
||||
2) Source the virtualenv wrapper tools script. You may want to add this command
|
||||
to your ~/.bash_profile file for future convenience:
|
||||
|
||||
$ source /usr/local/bin/virtualenvwrapper.sh
|
||||
|
||||
3) Create a virtual environment:
|
||||
|
||||
$ mkvirtualenv pgadmin4
|
||||
|
||||
To make use of the virtual environment in the future, use the following
|
||||
command to re-activate it:
|
||||
|
||||
$ workon pgadmin4
|
||||
|
||||
4) Ensure that a PostgreSQL installation's bin/ directory is in the path (so
|
||||
pg_config can be found for building psycopg2), and install the required
|
||||
packages:
|
||||
|
||||
(pgadmin4) $ PATH=$PATH:/usr/local/pgsql/bin pip install -r $PGADMIN4_SRC/requirements.txt
|
||||
|
||||
If you are planning to run the regression tests, you also need to install
|
||||
additional requirements from web/regression/requirements.txt:
|
||||
|
||||
(pgadmin4) $ pip install -r $PGADMIN4_SRC/web/regression/requirements.txt
|
||||
|
||||
5) Create a local configuration file for pgAdmin. Edit
|
||||
$PGADMIN4_SRC/web/config_local.py and add any desired configuration options
|
||||
(use the config.py file as a reference - any settings duplicated in
|
||||
config_local.py will override those in config.py). A typical development
|
||||
configuration may look like:
|
||||
|
||||
from config import *
|
||||
|
||||
# Debug mode
|
||||
DEBUG = True
|
||||
|
||||
# App mode
|
||||
SERVER_MODE = True
|
||||
|
||||
# Enable the test module
|
||||
MODULE_BLACKLIST.remove('test')
|
||||
|
||||
# Log
|
||||
CONSOLE_LOG_LEVEL = DEBUG
|
||||
FILE_LOG_LEVEL = DEBUG
|
||||
|
||||
DEFAULT_SERVER = '127.0.0.1'
|
||||
|
||||
UPGRADE_CHECK_ENABLED = True
|
||||
|
||||
# Use a different config DB for each server mode.
|
||||
if SERVER_MODE == False:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-desktop.db'
|
||||
)
|
||||
else:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-server.db'
|
||||
)
|
||||
|
||||
This configuration allows easy switching between server and desktop modes
|
||||
for testing.
|
||||
|
||||
6) The initial setup of the configuration database is interactive in server
|
||||
mode, and non-interactive in desktop mode. You can run it either by
|
||||
running:
|
||||
|
||||
(pgadmin4) $ python $PGADMIN4_SRC/web/setup.py
|
||||
|
||||
or by starting pgAdmin 4:
|
||||
|
||||
(pgadmin4) $ python $PGADMIN4_SRC/web/pgAdmin4.py
|
||||
|
||||
Whilst it is possible to automatically run setup in desktop mode by running
|
||||
the runtime, that will not work in server mode as the runtime doesn't allow
|
||||
command line interaction with the setup program.
|
||||
|
||||
At this point you will be able to run pgAdmin 4 from the command line in either
|
||||
server or desktop mode, and access it from a web browser using the URL shown in
|
||||
the terminal once pgAdmin has started up.
|
||||
|
||||
Setup of an environment on Windows is somewhat more complicated unfortunately,
|
||||
please see pkg/win32/README.txt for complete details.
|
||||
|
||||
Once a virtual environment has been created and enabled, setup can continue
|
||||
from step 4 above.
|
||||
|
||||
Building the Web Assets
|
||||
-----------------------
|
||||
|
||||
pgAdmin is dependent on a number of third party Javascript libraries. These,
|
||||
along with it's own Javascript code, SCSS/CSS code and images must be
|
||||
compiled into a "bundle" which is transferred to the browser for execution
|
||||
and rendering. This is far more efficient than simply requesting each
|
||||
asset as it's needed by the client.
|
||||
|
||||
To create the bundle, you will need the 'yarn' package management tool to be
|
||||
installed. Then, you can run the following commands on a *nix system to
|
||||
download the required packages and build the bundle:
|
||||
|
||||
(pgadmin4) $ cd $PGADMIN4_SRC
|
||||
(pgadmin4) $ make install-node
|
||||
(pgadmin4) $ make bundle
|
||||
|
||||
On Windows systems (where "make" is not available, the following commands
|
||||
can be used:
|
||||
|
||||
C:\> cd $PGADMIN4_SRC\web
|
||||
C:\$PGADMIN4_SRC\web> yarn install
|
||||
C:\$PGADMIN4_SRC\web> yarn run bundle
|
||||
|
||||
Creating pgAdmin themes
|
||||
-----------------------
|
||||
|
||||
To create a pgAdmin theme, you need to create a directory under
|
||||
web/pgadmin/static/scss/resources.
|
||||
Copy the sample file _theme.variables.scss.sample to the new directory and
|
||||
rename it to _theme.variables.scss. Change the desired hexadecimal values of
|
||||
the colors and bundle pgAdmin. You can also add a preview image in the theme
|
||||
directory with the name as <dir name>_preview.png. It is recommended that the
|
||||
preview image should not be larger in size as it may take time to load on slow
|
||||
networks. Run the yarn run bundle and you're good to go. No other changes are
|
||||
required, pgAdmin bundle will read the directory and create other required
|
||||
entries to make them available in preferences.
|
||||
|
||||
The name of the theme is derived from the directory name. Underscores (_) and
|
||||
hyphens (-) will be replaced with spaces and the result will be camel cased.
|
||||
|
||||
Configuring the Runtime
|
||||
-----------------------
|
||||
|
||||
The pgAdmin 4 Runtime maintains it's own Python Path to avoid conflicts with
|
||||
packages or other issues in the system Python installation. It will also search
|
||||
a number of known locations for the pgAdmin4.py file needed to run pgAdmin
|
||||
(including relative locations in a source code tree), however you can specify
|
||||
an alternate path if needed.
|
||||
|
||||
If either a working environment or pgAdmin4.py cannot be found at startup, the
|
||||
runtime will prompt for the locations. Alternatively, you can click the try
|
||||
icon and select the Configuration option to open the configuration dialogue.
|
||||
|
||||
On a Linux/Mac system, the Python Path will typically consist of a single path
|
||||
to the virtual environment's site-packages directory, e.g.
|
||||
|
||||
/Users/<USERNAME>/.virtualenvs/pgadmin4/lib/python3.8/site-packages
|
||||
|
||||
On Windows, multiple paths are likely to be required, e.g.
|
||||
|
||||
C:\Users\dpage\.virtualenvs\pgadmin4\Lib\site-packages;C:\Users\dpage\.virtualenvs\pgadmin4\Lib;C:\Users\dpage\.virtualenvs\pgadmin4\Lib\lib-tk;C:\Users\dpage\.virtualenvs\pgadmin4\DLLs
|
||||
|
||||
If you wish to specify a specific copy of the Python code to run, you can set
|
||||
the Application Path to a directory containing pgAdmin4.py, e.g.
|
||||
|
||||
/Users/<USERNAME>/git/pgadmin4-test/web/
|
||||
|
||||
Building the documentation
|
||||
--------------------------
|
||||
|
||||
In order to build the docs, an additional Python package is required in the
|
||||
virtual environment. This can be installed with the pip package manager:
|
||||
|
||||
$ workon pgadmin4
|
||||
(pgadmin4) $ pip install Sphinx
|
||||
|
||||
The docs can then be built using the Makefile in $PGADMIN4_SRC, e.g.
|
||||
|
||||
(pgadmin4) $ make docs
|
||||
|
||||
The output can be found in $PGADMIN4_SRC/docs/en_US/_build/html/index.html
|
||||
|
||||
Building packages
|
||||
-----------------
|
||||
|
||||
Most packages can be built using the Makefile in $PGADMIN4_SRC, provided all
|
||||
the setup and configuration above has been completed.
|
||||
|
||||
To build a source tarball:
|
||||
|
||||
(pgadmin4) $ make src
|
||||
|
||||
To build a PIP Wheel, activate either a Python 2 or Python 3 virtual
|
||||
environment as desired, configured with all the required packages, and then
|
||||
run:
|
||||
|
||||
(pgadmin4) $ make pip
|
||||
|
||||
To build the macOS AppBundle, please see pkg/mac/README.
|
||||
|
||||
To build the Windows installer, please see pkg/win32/README.txt.
|
||||
|
||||
Support
|
||||
-------
|
||||
|
||||
See https://www.pgadmin.org/support/ for support options.
|
||||
|
||||
Project info
|
||||
------------
|
||||
|
||||
The source code repository can be found here:
|
||||
|
||||
http://git.postgresql.org/gitweb/?p=pgadmin4.git;a=summary
|
||||
|
||||
A Redmine project for pgAdmin 4 can be found at the address below. A PostgreSQL
|
||||
community account is required to access this site. Please note that at present
|
||||
only project developers can log bug and feature requests:
|
||||
|
||||
https://redmine.postgresql.org/projects/pgadmin4
|
||||
|
||||
If you wish to discuss pgAdmin 4, or contribute to the project, please use the
|
||||
pgAdmin Hackers mailing list:
|
||||
|
||||
pgadmin-hackers@postgresql.org
|
||||
|
||||
--
|
||||
Dave Page
|
||||
pgAdmin Project Lead
|
||||
@@ -0,0 +1,286 @@
|
||||
# pgAdmin 4
|
||||
|
||||
pgAdmin 4 is a rewrite of the popular pgAdmin3 management tool for the
|
||||
PostgreSQL (http://www.postgresql.org) database.
|
||||
|
||||
In the following documentation and examples, *$PGADMIN4_SRC/* is used to denote
|
||||
the top-level directory of a copy of the pgAdmin source tree, either from a
|
||||
tarball or a git checkout.
|
||||
|
||||
## Architecture
|
||||
|
||||
pgAdmin 4 is written as a web application in Python, using jQuery and Bootstrap
|
||||
for the client side processing and UI. On the server side, Flask is being
|
||||
utilised.
|
||||
|
||||
Although developed using web technologies, pgAdmin 4 can be deployed either on
|
||||
a web server using a browser, or standalone on a workstation. The runtime/
|
||||
subdirectory contains an NWjs based runtime application intended to allow this,
|
||||
which will execute the Python server and display the UI.
|
||||
|
||||
## Building the Runtime
|
||||
|
||||
To build the runtime, the following packages must be installed:
|
||||
|
||||
* NodeJS 12+
|
||||
* Yarn
|
||||
|
||||
Change into the runtime directory, and run *yarn install*. This will install the
|
||||
dependencies required.
|
||||
|
||||
In order to use the runtime in a development environment, you'll need to copy
|
||||
*dev_config.json.in* file to *dev_config.json*, and edit the paths to the Python
|
||||
executable and *pgAdmin.py* file, otherwise the runtime will use the default
|
||||
paths it would expect to find in the standard package for your platform.
|
||||
|
||||
You can then execute the runtime by running something like:
|
||||
|
||||
```bash
|
||||
node_modules/nw/nwjs/nw .
|
||||
```
|
||||
|
||||
or on macOS:
|
||||
|
||||
```bash
|
||||
node_modules/nw/nwjs/nwjs.app/Contents/MacOS/nwjs .
|
||||
```
|
||||
|
||||
# Configuring the Python Environment
|
||||
|
||||
In order to run the Python code, a suitable runtime environment is required.
|
||||
Python version 3.7 and later are currently supported. It is recommended that a
|
||||
Python Virtual Environment is setup for this purpose, rather than using the
|
||||
system Python environment. On Linux and Mac systems, the process is fairly
|
||||
simple - adapt as required for your distribution:
|
||||
|
||||
1. Create a virtual environment in an appropriate directory. The last argument is
|
||||
the name of the environment; that can be changed as desired:
|
||||
|
||||
```bash
|
||||
$ python3 -m venv venv
|
||||
```
|
||||
|
||||
2. Now activate the virtual environment:
|
||||
|
||||
```bash
|
||||
$ source venv/bin/activate
|
||||
```
|
||||
|
||||
3. Some of the components used by pgAdmin require a very recent version of *pip*,
|
||||
so update that to the latest:
|
||||
|
||||
```bash
|
||||
$ pip install --upgrade pip
|
||||
```
|
||||
|
||||
4. Ensure that a PostgreSQL installation's bin/ directory is in the path (so
|
||||
pg_config can be found for building psycopg3), and install the required
|
||||
packages:
|
||||
|
||||
```bash
|
||||
(venv) $ PATH=$PATH:/usr/local/pgsql/bin pip install -r $PGADMIN4_SRC/requirements.txt
|
||||
```
|
||||
|
||||
If you are planning to run the regression tests, you also need to install
|
||||
additional requirements from web/regression/requirements.txt:
|
||||
|
||||
```bash
|
||||
(venv) $ pip install -r $PGADMIN4_SRC/web/regression/requirements.txt
|
||||
```
|
||||
|
||||
5. Create a local configuration file for pgAdmin. Edit
|
||||
$PGADMIN4_SRC/web/config_local.py and add any desired configuration options
|
||||
(use the config.py file as a reference - any settings duplicated in
|
||||
config_local.py will override those in config.py). A typical development
|
||||
configuration may look like:
|
||||
|
||||
```python
|
||||
from config import *
|
||||
|
||||
# Debug mode
|
||||
DEBUG = True
|
||||
|
||||
# App mode
|
||||
SERVER_MODE = True
|
||||
|
||||
# Enable the test module
|
||||
MODULE_BLACKLIST.remove('test')
|
||||
|
||||
# Log
|
||||
CONSOLE_LOG_LEVEL = DEBUG
|
||||
FILE_LOG_LEVEL = DEBUG
|
||||
|
||||
DEFAULT_SERVER = '127.0.0.1'
|
||||
|
||||
UPGRADE_CHECK_ENABLED = True
|
||||
|
||||
# Use a different config DB for each server mode.
|
||||
if SERVER_MODE == False:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-desktop.db'
|
||||
)
|
||||
else:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-server.db'
|
||||
)
|
||||
```
|
||||
|
||||
This configuration allows easy switching between server and desktop modes
|
||||
for testing.
|
||||
|
||||
6. The initial setup of the configuration database is interactive in server
|
||||
mode, and non-interactive in desktop mode. You can run it either by
|
||||
running:
|
||||
|
||||
```bash
|
||||
(venv) $ python3 $PGADMIN4_SRC/web/setup.py
|
||||
```
|
||||
|
||||
or by starting pgAdmin 4:
|
||||
|
||||
```bash
|
||||
(venv) $ python3 $PGADMIN4_SRC/web/pgAdmin4.py
|
||||
```
|
||||
|
||||
Whilst it is possible to automatically run setup in desktop mode by running
|
||||
the runtime, that will not work in server mode as the runtime doesn't allow
|
||||
command line interaction with the setup program.
|
||||
|
||||
At this point you will be able to run pgAdmin 4 from the command line in either
|
||||
server or desktop mode, and access it from a web browser using the URL shown in
|
||||
the terminal once pgAdmin has started up.
|
||||
|
||||
Setup of an environment on Windows is somewhat more complicated unfortunately,
|
||||
please see *pkg/win32/README.txt* for complete details.
|
||||
|
||||
# Building the Web Assets
|
||||
|
||||
pgAdmin is dependent on a number of third party Javascript libraries. These,
|
||||
along with it's own Javascript code, SCSS/CSS code and images must be
|
||||
compiled into a "bundle" which is transferred to the browser for execution
|
||||
and rendering. This is far more efficient than simply requesting each
|
||||
asset as it's needed by the client.
|
||||
|
||||
To create the bundle, you will need the 'yarn' package management tool to be
|
||||
installed. Then, you can run the following commands on a *nix system to
|
||||
download the required packages and build the bundle:
|
||||
|
||||
```bash
|
||||
(venv) $ cd $PGADMIN4_SRC
|
||||
(venv) $ make install-node
|
||||
(venv) $ make bundle
|
||||
```
|
||||
|
||||
On Windows systems (where "make" is not available), the following commands
|
||||
can be used:
|
||||
|
||||
```
|
||||
C:\> cd $PGADMIN4_SRC\web
|
||||
C:\$PGADMIN4_SRC\web> yarn install
|
||||
C:\$PGADMIN4_SRC\web> yarn run bundle
|
||||
```
|
||||
|
||||
# Creating pgAdmin themes
|
||||
|
||||
To create a pgAdmin theme, you need to create a directory under
|
||||
*web/pgadmin/static/scss/resources*.
|
||||
Copy the sample file *_theme.variables.scss.sample* to the new directory and
|
||||
rename it to *_theme.variables.scss*. Change the desired hexadecimal values of
|
||||
the colors and bundle pgAdmin. You can also add a preview image in the theme
|
||||
directory with the name as *\<dir name>_preview.png*. It is recommended that the
|
||||
preview image should not be larger in size as it may take time to load on slow
|
||||
networks. Run the *yarn run bundle* and you're good to go. No other changes are
|
||||
required, pgAdmin bundle will read the directory and create other required
|
||||
entries to make them available in preferences.
|
||||
|
||||
The name of the theme is derived from the directory name. Underscores (_) and
|
||||
hyphens (-) will be replaced with spaces and the result will be camel cased.
|
||||
|
||||
# Building the documentation
|
||||
|
||||
In order to build the docs, an additional Python package is required in the
|
||||
virtual environment. This can be installed with the pip package manager:
|
||||
|
||||
```bash
|
||||
$ source venv/bin/activate
|
||||
(venv) $ pip install Sphinx
|
||||
(venv) $ pip install sphinxcontrib-youtube
|
||||
```
|
||||
|
||||
The docs can then be built using the Makefile in *$PGADMIN4_SRC*, e.g.
|
||||
|
||||
```bash
|
||||
(venv) $ make docs
|
||||
```
|
||||
|
||||
The output can be found in *$PGADMIN4_SRC/docs/en_US/_build/html/index.html*
|
||||
|
||||
# Building packages
|
||||
|
||||
Most packages can be built using the Makefile in $PGADMIN4_SRC, provided all
|
||||
the setup and configuration above has been completed.
|
||||
|
||||
To build a source tarball:
|
||||
|
||||
```bash
|
||||
(venv) $ make src
|
||||
```
|
||||
|
||||
To build a PIP Wheel, activate either a Python 3 virtual environment, configured
|
||||
with all the required packages, and then run:
|
||||
|
||||
```bash
|
||||
(venv) $ make pip
|
||||
```
|
||||
|
||||
To build the macOS AppBundle, please see *pkg/mac/README*.
|
||||
|
||||
To build the Windows installer, please see *pkg/win32/README.txt*.
|
||||
# Create Database Migrations
|
||||
|
||||
In order to make changes to the SQLite DB, navigate to the 'web' directory:
|
||||
|
||||
```bash
|
||||
(venv) $ cd $PGADMIN4_SRC/web
|
||||
```
|
||||
|
||||
Create a migration file with the following command:
|
||||
|
||||
```bash
|
||||
(venv) $ FLASK_APP=pgAdmin4.py flask db revision
|
||||
```
|
||||
|
||||
This will create a file in: $PGADMIN4_SRC/web/migrations/versions/ .
|
||||
Add any changes to the 'upgrade' function.
|
||||
Increment the SCHEMA_VERSION in $PGADMIN4_SRC/web/pgadmin/model/__init__.py file.
|
||||
|
||||
There is no need to increment the SETTINGS_SCHEMA_VERSION.
|
||||
|
||||
# Support
|
||||
|
||||
See https://www.pgadmin.org/support/ for support options.
|
||||
|
||||
# Security Issues
|
||||
|
||||
If you would like to report a security issue with pgAdmin, please email
|
||||
**security (at) pgadmin (dot) org**.
|
||||
|
||||
Note that this address should only be used for reporting security issues
|
||||
that you believe you've found in the design or code of pgAdmin, pgAgent,
|
||||
and the pgAdmin website. It should not be used to ask security questions.
|
||||
|
||||
# Project info
|
||||
|
||||
A GitHub project for pgAdmin 4 can be found at the address below:
|
||||
|
||||
https://github.com/pgadmin-org/pgadmin4
|
||||
|
||||
Please submit any changes as Pull Requests against the *master* branch of the
|
||||
*pgadmin-org/pgadmin4* repository.
|
||||
|
||||
If you wish to discuss pgAdmin 4, or contribute to the project, please use the
|
||||
pgAdmin Hackers mailing list:
|
||||
|
||||
pgadmin-hackers@postgresql.org
|
||||
@@ -6,8 +6,8 @@
|
||||
|
||||
Use the *Add named restore point* dialog to take a named snapshot of the state
|
||||
of the server for use in a recovery file. To create a named restore point, the
|
||||
server's postgresql.conf file must specify a *wal_level* value of *archive*,
|
||||
*hot_standby*, or *logical*. You must be a database superuser to create a
|
||||
server's postgresql.conf file must specify a *wal_level* value of *replica*,
|
||||
*logical*, or *minimal*. You must be a database superuser to create a
|
||||
restore point.
|
||||
|
||||
.. image:: images/add_restore_point.png
|
||||
@@ -19,7 +19,7 @@ the restore point to add* to provide a descriptive name for the restore point.
|
||||
|
||||
For more information about using a restore point as a recovery target, please
|
||||
see the
|
||||
`PostgreSQL documentation <https://www.postgresql.org/docs/current/recovery-target-settings.html#RECOVERY-TARGET-NAME>`_.
|
||||
`PostgreSQL documentation <https://www.postgresql.org/docs/current/runtime-config-wal.html#RUNTIME-CONFIG-WAL-RECOVERY-TARGET>`_.
|
||||
|
||||
* Click the *OK* button to save the restore point.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
@@ -4,7 +4,7 @@
|
||||
`Backup Dialog`:index:
|
||||
**********************
|
||||
|
||||
Using the *pg_dump* utility, *pgAdmin* provides an easy way to create a backup
|
||||
*pgAdmin* uses the *pg_dump* utility to provide an easy way to create a backup
|
||||
in a plain-text or archived format. You can then use a client application (like
|
||||
*psql* or the *Query Tool*) to restore a plain-text backup file, or use the
|
||||
Postgres *pg_restore* utility to restore an archived backup. The *pg_dump*
|
||||
@@ -67,8 +67,8 @@ Use the fields in the *General* tab to specify parameters for the backup:
|
||||
* Use the dropdown listbox next to *Rolename* to specify the role that owns the
|
||||
backup.
|
||||
|
||||
Click the *Dump options* tab to continue. Use the box fields in the *Dump
|
||||
options* tab to provide options for *pg_dump*.
|
||||
Click the *Data/Objects* tab to continue. Use the fields in the *Data/Objects*
|
||||
tab to provide options related to data or pgAdmin objects that correspond to *pg_dump*.
|
||||
|
||||
.. image:: images/backup_sections.png
|
||||
:alt: Sections option on backup dialog
|
||||
@@ -77,13 +77,13 @@ options* tab to provide options for *pg_dump*.
|
||||
* Move switches in the **Sections** field box to select a portion of the object
|
||||
that will be backed up.
|
||||
|
||||
* Move the switch next to *Pre-data* to the *Yes* position to include all
|
||||
* Move the switch next to *Pre-data* towards right position to include all
|
||||
data definition items not included in the data or post-data item lists.
|
||||
|
||||
* Move the switch next to *Data* to the *Yes* position to backup actual table
|
||||
* Move the switch next to *Data* towards right position to backup actual table
|
||||
data, large-object contents, and sequence values.
|
||||
|
||||
* Move the switch next to *Post-data* to the *Yes* position to include
|
||||
* Move the switch next to *Post-data* towards right position to include
|
||||
definitions of indexes, triggers, rules, and constraints other than
|
||||
validated check constraints.
|
||||
|
||||
@@ -94,13 +94,13 @@ options* tab to provide options for *pg_dump*.
|
||||
* Move switches in the **Type of objects** field box to specify details about
|
||||
the type of objects that will be backed up.
|
||||
|
||||
* Move the switch next to *Only data* to the *Yes* position to limit the back
|
||||
* Move the switch next to *Only data* towards right position to limit the back
|
||||
up to data.
|
||||
|
||||
* Move the switch next to *Only schema* to limit the back up to schema-level
|
||||
database objects.
|
||||
|
||||
* Move the switch next to *Blobs* to the *No* position to exclude large
|
||||
* Move the switch next to *Blobs* towards left position to exclude large
|
||||
objects in the backup.
|
||||
|
||||
.. image:: images/backup_do_not_save.png
|
||||
@@ -110,22 +110,26 @@ options* tab to provide options for *pg_dump*.
|
||||
* Move switches in the **Do not save** field box to select the objects that will
|
||||
not be included in the backup.
|
||||
|
||||
* Move the switch next to *Owner* to the *Yes* position to exclude commands
|
||||
* Move the switch next to *Owner* towards right position to exclude commands
|
||||
that set object ownership.
|
||||
|
||||
* Move the switch next to *Privilege* to the *Yes* position to exclude
|
||||
* Move the switch next to *Privilege* towards right position to exclude
|
||||
commands that create access privileges.
|
||||
|
||||
* Move the switch next to *Tablespace* to the *Yes* position to exclude
|
||||
* Move the switch next to *Tablespace* towards right position to exclude
|
||||
tablespaces.
|
||||
|
||||
* Move the switch next to *Unlogged table data* to the *Yes* position to
|
||||
* Move the switch next to *Unlogged table data* towards right position to
|
||||
exclude the contents of unlogged tables.
|
||||
|
||||
* Move the switch next to *Comments* to the *Yes* position to exclude
|
||||
* Move the switch next to *Comments* towards right position to exclude
|
||||
commands that set the comments. **Note:** This option is visible only for
|
||||
database server greater than or equal to 11.
|
||||
|
||||
Click the *Options* tab to continue. Use these additional fields to specify
|
||||
options like including ddl statements, verbose message or using set session
|
||||
authorization corresponding to *pg_dump* options.
|
||||
|
||||
.. image:: images/backup_queries.png
|
||||
:alt: Queries option on backup dialog
|
||||
:align: center
|
||||
@@ -133,24 +137,24 @@ options* tab to provide options for *pg_dump*.
|
||||
* Move switches in the **Queries** field box to specify the type of statements
|
||||
that should be included in the backup.
|
||||
|
||||
* Move the switch next to *Use Column Inserts* to the *Yes* position to dump
|
||||
* Move the switch next to *Use Column Inserts* towards right position to dump
|
||||
the data in the form of INSERT statements and include explicit column
|
||||
names. Please note: this may make restoration from backup slow.
|
||||
|
||||
* Move the switch next to *Use Insert commands* to the *Yes* position to
|
||||
* Move the switch next to *Use Insert commands* towards right position to
|
||||
dump the data in the form of INSERT statements rather than using a COPY
|
||||
command. Please note: this may make restoration from backup slow.
|
||||
|
||||
* Move the switch next to *Include CREATE DATABASE statement* to the *Yes*
|
||||
* Move the switch next to *Include CREATE DATABASE statement* towards right
|
||||
position to include a command in the backup that creates a new database
|
||||
when restoring the backup.
|
||||
|
||||
* Move the switch next to *Include DROP DATABASE statement* to the *Yes*
|
||||
* Move the switch next to *Include DROP DATABASE statement* towards right
|
||||
position to include a command in the backup that will drop any existing
|
||||
database object with the same name before recreating the object during a
|
||||
backup.
|
||||
|
||||
* Move the switch next to *Load Via Partition Root* to the *Yes* position,
|
||||
* Move the switch next to *Load Via Partition Root* towards right position,
|
||||
so when dumping a COPY or INSERT statement for a partitioned table, target
|
||||
the root of the partitioning hierarchy which contains it rather than the
|
||||
partition itself. **Note:** This option is visible only for database server
|
||||
@@ -164,10 +168,10 @@ options* tab to provide options for *pg_dump*.
|
||||
that should be excluded from the backup.
|
||||
|
||||
* Move the switch next to *Trigger* (active when creating a data-only backup)
|
||||
to the *Yes* position to include commands that will disable triggers on the
|
||||
towards right position to include commands that will disable triggers on the
|
||||
target table while the data is being loaded.
|
||||
|
||||
* Move the switch next to *$ quoting* to the *Yes* position to enable dollar
|
||||
* Move the switch next to *$ quoting* towards right position to enable dollar
|
||||
quoting within function bodies; if disabled, the function body will be
|
||||
quoted using SQL standard string syntax.
|
||||
|
||||
@@ -178,16 +182,16 @@ options* tab to provide options for *pg_dump*.
|
||||
* Move switches in the **Miscellaneous** field box to specify miscellaneous
|
||||
backup options.
|
||||
|
||||
* Move the switch next to *With OIDs* to the *Yes* position to include object
|
||||
* Move the switch next to *With OIDs* towards right position to include object
|
||||
identifiers as part of the table data for each table.
|
||||
|
||||
* Move the switch next to *Verbose messages* to the *No* position to instruct
|
||||
* Move the switch next to *Verbose messages* towards left position to instruct
|
||||
*pg_dump* to exclude verbose messages.
|
||||
|
||||
* Move the switch next to *Force double quotes on identifiers* to the *Yes*
|
||||
* Move the switch next to *Force double quotes on identifiers* towards right
|
||||
position to force the quoting of all identifiers.
|
||||
|
||||
* Move the switch next to *Use SET SESSION AUTHORIZATION* to the *Yes*
|
||||
* Move the switch next to *Use SET SESSION AUTHORIZATION* towards right
|
||||
position to include a statement that will use a SET SESSION AUTHORIZATION
|
||||
command to determine object ownership (instead of an ALTER OWNER command).
|
||||
|
||||
@@ -199,20 +203,6 @@ command:
|
||||
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
|
||||
.. image:: images/backup_messages.png
|
||||
:alt: Backup success notification popup
|
||||
:align: center
|
||||
|
||||
Use the **Stop Process** button to stop the Backup process.
|
||||
|
||||
If the backup is successful, a popup window will confirm success. Click *Click
|
||||
here for details* on the popup window to launch the *Process Watcher*. The
|
||||
*Process Watcher* logs all the activity associated with the backup and provides
|
||||
additional information for troubleshooting.
|
||||
|
||||
.. image:: images/backup_process_watcher.png
|
||||
:alt: Backup process watcher
|
||||
:align: center
|
||||
|
||||
If the backup is unsuccessful, you can review the error messages returned by the
|
||||
backup command on the *Process Watcher*.
|
||||
pgAdmin will run the backup process in background. You can view all the background
|
||||
process with there running status and logs on the :ref:`Processes <processes>`
|
||||
tab
|
||||
@@ -34,20 +34,6 @@ statements that should be included in the backup.
|
||||
Click the *Backup* button to build and execute a command based on your
|
||||
selections; click the *Cancel* button to exit without saving work.
|
||||
|
||||
.. image:: images/backup_globals_messages.png
|
||||
:alt: Backup globals success notification popup
|
||||
:align: center
|
||||
|
||||
Use the **Stop Process** button to stop the Backup process.
|
||||
|
||||
If the backup is successful, a popup window will confirm success. Click *Click
|
||||
here for details* on the popup window to launch the *Process Watcher*. The
|
||||
*Process Watcher* logs all the activity associated with the backup and provides
|
||||
additional information for troubleshooting.
|
||||
|
||||
.. image:: images/backup_globals_process_watcher.png
|
||||
:alt: Backup globals process watcher
|
||||
:align: center
|
||||
|
||||
If the backup is unsuccessful, review the error message returned by the
|
||||
*Process Watcher* to resolve any issue.
|
||||
pgAdmin will run the backup process in background. You can view all the background
|
||||
process with there running status and logs on the :ref:`Processes <processes>`
|
||||
tab
|
||||
@@ -28,10 +28,13 @@ Use the fields in the *General* tab to specify the following:
|
||||
:alt: Type of objects option on backup server dialog
|
||||
:align: center
|
||||
|
||||
Click the *Data/Objects* tab to continue. Use the fields in the *Data/Objects*
|
||||
tab to provide options related to data or pgAdmin objects that correspond to *pg_dump*.
|
||||
|
||||
* Move switches in the **Type of objects** field box to specify details about
|
||||
the type of objects that will be backed up.
|
||||
|
||||
* Move the switch next to *Only data* to the *Yes* position to limit the back
|
||||
* Move the switch next to *Only data* towards right position to limit the back
|
||||
up to data.
|
||||
|
||||
* Move the switch next to *Only schema* to limit the back up to schema-level
|
||||
@@ -44,19 +47,19 @@ Use the fields in the *General* tab to specify the following:
|
||||
* Move switches in the **Do not save** field box to select the objects that will
|
||||
not be included in the backup.
|
||||
|
||||
* Move the switch next to *Owner* to the *Yes* position to exclude commands
|
||||
* Move the switch next to *Owner* towards right position to exclude commands
|
||||
that set object ownership.
|
||||
|
||||
* Move the switch next to *Privilege* to the *Yes* position to exclude
|
||||
* Move the switch next to *Privilege* towards right position to exclude
|
||||
commands that create access privileges.
|
||||
|
||||
* Move the switch next to *Tablespace* to the *Yes* position to exclude
|
||||
* Move the switch next to *Tablespace* towards right position to exclude
|
||||
tablespaces.
|
||||
|
||||
* Move the switch next to *Unlogged table data* to the *Yes* position to
|
||||
* Move the switch next to *Unlogged table data* towards right position to
|
||||
exclude the contents of unlogged tables.
|
||||
|
||||
* Move the switch next to *Comments* to the *Yes* position to exclude
|
||||
* Move the switch next to *Comments* towards right position to exclude
|
||||
commands that set the comments. **Note:** This option is visible only for
|
||||
database server greater than or equal to 11.
|
||||
|
||||
@@ -67,15 +70,15 @@ Use the fields in the *General* tab to specify the following:
|
||||
* Move switches in the **Queries** field box to specify the type of statements
|
||||
that should be included in the backup.
|
||||
|
||||
* Move the switch next to *Use Column Inserts* to the *Yes* position to dump
|
||||
* Move the switch next to *Use Column Inserts* towards right position to dump
|
||||
the data in the form of INSERT statements and include explicit column
|
||||
names. Please note: this may make restoration from backup slow.
|
||||
|
||||
* Move the switch next to *Use Insert commands* to the *Yes* position to dump
|
||||
* Move the switch next to *Use Insert commands* towards right position to dump
|
||||
the data in the form of INSERT statements rather than using a COPY command.
|
||||
Please note: this may make restoration from backup slow.
|
||||
|
||||
* Move the switch next to *Include DROP DATABASE statement* to the *Yes*
|
||||
* Move the switch next to *Include DROP DATABASE statement* towards right
|
||||
position to include a command in the backup that will drop any existing
|
||||
database object with the same name before recreating the object during a
|
||||
backup.
|
||||
@@ -89,10 +92,10 @@ Use the fields in the *General* tab to specify the following:
|
||||
that should be excluded from the backup.
|
||||
|
||||
* Move the switch next to *Trigger* (active when creating a data-only backup)
|
||||
to the *Yes* position to include commands that will disable triggers on the
|
||||
towards right position to include commands that will disable triggers on the
|
||||
target table while the data is being loaded.
|
||||
|
||||
* Move the switch next to *$ quoting* to the *Yes* position to enable dollar
|
||||
* Move the switch next to *$ quoting* towards right position to enable dollar
|
||||
quoting within function bodies; if disabled, the function body will be
|
||||
quoted using SQL standard string syntax.
|
||||
|
||||
@@ -103,36 +106,22 @@ Use the fields in the *General* tab to specify the following:
|
||||
* Move switches in the **Miscellaneous** field box to specify miscellaneous
|
||||
backup options.
|
||||
|
||||
* Move the switch next to *With OIDs* to the *Yes* position to include object
|
||||
* Move the switch next to *With OIDs* towards right position to include object
|
||||
identifiers as part of the table data for each table.
|
||||
|
||||
* Move the switch next to *Verbose messages* to the *No* position to instruct
|
||||
* Move the switch next to *Verbose messages* towards left position to instruct
|
||||
*pg_dump* to exclude verbose messages.
|
||||
|
||||
* Move the switch next to *Force double quotes on identifiers* to the *Yes*
|
||||
* Move the switch next to *Force double quotes on identifiers* towards right
|
||||
position to force the quoting of all identifiers.
|
||||
|
||||
* Move the switch next to *Use SET SESSION AUTHORIZATION* to the *Yes*
|
||||
* Move the switch next to *Use SET SESSION AUTHORIZATION* towards right
|
||||
position to include a statement that will use a SET SESSION AUTHORIZATION
|
||||
command to determine object ownership (instead of an ALTER OWNER command).
|
||||
|
||||
Click the *Backup* button to build and execute a command based on your
|
||||
selections; click the *Cancel* button to exit without saving work.
|
||||
|
||||
.. image:: images/backup_server_messages.png
|
||||
:alt: Backup server success notification popup
|
||||
:align: center
|
||||
|
||||
Use the **Stop Process** button to stop the Backup process.
|
||||
|
||||
If the backup is successful, a popup window will confirm success. Click *Click
|
||||
here for details* on the popup window to launch the *Process Watcher*. The
|
||||
*Process Watcher* logs all the activity associated with the backup and provides
|
||||
additional information for troubleshooting.
|
||||
|
||||
.. image:: images/backup_server_process_watcher.png
|
||||
:alt: Backup server process watcher
|
||||
:align: center
|
||||
|
||||
If the backup is unsuccessful, review the error message returned by the
|
||||
*Process Watcher* to resolve any issue.
|
||||
pgAdmin will run the backup process in background. You can view all the background
|
||||
process with there running status and logs on the :ref:`Processes <processes>`
|
||||
tab
|
||||
@@ -38,7 +38,7 @@ Use the fields in the *Definition* tab to define parameters:
|
||||
* Use the drop-down listbox next to *Function* to select the function used to
|
||||
perform the cast. The function's result data type must match the target type
|
||||
of the cast.
|
||||
* Move the *Context* switch to the *Implicit* position if the cast is implicit.
|
||||
* Select *Context* toggle to *Implicit* if the cast is implicit.
|
||||
By default, a cast can be invoked only by an explicit cast request. If the
|
||||
cast is marked *Implicit* then it can be invoked implicitly in any context,
|
||||
whether by assignment or internally in an expression.
|
||||
@@ -58,10 +58,7 @@ the *Cast* dialog:
|
||||
:alt: Cast dialog sql tab
|
||||
:align: center
|
||||
|
||||
The cast uses a function named *int4(bigint)* to convert a biginteger data type
|
||||
to an integer.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -0,0 +1,27 @@
|
||||
.. _change_ownership:
|
||||
|
||||
************************************
|
||||
`Change Ownership Dialog`:index:
|
||||
************************************
|
||||
|
||||
Use the *Change Ownership* dialog to change the ownership of the shared servers.
|
||||
This dialog will appear if a user has been deleted from
|
||||
:ref:`User Management <user_management>` and owned some shared servers.
|
||||
|
||||
Choose the user who will own the shared servers from the drop-down.
|
||||
|
||||
.. image:: images/change_ownership.png
|
||||
:alt: Change ownership dialog
|
||||
:align: center
|
||||
|
||||
Click the *Change* button to change the ownership.
|
||||
|
||||
The shared servers owned by the user will be deleted if the user is not
|
||||
selected from the drop-down.
|
||||
|
||||
.. image:: images/change_ownership_info.png
|
||||
:alt: Change ownership dialog
|
||||
:align: center
|
||||
|
||||
Click the *Change* button to change the ownership; click *Close* to
|
||||
exit the dialog.
|
||||
@@ -13,6 +13,9 @@ Please consider the following guidelines when selecting a password:
|
||||
|
||||
* Ensure that your password is an adequate length; 6 characters should be the
|
||||
absolute minimum number of characters in the password.
|
||||
* The minimum password length is set by default to six characters. This value
|
||||
can be changed by setting the *PASSWORD_LENGTH_MIN* option to desired length
|
||||
in pgAdmin configuration; see :ref:`config_py` for more information.
|
||||
* Ensure that your password is not open to dictionary attacks. Use a mixture of
|
||||
upper and lower case letters and numerics, and avoid words or names. Consider
|
||||
using the first letter from each word in a phrase that you will remember
|
||||
@@ -36,5 +39,8 @@ Use the *Change Password* dialog to change your password:
|
||||
* Enter the desired password for in the *New Password* field.
|
||||
* Re-enter the new password in the *Confirm Password* field.
|
||||
|
||||
Click the *OK* button to change your password; click *Cancel* to exit the dialog
|
||||
without changing your password.
|
||||
Click the *Save* button to change your password.
|
||||
|
||||
Click the *Close* button to exit without changing your password.
|
||||
|
||||
Click the *Reset* button to reset the values.
|
||||
@@ -13,6 +13,9 @@ Please consider the following guidelines when selecting a password:
|
||||
|
||||
* Ensure that your password is an adequate length; 6 characters should be the
|
||||
absolute minimum number of characters in the password.
|
||||
* The minimum password length is set by default to six characters. This value
|
||||
can be changed by setting the *PASSWORD_LENGTH_MIN* option to desired length
|
||||
in pgAdmin configuration; see :ref:`config_py` for more information.
|
||||
* Ensure that your password is not open to dictionary attacks. Use a mixture of
|
||||
upper and lower case letters and numerics, and avoid words or names. Consider
|
||||
using the first letter from each word in a phrase that you will remember
|
||||
|
||||
@@ -55,12 +55,11 @@ the *Check* dialog:
|
||||
:alt: Check dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a check constraint named *check_price*
|
||||
on the *price* column of the *products* table. The constraint confirms that
|
||||
any values added to the column are greater than 0.
|
||||
The example shown demonstrates creating a check constraint named *jobhist_date_chk*
|
||||
on the *startdate* column of the *jobhist* table.
|
||||
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -0,0 +1,98 @@
|
||||
.. _cloud_aws_rds:
|
||||
|
||||
******************************************
|
||||
`Amazon RDS Cloud Deployment`:index:
|
||||
******************************************
|
||||
|
||||
To deploy a PostgreSQL server on the Amazon cloud, follow the below steps.
|
||||
|
||||
.. image:: images/cloud_provider_for_postgresql.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Once you launch the tool, select the Amazon RDS option.
|
||||
Click on the *Next* button to proceed further.
|
||||
|
||||
.. image:: images/cloud_aws_credentials.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
In the Credentials dialog, provide the region in which you want to deploy the
|
||||
instance along with the *AWS access key* and *AWS secret access key*.
|
||||
Provide *AWS session token* only if your AWS session is temporary.
|
||||
|
||||
To proceed further, click on the next button. Before going further, pgAdmin
|
||||
will validate your credentials.
|
||||
|
||||
.. image:: images/cloud_aws_instance.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Use the fields from the Instance Specification tab to specify the Instance
|
||||
details.
|
||||
|
||||
* Use the *Instance name* field to add an instance name for the PostgreSQL
|
||||
server; the name specified will be displayed in the *Object Explorer* too.
|
||||
|
||||
* Use the *Public IP* field to specify the IP Address range for permitting the
|
||||
inbound traffic.
|
||||
|
||||
* Use the *Database version* field to specify the PostgreSQL version to deploy.
|
||||
|
||||
* Use the *Instance class* field to allocate the computational, network, and
|
||||
memory capacity required by planned workload of this DB instance.
|
||||
|
||||
* Use the *Instance type* field to select the instance type.
|
||||
|
||||
* Use the *Storage type* field to select the instance storage type. Three
|
||||
options are available. General Purpose (SSD) storage, Provisioned IOPS (SSD)
|
||||
and Magnetic storage.
|
||||
|
||||
* Use the *Allocated storage* field to specify the storage capacity in GiB.
|
||||
|
||||
* Use the *Provisioned IOPS* in case of Provisioned IOPS (SSD) storage type.
|
||||
|
||||
* Use the *High Availability* option to specify High Availability
|
||||
option. This option creates a standby in a different Availability Zone(AZ).
|
||||
|
||||
.. image:: images/cloud_aws_database.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Use the fields from the Database Details tab to specify the Instance details.
|
||||
|
||||
* Use the drop-down list box in the *Server group* field to select the parent
|
||||
node for the server; the server will be displayed in the *Object Explorer*
|
||||
within the specified group.
|
||||
|
||||
* Use the *Database name* field to add the database name for the PostgreSQL
|
||||
server.
|
||||
|
||||
* Use the *Username* field to specify the name of a role that will be used when
|
||||
authenticating with the server.
|
||||
|
||||
* Use the *Password* field to provide a password that will be supplied when
|
||||
authenticating with the server.
|
||||
|
||||
* Use the *Confirm password* field to repeat the password.
|
||||
|
||||
* Enter the listener port number of the server host in the *Port* field.
|
||||
|
||||
.. image:: images/cloud_aws_review.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
At the end, review the Instance details that you provided. Click on Finish
|
||||
button to deploy the instance on Amazon RDS.
|
||||
|
||||
.. image:: images/cloud_deployment_tree.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Once you click on the finish, one background process will start which will
|
||||
deploy the instance in the cloud and monitor the progress of the deployment.
|
||||
You can view all the background process with there running status and logs
|
||||
on the :ref:`Processes <processes>` tab
|
||||
|
||||
The Server will be added to the tree with the cloud deployment icon. Once the
|
||||
deployment is done, the server details will be updated.
|
||||
@@ -0,0 +1,122 @@
|
||||
.. cloud_azure_database:
|
||||
|
||||
******************************************
|
||||
`Azure Database Cloud Deployment`:index:
|
||||
******************************************
|
||||
|
||||
To deploy a PostgreSQL server on the Azure Database, follow the below steps.
|
||||
|
||||
.. image:: images/cloud_provider_for_postgresql.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
Once you launch the tool, select the Azure Database option.
|
||||
Click on the *Next* button to proceed further.
|
||||
|
||||
|
||||
.. image:: images/cloud_azure_credentials.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
In the Credentials dialog, select authentication method either interactive
|
||||
browser or Azure CLI. Azure CLI will use the currently logged in identity
|
||||
through the Azure CLI on the local machine. Interactive Browser will
|
||||
open a browser window to authenticate a user interactively.
|
||||
|
||||
Use the *Azure tenant* id to specify Azure tenant ID against which user
|
||||
is authenticated.
|
||||
|
||||
Clicking the *Click here to authenticate yourself to Microsoft Azure*
|
||||
button, user will be redirected to the Microsoft Azure authentication page in a
|
||||
new browser tab if the Interactive Browser option is selected.
|
||||
Azure CLI authentication can be used only in Desktop mode.
|
||||
|
||||
Once authentication is completed, click on the next button to proceed.
|
||||
|
||||
.. image:: images/cloud_azure_instance.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
Use the fields from the Instance Specification tab to specify the Instance
|
||||
details.
|
||||
|
||||
* Use the *Cluster name* field to add a name for the PostgreSQL
|
||||
server; the name specified will be displayed in the *Object Explorer* too.
|
||||
|
||||
* Select a subscription from the *Subscription* options which are populated based
|
||||
on user access levels in Azure portal.
|
||||
|
||||
* Select the resource group from *Resource Group* dropdown under which the
|
||||
PostgreSQL instance will be created.
|
||||
|
||||
* Select the location to deploy PostgreSQL instance from *Location*
|
||||
options.
|
||||
|
||||
* Select the availability zone in specified region to deploy PostgreSQL
|
||||
instance from *Availability zone* options.
|
||||
|
||||
* Use *Database version* options to specify PostgreSQL database version.
|
||||
|
||||
* Use the *Instance class* field to allocate the computational, network, and
|
||||
memory capacity required by planned workload of this DB instance.
|
||||
|
||||
* Use the *Instance type* field to select the instance type.
|
||||
|
||||
* Use the *Storage size* option to specify the storage capacity.
|
||||
|
||||
.. image:: images/cloud_azure_network.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
* Use the *Public IP* field to specify the List of IP Addresses or range of
|
||||
IP Addresses (start IP Address - end IP address) from which inbound traffic
|
||||
should be accepted. Add multiple IP addresses/ranges separated with commas,
|
||||
for example: "192.168.0.50, 192.168.0.100 - 192.168.0.200"
|
||||
|
||||
* Use *Zone redundant high availability* option to specify High Availability
|
||||
option. Zone redundant high availability deploys a standby replica in a
|
||||
different zone.
|
||||
The Burstable instance type does not support high availability.
|
||||
|
||||
.. image:: images/cloud_azure_database.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
Use the fields from the Database Details tab to specify the PostgreSQL database details.
|
||||
|
||||
* Use the drop-down list in the *pgAdmin server group* field to select the parent
|
||||
node for the server; the server will be displayed in the *Object Explorer*
|
||||
within the specified group.
|
||||
|
||||
* Use the *Admin username* field to add the database name for the PostgreSQL
|
||||
server.
|
||||
|
||||
* Use the *Password* field to provide a password that will be supplied when
|
||||
authenticating with the server.
|
||||
|
||||
* Use the *Confirm password* field to repeat the password.
|
||||
|
||||
Click on the next button to proceed.
|
||||
|
||||
.. image:: images/cloud_azure_review.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
At the end, review the instance details that you provided. Click on Finish
|
||||
button to deploy the instance on Azure Database.
|
||||
|
||||
Once you click on the finish, one background process will start which will
|
||||
deploy the instance in the cloud and monitor the progress of the deployment.
|
||||
You can view all the background process with there running status and logs
|
||||
on the :ref:`Processes <processes>` tab
|
||||
|
||||
.. image:: images/cloud_azure_bg_process_watcher.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
The Server will be added to the tree with the cloud deployment icon. Once the
|
||||
deployment is done, the server details will be updated.
|
||||
|
||||
.. image:: images/cloud_deployment_tree.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
After Width: | Height: | Size: 97 KiB |
@@ -0,0 +1,21 @@
|
||||
.. _cloud_deployment:
|
||||
|
||||
*************************************
|
||||
`PostgreSQL Cloud Deployment`:index:
|
||||
*************************************
|
||||
|
||||
A PostgreSQL server can be deployed on the Amazon, EDB BigAnimal, Azure,
|
||||
Google cloud using this module. In future more cloud provider options will
|
||||
be available.
|
||||
|
||||
To launch the *Cloud Deployment...* tool, right click on the *Server Group* or
|
||||
*Server* of the tree control, and select *Deploy a Cloud Instance* from the
|
||||
*Register* menu.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
cloud_aws_rds
|
||||
cloud_edb_biganimal
|
||||
cloud_azure_database
|
||||
cloud_google_cloud_sql
|
||||
@@ -0,0 +1,108 @@
|
||||
.. _cloud_edb_biganimal:
|
||||
|
||||
******************************************
|
||||
`EDB BigAnimal Cloud Deployment`:index:
|
||||
******************************************
|
||||
|
||||
To deploy a PostgreSQL server on the EDB BigAnimal cloud, follow the below steps.
|
||||
|
||||
.. image:: images/cloud_provider_for_postgresql.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Once you launch the tool, select the EDB BigAnimal option.
|
||||
Click on the *Next* button to proceed further.
|
||||
|
||||
.. image:: images/cloud_biganimal_credentials.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
The next steps is to authenticate the user to EDB BigAninal.
|
||||
Click the given button to authenticate, by clicking the button, the user
|
||||
will be redirected to the new tab for the verification.
|
||||
Once you confirm the one time code, the pgAdmin will automatically detect it
|
||||
and the next button will be enabled. To proceed further, click on the next button.
|
||||
|
||||
.. image:: images/cloud_biganimal_cluster.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
* Use the *Project* field to choose a project in your Biganimal account.
|
||||
|
||||
* Use the *Cluster type* field to choose a cluster type.
|
||||
|
||||
* Use the *No. of Standby Replicas* field to specify the replicas if you have selected the High Availability cluster.
|
||||
|
||||
* Use the *Cluster provider* field to choose the provider.
|
||||
|
||||
|
||||
.. image:: images/cloud_biganimal_instance.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Use the fields from the Instance Specification tab to specify the Instance
|
||||
details.
|
||||
|
||||
* Use the *Cluster name* field to add a cluster name for the PostgreSQL
|
||||
server; the name specified will be displayed in the *Object Explorer* too.
|
||||
|
||||
* Use the *Region* field to select the region.
|
||||
|
||||
* Use the *Public IP range* field to specify the IP Address range for permitting the
|
||||
inbound traffic. Leave it blank for 0.0.0.0/0
|
||||
|
||||
* Use the *Instance type* field to select the instance type.
|
||||
|
||||
* Use the *Instance series* field to select the instance series.
|
||||
|
||||
* Use the *Instance size* field to allocate the computational, network, and
|
||||
memory capacity required by planned workload of this DB instance.
|
||||
|
||||
* Use the *Volume type* field to select the instance storage type.
|
||||
|
||||
* Use the *Volume properties* field to specify the storage capacity. This field is specific to Azure.
|
||||
|
||||
* Use the *Volume size* field to specify the storage size. This field is specific to AWS.
|
||||
|
||||
* Use the *Volume IOPS* field to specify the storage IOPS. This field is specific to AWS.
|
||||
|
||||
|
||||
.. image:: images/cloud_biganimal_database.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Use the fields from the Database Details tab to specify the Instance details.
|
||||
|
||||
* Use the drop-down list box in the *Server group* field to select the parent
|
||||
node for the server; the server will be displayed in the *Object Explorer*
|
||||
within the specified group.
|
||||
|
||||
* Use the *Database type* field to specify the PostgreSQL
|
||||
type, EnterpriseDB PostgreSQL Advanced Server or PostgreSQL.
|
||||
|
||||
* Use the *PostgreSQL version* field to select the database version.
|
||||
|
||||
* Use the *Database Password* field to provide a password that will be supplied when
|
||||
authenticating with the server.
|
||||
|
||||
* Use the *Confirm password* field to repeat the password.
|
||||
|
||||
|
||||
.. image:: images/cloud_biganimal_review.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
At the end, review the Cluster details that you provided. Click on Finish
|
||||
button to deploy the instance on EDB BigAnimal.
|
||||
|
||||
.. image:: images/cloud_deployment_tree.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Once you click on the finish, one background process will start which will
|
||||
deploy the instance in the cloud and monitor the progress of the deployment.
|
||||
You can view all the background process with there running status and logs
|
||||
on the :ref:`Processes <processes>` tab
|
||||
|
||||
The Server will be added to the tree with the cloud deployment icon. Once the
|
||||
deployment is done, the server details will be updated.
|
||||
@@ -0,0 +1,117 @@
|
||||
.. cloud_google_cloud_sql:
|
||||
|
||||
************************************************
|
||||
`Google Cloud SQL Deployment`:index:
|
||||
************************************************
|
||||
|
||||
To deploy a PostgreSQL server on the Google Cloud SQL, follow the below steps.
|
||||
|
||||
.. image:: images/cloud_provider_for_postgresql.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
Once you launch the tool, select the Google Cloud SQL option.
|
||||
Click on the *Next* button to proceed further.
|
||||
|
||||
|
||||
.. image:: images/cloud_google_credentials.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
In the Credentials dialog, select client secret file to authenticate
|
||||
using google.You can download a client secret which is json formatted file
|
||||
from google cloud console once OAuth2 client ID is created.
|
||||
|
||||
.. note:: While creating client OAuth client ID, select Desktop App as application type.
|
||||
Refer `this <https://support.google.com/cloud/answer/6158849?hl=en/>`_ link for creating client secret.
|
||||
|
||||
Clicking the *Click here to authenticate yourself to Google*
|
||||
button, user will be redirected to the Google authentication page in a
|
||||
new browser tab.
|
||||
|
||||
Once authentication is completed, click on the next button to proceed.
|
||||
|
||||
.. image:: images/cloud_google_instance.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
Use the fields from the Instance Specification tab to specify the Instance
|
||||
details.
|
||||
|
||||
* Use the *Cluster name* field to add a name for the PostgreSQL
|
||||
server; the name specified will be displayed in the *Object Explorer* too.
|
||||
|
||||
* Select the project from *project* dropdown under which the
|
||||
PostgreSQL instance will be created.
|
||||
|
||||
* Select the location to deploy PostgreSQL instance from *Location*
|
||||
options.
|
||||
|
||||
* Select the availability zone in specified region to deploy PostgreSQL
|
||||
instance from *Availability zone* options.
|
||||
|
||||
* Use *Database version* options to specify PostgreSQL database version.
|
||||
|
||||
* Use the *Instance class* field to allocate the computational and
|
||||
memory capacity required by planned workload of this DB instance.
|
||||
|
||||
* Use the *Instance type* field to select the instance type.
|
||||
|
||||
* Specify storage type by selecting option from *Storage type*.
|
||||
|
||||
* Use the *Storage capacity* option to specify the storage capacity.
|
||||
|
||||
.. image:: images/cloud_google_network.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
* Use the *Public IP* field to specify the list of IP address range
|
||||
for allowed inbound traffic, for example: 127.0.0.1/32. Add multiple
|
||||
IP addresses/ranges separated with commas.
|
||||
|
||||
* Use the *High Availability* option to specify High Availability
|
||||
option. This option creates a standby in a select Secondary
|
||||
Availability Zone.
|
||||
|
||||
* Select the secondary availability zone for high availability
|
||||
from *Secondary Availability zone* options.
|
||||
|
||||
.. image:: images/cloud_google_database.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
Use the fields from the Database Details tab to specify the PostgreSQL database details.
|
||||
|
||||
* Use the drop-down list in the *pgAdmin server group* field to select the parent
|
||||
node for the server; the server will be displayed in the *Object Explorer*
|
||||
within the specified group.
|
||||
|
||||
* Admin username field will be default to postgres.
|
||||
server.
|
||||
|
||||
* Use the *Password* field to provide a password that will be supplied when
|
||||
authenticating with the server.
|
||||
|
||||
* Use the *Confirm password* field to repeat the password.
|
||||
|
||||
Click on the next button to proceed.
|
||||
|
||||
.. image:: images/cloud_google_review.png
|
||||
:alt: Cloud Deployment
|
||||
:align: center
|
||||
|
||||
At the end, review the instance details that you provided. Click on Finish
|
||||
button to deploy the instance on Azure PostgreSQL.
|
||||
|
||||
Once you click on the finish, one background process will start which will
|
||||
deploy the instance in the cloud and monitor the progress of the deployment.
|
||||
You can view all the background process with there running status and logs
|
||||
on the :ref:`Processes <processes>` tab
|
||||
|
||||
|
||||
The Server will be added to the tree with the cloud deployment icon. Once the
|
||||
deployment is done, the server details will be updated.
|
||||
|
||||
.. image:: images/cloud_google_deployment_tree.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
@@ -7,14 +7,14 @@
|
||||
The bulk of pgAdmin is a Python web application written using the Flask framework
|
||||
on the backend, and HTML5 with CSS3, Bootstrap and jQuery on the front end. A
|
||||
desktop runtime is also included for users that prefer a desktop application to
|
||||
a web application, which is written in C++ using the QT framework.
|
||||
a web application, which is written using NWjs (Node Webkit).
|
||||
|
||||
Runtime
|
||||
*******
|
||||
|
||||
The runtime is essentially a Python webserver and browser in a box. Found in the
|
||||
**/runtime** directory in the source tree, it is a relatively simple QT
|
||||
application that is most easily modified using the **QT Creator** application.
|
||||
The runtime is based on NWjs which integrates a browser and the Python server
|
||||
creating a standalone application. The source code can be found in the
|
||||
**/runtime** directory in the source tree.
|
||||
|
||||
Web Application
|
||||
***************
|
||||
@@ -44,7 +44,7 @@ the **Flask-Security** module to manage application security and users, and
|
||||
provides options for self-service password reset and password changes etc.
|
||||
|
||||
Whether in desktop or server mode, each user's settings are stored in a SQLite
|
||||
database which is also used to store the user accounts. This is initially
|
||||
OR external database which is also used to store the user accounts. This is initially
|
||||
created using the **setup.py** script which will create the database file and
|
||||
schema within it, and add the first user account (with administrative
|
||||
privileges) and a default server group for them. A **settings** table is also
|
||||
@@ -194,7 +194,7 @@ Nodes
|
||||
*****
|
||||
|
||||
Nodes are very similar to modules, it represents an individual node or,
|
||||
collection object on the browser treeview. To recognised as a node module, a
|
||||
collection object on the object explorer treeview. To recognised as a node module, a
|
||||
Python package (along with javascript modules) must be created. This must:
|
||||
|
||||
1) Be placed within the **web/pgadmin/browser/** directory, and
|
||||
@@ -207,10 +207,10 @@ Front End
|
||||
|
||||
pgAdmin uses javascript extensively for the front-end implementation. It uses
|
||||
require.js to allow the lazy loading (or, say load only when required),
|
||||
bootstrap for UI look and feel, Backbone for data manipulation of a node,
|
||||
Backform for generating properties/create dialog for selected node. We have
|
||||
bootstrap and MaterialUI for UI look and feel, React for generating
|
||||
properties/create dialog for selected node. We have
|
||||
divided each module in small chunks as much as possible. Not all javascript
|
||||
modules are required to be loaded (i.e. loading a javascript module for
|
||||
database will make sense only when a server node is loaded completely.) Please
|
||||
look at the the javascript files node.js, browser.js, menu.js, panel.js, etc for
|
||||
better understanding of the code.
|
||||
look at the javascript files node.js, browser.js, menu.js, panel.js, etc for
|
||||
better understanding of the code.
|
||||
@@ -5,7 +5,7 @@
|
||||
**************************
|
||||
|
||||
This document lists a number of standard items that will be checked during the
|
||||
review process for any patches submitted for inclusion in pgAdmin.
|
||||
review process for any changes submitted for inclusion in pgAdmin.
|
||||
|
||||
* Ensure all code follows the pgAdmin :doc:`coding_standards`.
|
||||
|
||||
@@ -16,46 +16,49 @@ review process for any patches submitted for inclusion in pgAdmin.
|
||||
bulk updates every year). The start date should always be 2013, and the end year
|
||||
the current year, e.g.
|
||||
|
||||
Copyright (C) 2013 - 2020, The pgAdmin Development Team
|
||||
|
||||
Copyright (C) 2013 - 2023, The pgAdmin Development Team
|
||||
|
||||
* Ensure there's a blank line immediately following any copyright headers.
|
||||
|
||||
* Include PyDoc comments for functions, classes and modules. Node modules should
|
||||
* Include PyDoc comments for functions, classes and modules. Node modules should
|
||||
be """Implements the XXXX node""".
|
||||
|
||||
* Ensure that any generated SQL does not have any leading or trailing blank lines
|
||||
and consistently uses 4 space indents for nice formatting.
|
||||
|
||||
* Don't special-case any Slony objects. pgAdmin 4 will have no direct knowledge
|
||||
* Don't special-case any Slony objects. pgAdmin 4 will have no direct knowledge
|
||||
of Slony, unlike pgAdmin 3.
|
||||
|
||||
* If you copy/paste modules, please ensure any comments are properly updated.
|
||||
* If you copy/paste modules, please ensure any comments are properly updated.
|
||||
|
||||
* Read all comments, and ensure they make sense and provide useful commentary on
|
||||
the code.
|
||||
|
||||
* Ensure that field labels both use PostgreSQL parlance, but also are descriptive.
|
||||
A good example is the "Init" field on an FTS Template - Init is the PG term, but
|
||||
* Ensure that field labels both use PostgreSQL parlance, but also are descriptive.
|
||||
A good example is the "Init" field on an FTS Template - Init is the PG term, but
|
||||
adding the word "Function" after it makes it much more descriptive.
|
||||
|
||||
* Re-use code whereever possible, but factor it out into a suitably central
|
||||
location - don't copy and paste it unless modifications are required!
|
||||
|
||||
* Format code nicely to make it readable. Break up logical chunks of code with
|
||||
blank lines, and comment well to describe what different sections of code are
|
||||
* Format code nicely to make it readable. Break up logical chunks of code with
|
||||
blank lines, and comment well to describe what different sections of code are
|
||||
for or pertain to.
|
||||
|
||||
* Ensure that form validation works correctly and is consistent with other
|
||||
* Ensure that form validation works correctly and is consistent with other
|
||||
dialogues in the way errors are displayed.
|
||||
|
||||
* On dialogues with Schema or Owner fields, pre-set the default values to the
|
||||
current schema/user as appropriate. In general, if there are common or sensible
|
||||
default values available, put them in the fields for the user.
|
||||
* On dialogues with Schema or Owner fields, pre-set the default values to the
|
||||
current schema/user as appropriate. In general, if there are common or sensible
|
||||
default values available, put them in the fields for the user.
|
||||
|
||||
* 1 patch == 1 feature. If you need to fix/update existing infrastructure in
|
||||
your patch, it's usually easier if it's in a separate patch. Patches containing
|
||||
multiple new features or unrelated changes are likely to be rejected.
|
||||
* 1 Pull Request == 1 feature. If you need to fix/update existing
|
||||
infrastructure in your change, it's usually easier if it's in a separate
|
||||
Pull Request. Pull Requests containing multiple new features or unrelated
|
||||
changes are likely to be rejected.
|
||||
|
||||
* Ensure the patch is fully functional, and works! If a patch is being sent as
|
||||
a work in progress, not intended for commit, clearly state that it's a WIP,
|
||||
and note what does or does not yet work.
|
||||
* Ensure the change is fully functional, and works! If you wish to send a
|
||||
work in progress (WIP) change that is not intended for commit, instead of
|
||||
submitting a Pull Request, send either as a link to a repository fork or a
|
||||
patch to the pgadmin-hackers@postgresql.org mailing list, clearly stating
|
||||
that it's a WIP, and noting what does or does not yet work.
|
||||
@@ -4,7 +4,7 @@
|
||||
`Coding Standards`:index:
|
||||
*************************
|
||||
|
||||
pgAdmin uses multiple technologies and multiple languages, each of which have
|
||||
pgAdmin uses multiple technologies and multiple languages, each of which have
|
||||
their own coding standards.
|
||||
|
||||
General
|
||||
@@ -16,24 +16,24 @@ lines wrapped where appropriate to ensure they can be read on smaller displays
|
||||
as it's quite wasteful on modern displays). Typically lines should not be longer
|
||||
than 120 characters.
|
||||
|
||||
Comments should be included in all code where required to explain its
|
||||
Comments should be included in all code where required to explain its
|
||||
purpose or how it works if not obvious from a quick review of the code itself.
|
||||
|
||||
CSS 3
|
||||
*****
|
||||
|
||||
CSS3 is used for styling and layout throughout the application. Extensive use is
|
||||
made of the Bootstrap Framework to aid in that process, however additional
|
||||
made of the Bootstrap Framework to aid in that process, however additional
|
||||
styles must still be created from time to time.
|
||||
|
||||
Most custom styling comes from individual modules which may advertise static
|
||||
stylesheets to be included in the module that is loading them via hooks.
|
||||
|
||||
Styling overrides (for example, to alter the Bootstrap look and feel) will
|
||||
Styling overrides (for example, to alter the Bootstrap look and feel) will
|
||||
typically be found in the **overrides.css** file in the main static file
|
||||
directory for the application.
|
||||
|
||||
Styling should never be applied inline in HTML, always through an external
|
||||
Styling should never be applied inline in HTML, always through an external
|
||||
stylesheet, which should contain comments as appropriate to explain the usage
|
||||
or purpose for the style.
|
||||
|
||||
@@ -48,16 +48,16 @@ Styles should be specified clearly, one per line. For example:
|
||||
|
||||
/* Ensure the codemirror editor displays full height gutters when resized */
|
||||
.CodeMirror, .CodeMirror-gutters {
|
||||
height: 100% !important;
|
||||
}
|
||||
height: 100% !important;
|
||||
}
|
||||
|
||||
All stylesheets must be CSS3 compliant.
|
||||
|
||||
HTML 5
|
||||
******
|
||||
|
||||
HTML 5 is used for page structure throughout the application, in most cases
|
||||
being rendered from templates by the Jinja2 template engine in Flask.
|
||||
HTML 5 is used for page structure throughout the application, in most cases
|
||||
being rendered from templates by the Jinja2 template engine in Flask.
|
||||
|
||||
All HTML must be HTML 5 compliant.
|
||||
|
||||
@@ -109,68 +109,20 @@ names.
|
||||
.. note:: From version 3.0 onwards, new or refactored code should be written using
|
||||
ES6 features and conventions.
|
||||
|
||||
C++
|
||||
***
|
||||
|
||||
C++ code is used in the desktop runtime for the application, primarily with the
|
||||
QT framework and an embedded Python interpreter. Note the use of hanging braces,
|
||||
which may be omitted if on a single statement is present:
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
// Ping the application server to see if it's alive
|
||||
bool PingServer(QUrl url)
|
||||
{
|
||||
QNetworkAccessManager manager;
|
||||
QEventLoop loop;
|
||||
QNetworkReply *reply;
|
||||
QVariant redirectUrl;
|
||||
|
||||
url.setPath("/utils/ping");
|
||||
|
||||
do
|
||||
{
|
||||
reply = manager.get(QNetworkRequest(url));
|
||||
|
||||
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
|
||||
loop.exec();
|
||||
|
||||
redirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
|
||||
url = redirectUrl.toUrl();
|
||||
|
||||
if (!redirectUrl.isNull())
|
||||
delete reply;
|
||||
|
||||
} while (!redirectUrl.isNull());
|
||||
|
||||
if (reply->error() != QNetworkReply::NoError)
|
||||
return false;
|
||||
|
||||
QString response = reply->readAll();
|
||||
|
||||
if (response != "PING")
|
||||
{
|
||||
qDebug() << "Failed to connect, server response: " << response;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Python
|
||||
******
|
||||
|
||||
Python is used for the backend web server. All code must be compatible with
|
||||
Python is used for the backend web server. All code must be compatible with
|
||||
Python 2.7 and should include PyDoc comments whilst following the official
|
||||
Python coding standards defined in
|
||||
`PEP 8 <https://www.python.org/dev/peps/pep-0008/>`_. An example function along
|
||||
Python coding standards defined in
|
||||
`PEP 8 <https://www.python.org/dev/peps/pep-0008/>`_. An example function along
|
||||
with the required file header is shown below::
|
||||
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2020, The pgAdmin Development Team
|
||||
# Copyright (C) 2013 - 2023, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
@@ -185,12 +137,12 @@ with the required file header is shown below::
|
||||
def get_nodes():
|
||||
"""Return a JSON document listing the server groups for the user"""
|
||||
groups = ServerGroup.query.filter_by(user_id=current_user.id)
|
||||
|
||||
|
||||
value = ''
|
||||
for group in groups:
|
||||
value += '{"id":%d,"label":"%s","icon":"icon-server-group","inode":true},' \
|
||||
% (group.id, group.name)
|
||||
|
||||
|
||||
value = value[:-1]
|
||||
|
||||
return value
|
||||
|
||||
return value
|
||||
@@ -79,7 +79,7 @@ rules specified for the locale, *fr-BI-x-icu. The collation is owned by
|
||||
https://www.postgresql.org/docs/current/locale.html
|
||||
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ Click the *Variables* tab to continue.
|
||||
:alt: Column dialog variables tab
|
||||
:align: center
|
||||
|
||||
Use the *Variables* tab to to specify the number of distinct values that may be
|
||||
Use the *Variables* tab to specify the number of distinct values that may be
|
||||
present in the column; this value overrides estimates made by the ANALYZE
|
||||
command. Click the *Add* icon (+) to add a *Name*/*Value* pair:
|
||||
|
||||
@@ -163,10 +163,10 @@ the *Column* dialog:
|
||||
:alt: Column dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a column named *territory* in the table
|
||||
named *distributors*.
|
||||
The example shown demonstrates creating a column named *sal* in the table
|
||||
named *jobhist*.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -79,5 +79,5 @@ The example demonstrates creating a compound trigger named *test_ct*.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -36,7 +36,7 @@ import config
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||
extensions = []
|
||||
extensions = ["sphinxcontrib.youtube"]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
@@ -208,8 +208,8 @@ htmlhelp_basename = 'pgadmin4'
|
||||
# (source start file, target name, title, author, documentclass
|
||||
# [howto/manual]).
|
||||
latex_documents = [
|
||||
('index', 'pgadmin4.tex', u'pgAdmin 4 Documentation',
|
||||
u'The pgAdmin Development Team', 'manual'),
|
||||
('index', 'pgadmin4.tex', 'pgAdmin 4 Documentation',
|
||||
'The pgAdmin Development Team', 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
@@ -247,6 +247,6 @@ latex_elements = {
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
('index', 'pgadmin4', u'pgAdmin 4 Documentation',
|
||||
[u'The pgAdmin Development Team'], 1)
|
||||
('index', 'pgadmin4', 'pgAdmin 4 Documentation',
|
||||
['The pgAdmin Development Team'], 1)
|
||||
]
|
||||
@@ -5,7 +5,16 @@
|
||||
***************************
|
||||
|
||||
There are multiple configuration files that are read at startup by pgAdmin. These
|
||||
are as follows:
|
||||
files are used for configuration options that:
|
||||
|
||||
* may be required to be set prior to startup of pgAdmin as they control how
|
||||
the application will operate.
|
||||
* system administrators may wish to control across an organisation to enforce
|
||||
security policies.
|
||||
* are so rarely or unlikely to be changed that it doesn't
|
||||
make sense to allow them to be changed through the user interface.
|
||||
|
||||
The configuration files are as follows:
|
||||
|
||||
* ``config.py``: This is the main configuration file, and should not be modified.
|
||||
It can be used as a reference for configuration settings, that may be overridden
|
||||
@@ -27,17 +36,21 @@ are as follows:
|
||||
intended for system administrators to include settings that are configured
|
||||
system-wide from a secure location that users cannot normally modify and that
|
||||
is outside of the pgAdmin installation. The location for this file varies
|
||||
based on the platform, and only needs to be created if desired:
|
||||
based on the platform, and only needs to be created if desired.
|
||||
|
||||
* Linux: ``/etc/pgadmin/config_system.py``
|
||||
* macOS: ``/Library/Preferences/pgadmin/config_system.py``
|
||||
* Windows: ``%CommonProgramFiles%\pgadmin\config_system.py``
|
||||
.. csv-table::
|
||||
:header: "**Platform**", "**File Location**"
|
||||
|
||||
.. note:: If the SERVER_MODE setting is changed in ``config_distro.py``,
|
||||
``config_local.py``, or ``config_system.py`` you will most likely need to
|
||||
re-set the LOG_FILE, SQLITE_PATH, SESSION_DB_PATH and STORAGE_DIR values
|
||||
as well as they will have been set based on the default configuration or
|
||||
overridden by the runtime.
|
||||
Linux,/etc/pgadmin/config_system.py
|
||||
macOS,/Library/Preferences/pgadmin/config_system.py
|
||||
Windows,%CommonProgramFiles%\\pgadmin\\config_system.py
|
||||
|
||||
.. note:: If the SERVER_MODE or DATA_DIR settings are changed in
|
||||
``config_distro.py``, ``config_local.py``, or ``config_system.py``
|
||||
LOG_FILE, SQLITE_PATH, SESSION_DB_PATH, STORAGE_DIR, KERBEROS_CCACHE_DIR,
|
||||
and AZURE_CREDENTIAL_CACHE_DIR values will be set based on DATA_DIR unless
|
||||
values are explicitly overridden for any of the variable in any of the
|
||||
above file.
|
||||
|
||||
The default ``config.py`` file is shown below for reference:
|
||||
|
||||
|
||||
@@ -18,12 +18,19 @@ control, and select *Server Group* from the *Create* menu.
|
||||
Use the fields on the *Server* dialog to define the connection properties for
|
||||
each new server that you wish to manage with pgAdmin. To open the *Server*
|
||||
dialog, right-click on the *Servers* node of the tree control, and select
|
||||
*Server* from the *Create* menu.
|
||||
*Server* from the *Register* menu.
|
||||
|
||||
.. toctree::
|
||||
|
||||
server_dialog
|
||||
|
||||
Alternatively you can use the *Cloud Deployment* wizard to deploy a new
|
||||
PostgreSQL instance in the cloud, and connect to it.
|
||||
|
||||
.. toctree::
|
||||
|
||||
cloud_deployment
|
||||
|
||||
A master password is required to secure and later unlock saved server passwords.
|
||||
It is set by the user and can be disabled using config.
|
||||
|
||||
|
||||
@@ -8,6 +8,31 @@ pgAdmin can be deployed in a container using the image at:
|
||||
|
||||
https://hub.docker.com/r/dpage/pgadmin4/
|
||||
|
||||
There are various tags that you can select from to get the version of pgAdmin
|
||||
that you want, using a command such as this if you're using Docker:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
docker pull dpage/pgadmin4:<tag name>
|
||||
|
||||
where *<tag name>* is one of the following:
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4
|
||||
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
| Tag name | Description |
|
||||
+==========+===============================================================================+
|
||||
| latest | The most recent release. |
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
| 6.14 | A specific version (6.14 in this case). |
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
| 6 | the latest release of a specific major version (major version 6 in this case).|
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
| snapshot | The latest nightly test build. |
|
||||
+----------+-------------------------------------------------------------------------------+
|
||||
|
||||
PostgreSQL Utilities
|
||||
********************
|
||||
|
||||
@@ -17,14 +42,26 @@ maintenance functions to be executed. Multiple versions are included in the
|
||||
following directories to allow use with different versions of the database
|
||||
server:
|
||||
|
||||
* PostgreSQL 9.5: */usr/local/pgsql-9.5*
|
||||
* PostgreSQL 9.6: */usr/local/pgsql-9.6*
|
||||
* PostgreSQL 10: */usr/local/pgsql-10*
|
||||
* PostgreSQL 11: */usr/local/pgsql-11*
|
||||
* PostgreSQL 12: */usr/local/pgsql-12*
|
||||
* PostgreSQL 13: */usr/local/pgsql-13*
|
||||
* PostgreSQL 14: */usr/local/pgsql-14*
|
||||
|
||||
The most recent version of the utilities is used by default; this may be
|
||||
changed in the :ref:`preferences`.
|
||||
The default binary paths set in the container are as follows:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
DEFAULT_BINARY_PATHS = {
|
||||
'pg-15': '/usr/local/pgsql-15',
|
||||
'pg-14': '/usr/local/pgsql-14',
|
||||
'pg-13': '/usr/local/pgsql-13',
|
||||
'pg-12': '/usr/local/pgsql-12',
|
||||
'pg-11': '/usr/local/pgsql-11',
|
||||
'pg-10': '/usr/local/pgsql-10'
|
||||
}
|
||||
|
||||
this may be changed in the :ref:`preferences`.
|
||||
|
||||
Environment Variables
|
||||
*********************
|
||||
@@ -41,6 +78,28 @@ to login to pgAdmin. This variable is required and must be set at launch time.
|
||||
This is the password used when setting up the initial administrator account to
|
||||
login to pgAdmin. This variable is required and must be set at launch time.
|
||||
|
||||
**PGADMIN_DEFAULT_PASSWORD_FILE**
|
||||
|
||||
This is the password used when setting up the initial administrator account to
|
||||
login to pgAdmin. This value should be set to *docker secret* in order to set
|
||||
the password. This variable is supported in docker swarm environment or while creating
|
||||
container with docker compose. PGADMIN_DEFAULT_PASSWORD or PGADMIN_DEFAULT_PASSWORD_FILE
|
||||
variable is required and must be set at launch time.
|
||||
|
||||
**PGADMIN_DISABLE_POSTFIX**
|
||||
|
||||
*Default: <null>*
|
||||
|
||||
If left unset, a Postfix server will be started to deliver password reset
|
||||
emails.
|
||||
|
||||
If set to any value, the Postfix server will not be started, and pgAdmin will
|
||||
need to be configured to use an external mail server using the *PGADMIN_CONFIG_*
|
||||
options below.
|
||||
|
||||
This option is useful if you're running in an environment that prevents the use
|
||||
of sudo to start Postfix, or if you wish to use an external mail server.
|
||||
|
||||
**PGADMIN_ENABLE_TLS**
|
||||
|
||||
*Default: <null>*
|
||||
@@ -73,7 +132,8 @@ than using the default.
|
||||
*Default: /pgadmin4/servers.json*
|
||||
|
||||
Override the default file path for the server definition list. See the
|
||||
/pgadmin4/servers.json mapped file below for more information.
|
||||
/pgadmin4/servers.json mapped file below for more information. See the format
|
||||
of the `JSON file <https://www.pgadmin.org/docs/pgadmin4/latest/import_export_servers.html#json-format>`_.
|
||||
|
||||
**GUNICORN_ACCESS_LOGFILE**
|
||||
|
||||
@@ -82,6 +142,15 @@ Override the default file path for the server definition list. See the
|
||||
Specify an output file in which to store the Gunicorn access logs, instead of
|
||||
sending them to stdout.
|
||||
|
||||
**GUNICORN_LIMIT_REQUEST_LINE**
|
||||
|
||||
*Default: 8190*
|
||||
|
||||
Set the maximum size of HTTP request line in bytes. By default the pgAdmin
|
||||
container uses the maximum limited size offered by Gunicorn as some requests
|
||||
can be quite large. In exceptional cases this value can be set to 0 (zero) to
|
||||
specify "unlimited", however this poses a potential denial of service hazard.
|
||||
|
||||
**GUNICORN_THREADS**
|
||||
|
||||
*Default: 25*
|
||||
@@ -90,7 +159,7 @@ Adjust the number of threads the Gunicorn server uses to handle incoming
|
||||
requests. This should typically be left as-is, except in highly loaded systems
|
||||
where it may be increased.
|
||||
|
||||
**PGADMIN_CONFIG_**
|
||||
**PGADMIN_CONFIG_***
|
||||
|
||||
This is a variable prefix that can be used to override any of the configuration
|
||||
options in pgAdmin's *config.py* file. Add the *PGADMIN_CONFIG_* prefix to any
|
||||
@@ -103,6 +172,12 @@ is read after */pgadmin4/config.py* and before */pgadmin4/config_local.py*.
|
||||
Any settings given will therefore override anything in config.py, but can be
|
||||
overridden by settings in config_local.py.
|
||||
|
||||
Settings are only written to */pgadmin4/config_distro.py* once, typically on
|
||||
first launch of the container. If */pgadmin4/config_distro.py* contains one or
|
||||
more lines, then no changes are made; for example, if the container instance is
|
||||
restarted, or */pgadmin4/config_distro.py* is mapped to a file on persistent
|
||||
storage (not recommended - use */pgadmin4/config_local.py* instead)!
|
||||
|
||||
See :ref:`config_py` for more information on the available configuration settings.
|
||||
|
||||
Mapped Files and Directories
|
||||
@@ -383,7 +458,7 @@ If you wish to host pgAdmin under a subdirectory using Traefik, the
|
||||
configuration changes are typically made to the way the container is launched
|
||||
and not to Traefik itself. For example, to host pgAdmin under */pgadmin4/*
|
||||
instead of at the root directory, the Traefik configuration above may be used if
|
||||
the container is launched like this:
|
||||
the container is launched like this while using the version v1 of Traefik:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@@ -399,3 +474,16 @@ The *SCRIPT_NAME* environment variable has been set to tell the container it is
|
||||
being hosted under a subdirectory (in the same way as the *X-Script-Name* header
|
||||
is used with Nginx), and a label has been added to tell Traefik to route
|
||||
requests under the subdirectory to this container.
|
||||
|
||||
While using the Traefik configuration for version v2 for hosting pgAdmin under subdirectory
|
||||
the container is typically launched per the example below:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
docker pull dpage/pgadmin4
|
||||
docker run --name "pgadmin4" \
|
||||
-e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
|
||||
-e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
|
||||
-e "SCRIPT_NAME=/pgadmin4" \
|
||||
-l "traefik.frontend.pgadmin4.rule=Host(`host.example.com`) && PathPrefix(`/pgadmin4`)" \
|
||||
-d dpage/pgadmin4
|
||||
@@ -15,7 +15,7 @@ development process used to develop, improve, and maintain the pgAdmin client.
|
||||
|
||||
.. toctree::
|
||||
|
||||
submitting_patches
|
||||
submitting_pull_requests
|
||||
code_overview
|
||||
coding_standards
|
||||
code_snippets
|
||||
|
||||
@@ -46,6 +46,7 @@ Use the *Definition* tab to set properties for the database:
|
||||
* Specify a connection limit in the *Connection Limit* field to configure the
|
||||
maximum number of connection requests. The default value (*-1*) allows
|
||||
unlimited connections to the database.
|
||||
* If the *templates?* is set to true, then database will be a template database.
|
||||
|
||||
Click the *Security* tab to continue.
|
||||
|
||||
@@ -131,5 +132,5 @@ allows unlimited connections, and is available to all authenticated users.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -15,7 +15,7 @@ installation, and is distributed as part of Advanced Server. You must have
|
||||
superuser privileges to use the debugger.
|
||||
|
||||
Before using the debugger, you must modify the *postgresql.conf* file, adding
|
||||
the server-side debugger components to the the value of the
|
||||
the server-side debugger components to the value of the
|
||||
*shared_preload_libraries* parameter, for example:
|
||||
|
||||
shared_preload_libraries = '$libdir/plugin_debugger'
|
||||
@@ -117,6 +117,8 @@ The toolbar options are:
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+
|
||||
| *Stop* | Click the *Stop* icon to halt the execution of a program. |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+
|
||||
| *Help* | Click the *Help* icon to open debugger documentation. |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+
|
||||
|
||||
The top panel of the debugger window displays the program body; click in the
|
||||
grey margin next to a line number to add a breakpoint. The highlighted line in
|
||||
|
||||
@@ -8,13 +8,8 @@ pgAdmin may be deployed as a desktop application by configuring the application
|
||||
to run in desktop mode and then utilising the desktop runtime to host the
|
||||
program on a supported Windows, Mac OS X or Linux installation.
|
||||
|
||||
The desktop runtime is a system-tray application that when launched, runs the
|
||||
pgAdmin server and launches a web browser to render the user interface. If
|
||||
additional instances of pgAdmin are launched, a new browser tab will be opened
|
||||
and be served by the existing instance of the server in order to minimise system
|
||||
resource utilisation. Clicking the icon in the system tray will present a menu
|
||||
offering options to open a new pgAdmin window, configure the runtime, view the
|
||||
server log and shut down the server.
|
||||
The desktop runtime is a standalone application that when launched, runs the
|
||||
pgAdmin server and opens a window to render the user interface.
|
||||
|
||||
.. note:: Pre-compiled and configured installation packages are available for
|
||||
a number of platforms. These packages should be used by end-users whereever
|
||||
@@ -24,7 +19,7 @@ server log and shut down the server.
|
||||
.. seealso:: For detailed instructions on building and configuring pgAdmin from
|
||||
scratch, please see the README file in the top level directory of the source code.
|
||||
For convenience, you can find the latest version of the file
|
||||
`here <https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=blob_plain;f=README>`_,
|
||||
`here <https://github.com/pgadmin-org/pgadmin4/blob/master/README.md>`_,
|
||||
but be aware that this may differ from the version included with the source code
|
||||
for a specific version of pgAdmin.
|
||||
|
||||
@@ -38,45 +33,107 @@ settings.
|
||||
|
||||
See :ref:`config_py` for more information on configuration settings.
|
||||
|
||||
Runtime
|
||||
*******
|
||||
Desktop Runtime Standalone Application
|
||||
======================================
|
||||
|
||||
When executed, the runtime will automatically try to execute the pgAdmin Python
|
||||
application. If execution fails, it will prompt you to adjust the Python Path
|
||||
to include the directories containing the pgAdmin code as well as any additional
|
||||
Python dependencies. You can enter a list of paths by separating them with a
|
||||
semi-colon character, for example:
|
||||
The Desktop Runtime is based on `NWjs <https://nwjs.io/>`_ which integrates a
|
||||
browser and the Python server creating a standalone application.
|
||||
|
||||
.. code-block:: bash
|
||||
.. image:: images/runtime_standalone.png
|
||||
:alt: Runtime Standalone
|
||||
:align: center
|
||||
|
||||
/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/;/Users/dpage/python-libs/
|
||||
Runtime Menu
|
||||
------------
|
||||
|
||||
The configuration settings are stored using the QSettings class in Qt, which
|
||||
will use an INI file on Unix systems (~/.config/pgadmin/pgadmin4.conf),
|
||||
a plist file on Mac OS X (~/Library/Preferences/org.pgadmin.pgadmin4.plist),
|
||||
and the registry on Windows (HKEY_CURRENT_USER\\Software\\pgadmin\\pgadmin4).
|
||||
.. image:: images/runtime_menu.png
|
||||
:alt: Runtime Menu
|
||||
:align: center
|
||||
|
||||
The configuration settings:
|
||||
Use the *File Menu* to access the *Runtime Menu*:
|
||||
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| Option | Action |
|
||||
+=========================+=========================================================================================================+
|
||||
| *Configure...* | Click to open configuration dialog to configure fixed port, port number and connection timeout. |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *View log...* | Click to open the view log dialog to view the pgAdmin 4 logs. |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *Enter Full Screen* | Click to enter/exit the full screen mode. Keyboard Shortcuts: OSX (Cmd + Ctrl + F), Other OS (F10). |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *Actual Size* | Click to change the window size to it original size. Keyboard Shortcuts: OSX (Cmd + 0), |
|
||||
| | Other OS (Ctrl + 0). |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *Zoom In* | Click to increase the zoom level. Keyboard Shortcuts: OSX (Cmd + +), Other OS (Ctrl + +). |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *Zoom Out* | Click to decrease the zoom level. Keyboard Shortcuts: OSX (Cmd + -), Other OS (Ctrl + -). |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Configuration Dialog
|
||||
--------------------
|
||||
|
||||
Use the *Runtime Menu* to access the *Configuration* dialog:
|
||||
|
||||
.. image:: images/runtime_configuration.png
|
||||
:alt: Runtime Configuration
|
||||
:align: center
|
||||
|
||||
Following are the details of the *Fixed port number?*, *Port Number*, *Connection
|
||||
Timeout*, and 'Open Documentation in Default Browser?' configuration parameters:
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 2 1 4
|
||||
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| Key | Type | Purpose |
|
||||
+==========================+====================+===============================================================+
|
||||
| ApplicationPath | String | The directory containing pgAdmin4.py |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| BrowserCommand | String | An alternate command to run instead of the default browser. |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| ConnectionTimeout | Integer | The number of seconds to wait for application server startup. |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| FixedPort | Boolean | Use a fixed network port number rather than a random one. |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| OpenTabAtStartup | Boolean | Open a browser tab at startup. |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| PortNumber | Integer | The port number to use, if using a fixed port. |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| PythonPath | String | The Python module search path |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
+----------------------------------------+--------------------+---------------------------------------------------------------+
|
||||
| Key | Type | Purpose |
|
||||
+========================================+====================+===============================================================+
|
||||
| FixedPort | Boolean | Use a fixed network port number rather than a random one. |
|
||||
+----------------------------------------+--------------------+---------------------------------------------------------------+
|
||||
| PortNumber | Integer | The port number to use, if using a fixed port. |
|
||||
+----------------------------------------+--------------------+---------------------------------------------------------------+
|
||||
| ConnectionTimeout | Integer | The number of seconds to wait for application server startup. |
|
||||
+----------------------------------------+--------------------+---------------------------------------------------------------+
|
||||
| Open Documentation in Default Browser | Boolean | By checking this option, all documentation links will open in |
|
||||
| | | the default browser instead of in a new window. |
|
||||
+----------------------------------------+--------------------+---------------------------------------------------------------+
|
||||
|
||||
Log dialog
|
||||
----------
|
||||
|
||||
Use the *Runtime Menu* to access the *Log* dialog:
|
||||
|
||||
.. image:: images/runtime_view_log.png
|
||||
:alt: Runtime View Log
|
||||
:align: center
|
||||
|
||||
Click on the *Reload* button at the bottom to view the latest logs of pgAdmin 4
|
||||
Server.
|
||||
|
||||
When executed, the runtime will automatically try to execute the pgAdmin Python
|
||||
application. If execution fails, it will prompt you with error message
|
||||
displaying a *Configure* button at the bottom. You can configure a fixed port
|
||||
number to avoid clashes of the default random port number with other
|
||||
applications and a connection timeout if desired.
|
||||
|
||||
.. image:: images/runtime_error.png
|
||||
:alt: Runtime Error
|
||||
:align: center
|
||||
|
||||
If the error is related to Python Path or pgAdmin Python file then you need to
|
||||
create a file named 'dev_config.json' and specify the following entries:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"pythonPath": "/path/to/python.exe",
|
||||
"pgadminFile": "/path/to/pgAdmin4.py"
|
||||
}
|
||||
|
||||
Note that the *dev_config.py* file should only be required by developers who are
|
||||
working outside of a standard installation.
|
||||
|
||||
The configuration settings are stored in *runtime_config.json* file, which
|
||||
will be available on Unix systems (~/.local/share/pgadmin/),
|
||||
on Mac OS X (~/Library/Preferences/pgadmin),
|
||||
and on Windows (%APPDATA%/pgadmin).
|
||||
@@ -15,3 +15,5 @@ PL/SQL code.
|
||||
query_tool
|
||||
editgrid
|
||||
schema_diff
|
||||
erd_tool
|
||||
psql_tool
|
||||
@@ -59,11 +59,11 @@ the *Domain Constraints* dialog:
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a domain constraint on the domain
|
||||
*timesheets* named *weekday*. It constrains a value to equal *Friday*.
|
||||
*timesheets* named *weekday*. It constrains a value equal to *Friday*.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
|
||||
@@ -114,12 +114,12 @@ the *Domain* dialog:
|
||||
:alt: Domain dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a domain named *minimum-wage* that
|
||||
confirms that the value entered is greater than or equal to *7.25*.
|
||||
The example shown demonstrates creating a domain named *postal_code* that
|
||||
confirms that the value entered is in proper format.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
`View/Edit Data`:index:
|
||||
***********************
|
||||
|
||||
To view or modify data, right click on a table or view name in the *Browser*
|
||||
tree control. When the context menu opens, use the *View/Edit Data* menu to
|
||||
specify the number of rows you would like to display in the editor panel.
|
||||
To view or modify data, right click on a table or view name in the
|
||||
*Object Explorer*. When the context menu opens, use the *View/Edit Data* menu
|
||||
to specify the number of rows you would like to display in the editor panel.
|
||||
|
||||
.. image:: images/editgrid.png
|
||||
:alt: Edit grid window
|
||||
@@ -107,6 +107,86 @@ properties of the geometries directly in map, just click the specific geometry:
|
||||
- *Internet access:* An internet connection is required for the Geometry Viewer
|
||||
to function correctly.
|
||||
|
||||
|
||||
**JSON Data Editor**
|
||||
|
||||
A built in json editor is provided for *JSON/JSONB Data*.Double clicking on json/jsonb
|
||||
data type cell in data grid will open JSON Editor.Editor provides different mode to
|
||||
view and edit json data.
|
||||
|
||||
|
||||
.. image:: images/json_editor_modes.png
|
||||
:alt: Json Editor
|
||||
:align: center
|
||||
|
||||
*Code Mode*:
|
||||
Provides way to format & compact json data.Also provides ability to repair json data
|
||||
by fixing quotes and escape characters, removing comments and JSONP notation and
|
||||
turn JavaScript objects into JSON.
|
||||
|
||||
*Tree Mode*:
|
||||
Enabled to change, add, move, remove, and duplicate fields and values.Provides ability
|
||||
to searh & hilight data.
|
||||
|
||||
*Form Mode*:
|
||||
Allows only to edit values in json data there by providing ability to keep data structure
|
||||
unchanged while editing.
|
||||
|
||||
*Preview Mode*:
|
||||
Provides ability to check data before saving and also shows size of current json data.
|
||||
Format and compact json data as well.
|
||||
|
||||
|
||||
*Editor Toolbar*
|
||||
|
||||
Different options are provided to manipulate json data.
|
||||
|
||||
Code/Preview mode:
|
||||
|
||||
.. image:: images/json_editor_code_preview_tool_bar.png
|
||||
:alt: Json Editor Code/Preview mode Tool Bar
|
||||
:align: center
|
||||
|
||||
|
||||
Tree/Form mode:
|
||||
|
||||
.. image:: images/json_editor_tree_form_mode_tool_bar.png
|
||||
:alt: Json Editor Tree/Form mode Tool Bar
|
||||
:align: center
|
||||
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 3 2
|
||||
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| Icon | Behavior | Available in mode |
|
||||
+======================+========================================================================================+===========================+
|
||||
| *Format Json* | Click to *Format Json* format json data with proper indentation. | Code, Preview |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Compact Json* | Click to *Compact Json* get compacted json data. | Code, Preview |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Sort* | Click to *Sort* icon to set sorting criteria for the data using file values. | Code, Preview, Tree |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Transform* | Click to *Transform* to filter data using JSME query language. | Code, Preview, Tree |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Undo* | Click to *Undo* to undo last action performed on data . | Code, Preview, Tree, From |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Redo* | Click to *Redo* to repat last action performed on data . | Code, Preview, Tree, From |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Mode* | Click to *Mode* dropdown to change dipaly mode of editor.Different modes avaialble | Code, Tree, From, Preview |
|
||||
| | are Code, Preview, Tree, From. | |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Expand All* | Click to *Expand All* to expand json data. | Tree, From |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Collapse All* | Click to *Redo* to collapse json data. | Tree, From |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Search Box* | Enter partial/complete string to search in data. | Tree, From |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
|
||||
|
||||
|
||||
|
||||
Sort/Filter options dialog
|
||||
**************************
|
||||
|
||||
@@ -135,11 +215,10 @@ To add new column(s) in data sorting grid, click on the [+] icon.
|
||||
|
||||
To delete a row from the grid, click the trash icon.
|
||||
|
||||
* Click the *Help* button (?) to access online help.
|
||||
* Click the *Ok* button to save work.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Close* button to discard current changes and close the dialog.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
viewdata_filter
|
||||
viewdata_filter
|
||||
@@ -1,105 +0,0 @@
|
||||
.. _enabling_ldap_authentication:
|
||||
|
||||
**************************************************
|
||||
`Enabling LDAP Authentication for pgAdmin`:index:
|
||||
**************************************************
|
||||
|
||||
To enable LDAP authentication for pgAdmin, you must configure the LDAP
|
||||
settings in the *config_local.py* or *config_system.py* file (see the
|
||||
:ref:`config.py <config_py>` documentation) on the system where pgAdmin is
|
||||
installed in Server mode. You can copy these settings from *config.py* file
|
||||
and modify the values for the following parameters:
|
||||
|
||||
There are 3 ways to configure LDAP:
|
||||
|
||||
* Bind as pgAdmin user
|
||||
|
||||
* Anonymous bind
|
||||
|
||||
* Dedicated user bind
|
||||
|
||||
|
||||
.. csv-table::
|
||||
:header: "**Parameter**", "**Description**"
|
||||
:class: longtable
|
||||
:widths: 35, 55
|
||||
|
||||
"AUTHENTICATION_SOURCES","The default value for this parameter is *internal*.
|
||||
To enable LDAP authentication, you must include *ldap* in the list of values
|
||||
for this parameter. you can modify the value as follows:
|
||||
|
||||
* [‘ldap’]: pgAdmin will use only LDAP authentication.
|
||||
|
||||
* [‘ldap’, ‘internal’]: pgAdmin will first try to authenticate the user through
|
||||
LDAP. If that authentication fails, then internal user entries of pgAdmin
|
||||
will be used for authentication.
|
||||
|
||||
* [‘internal’, ‘ldap’]: pgAdmin will first try to authenticate the user
|
||||
through internal user entries. If that authentication fails, then LDAP
|
||||
authentication will be used."
|
||||
"LDAP_AUTO_CREATE_USER", "Specifies if you want to automatically create a pgAdmin
|
||||
user corresponding to the LDAP user credentials. Please note that LDAP password
|
||||
is not stored in the pgAdmin database."
|
||||
"LDAP_CONNECTION_TIMEOUT","Specifies the connection timeout (in seconds) for LDAP
|
||||
authentication."
|
||||
"LDAP_SERVER_URI", "An LDAP URI is a combination of connection protocol
|
||||
(ldap or ldaps), IP address/hostname and port of the directory server that you
|
||||
want to connect to. For example, 'ldap://172.16.209.35:389' is a valid
|
||||
LDAP_SERVER_URI where ldap is the connection protocol, 172.16.209.35 is the IP
|
||||
address and 389 is the port. Port 636 is used for the ldaps communication protocol."
|
||||
"LDAP_USERNAME_ATTRIBUTE","Specifies the LDAP attribute that contains the
|
||||
usernames. For LDAP authentication, you need to enter the value of that
|
||||
particular attribute as username. For example, if you set the value of
|
||||
LDAP_USERNAME_ATTRIBUTE as ‘cn’ and you have defined 'cn=admin' in your LDAP server
|
||||
entries, you should be able to authenticate by entering ‘admin’ in the
|
||||
*Email Address / Username* field and its corresponding password in the *Password*
|
||||
field."
|
||||
"LDAP_SEARCH_BASE_DN","Specifies the distinguished name (DN) for the top-most user
|
||||
directory that you want to search. You can use this parameter for limiting the search
|
||||
request to a specific group of users. For example, if you want to search only within
|
||||
the Organizational Unit named sales, you can define the value for LDAP_SEARCH_BASE_DN
|
||||
parameter as following:
|
||||
LDAP_SEARCH_BASE_DN = ‘ou=sales,dc=example,dc=com'
|
||||
|
||||
This is an optional parameter only while binding as pgAdmin user.
|
||||
If you do not specify any value for LDAP_SEARCH_BASE_DN, then the value for
|
||||
LDAP_BASE_DN will be considered for the same."
|
||||
"LDAP_SEARCH_FILTER","Defines the criteria to retrieve matching entries in an
|
||||
LDAP search request. For example, LDAP_SEARCH_FILTER = '(objectclass=HR)’ setting
|
||||
searches only for users having HR as their objectClass attribute."
|
||||
"LDAP_SEARCH_SCOPE","Indicates the set of entries at or below the Base DN that
|
||||
maybe considered as potential matches for a search request. You can specify the
|
||||
scope of a search as either a *base*, *level*, or *subtree* search. A *base* search
|
||||
limits the search to the base object. A *level* search is restricted to the immediate
|
||||
children of a base object, but excludes the base object itself. A *subtree* search
|
||||
includes all child objects as well as the base object."
|
||||
"LDAP_USE_STARTTLS","Specifies if you want to use Transport Layer Security (TLS)
|
||||
for secure communication between LDAP clients and LDAP servers. If you specify
|
||||
the connection protocol in *LDAP_SERVER_URI* as *ldaps*, this parameter is ignored."
|
||||
"LDAP_CA_CERT_FILE","Specifies the path to the trusted CA certificate file. This
|
||||
parameter is applicable only if you are using *ldaps* as connection protocol and
|
||||
you have set *LDAP_USE_STARTTLS* parameter to *True*."
|
||||
"LDAP_CERT_FILE","Specifies the path to the server certificate file. This parameter
|
||||
is applicable only if you are using *ldaps* as connection protocol and you have
|
||||
set *LDAP_USE_STARTTLS* parameter to *True*."
|
||||
"LDAP_KEY_FILE","Specifies the path to the server private key file. This parameter
|
||||
is applicable only if you are using *ldaps* as connection protocol and you have
|
||||
set *LDAP_USE_STARTTLS* parameter to *True*."
|
||||
"**Bind as pgAdmin user**"
|
||||
"LDAP_BASE_DN","Specifies the base DN from where a server will start the search
|
||||
for users. For example, an LDAP search for any user will be performed by the server
|
||||
starting at the base DN (dc=example,dc=com). When the base DN matches, the full
|
||||
DN (cn=admin,dc=example,dc=com) is used to bind with the supplied password."
|
||||
"**Anonymous bind**"
|
||||
"LDAP_ANONYMOUS_BIND","Set this parameter to *True* for anonymous binding.
|
||||
After the connection is made, the pgadmin login user will be further authenticated
|
||||
by the username and password provided at the login screen."
|
||||
"**Dedicated user bind**"
|
||||
"LDAP_BIND_USER", "The account of the user to log in for simple bind.
|
||||
Set this parameter to allow the connection to bind using a dedicated user.
|
||||
After the connection is made, the pgadmin login user will be further
|
||||
authenticated by the username and password provided at the login screen.
|
||||
at the login screen."
|
||||
"LDAP_BIND_PASSWORD", "Password for simple bind.
|
||||
Specify the value if you have set the LDAP_BIND_USER parameter."
|
||||
|
||||
@@ -0,0 +1,258 @@
|
||||
.. _erd_tool:
|
||||
|
||||
*****************
|
||||
`ERD Tool`:index:
|
||||
*****************
|
||||
|
||||
The Entity-Relationship Diagram (ERD) tool is a database design tool that provides a graphical representation of database tables, columns, and inter-relationships. ERD can give sufficient information for the database administrator to follow when developing and maintaining the database. The ERD Tool allows you to:
|
||||
|
||||
* Design and visualize the database tables and their relationships.
|
||||
* Add notes to the diagram.
|
||||
* Auto-align the tables and links for cleaner visualization.
|
||||
* Save the diagram and open it later to continue working on it.
|
||||
* Generate ready to run SQL from the database design.
|
||||
* Generate the database diagram for an existing database.
|
||||
* Drag and drop tables from object explorer to the diagram.
|
||||
|
||||
.. image:: images/erd_tool.png
|
||||
:alt: ERD tool window
|
||||
:align: center
|
||||
|
||||
You can open multiple copies of the ERD tool in individual tabs simultaneously. To close a copy of the ERD tool, click the *X* in the upper-right hand corner of the tab bar.
|
||||
|
||||
Toolbar
|
||||
*******
|
||||
|
||||
The *ERD Tool* toolbar uses context-sensitive icons that provide shortcuts to frequently performed tasks. The option is enabled for the highlighted icon and is disabled for the grayed-out icon.
|
||||
|
||||
.. image:: images/erd_tool_toolbar.png
|
||||
:alt: ERD tool toolbar
|
||||
:align: center
|
||||
|
||||
Hover over an icon on Toolbar to display a tooltip that describes the icon's functionality.
|
||||
|
||||
File Options
|
||||
************
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4 1
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+================+
|
||||
| *Open File* | Click the *Open File* icon to load a previously saved diagram. | Ctrl + O |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Save* | Click the *Save* icon to perform a quick-save of a previously saved diagram, or to save the | Ctrl + S |
|
||||
| | diagram to a file. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Save as* | Click the *Save As* to open a new browser dialog and specify a new location to save the diagram. | Ctrl + Shift + |
|
||||
| | You need to click the down arrow beside the save button to see *Save As*. | S |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Export Options
|
||||
**************
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4 1
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+================+
|
||||
| *Generate SQL* | Click the *Generate SQL* icon to generate the DDL SQL for the diagram and open a query tool | Option + Ctrl +|
|
||||
| | with the generated SQL ready for execution. | S |
|
||||
| | You can select the option *With DROP Table* if you wish to have DROP Table DDL statements before | |
|
||||
| | each CREATE Table DDL. You can see the option by clicking the down arrow beside the SQL button. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Download image* | Click the *Download image* icon to save the ERD diagram in a image formate | Option + Ctrl +|
|
||||
| | | I |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Editing Options
|
||||
***************
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4 1
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+================+
|
||||
| *Add table* | Click this button to add a new table to the diagram. On clicking, this will open a table dialog | Option/Alt + |
|
||||
| | where you can put the table details. | Ctrl + A |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Edit table* | Click this button to edit a table on the diagram. On clicking, this will open a table dialog | Option/Alt + |
|
||||
| | where you can change table details. This will enable when a table is selected. | Ctrl + E |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Clone table* | Click this button to clone the complete table structure, name it with a auto generated name and | Option/Alt + |
|
||||
| | put it in the diagram. | Ctrl + C |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Drop table/link* | You can drop a table or link using this button. You need to select a table or link and click on | Option/Alt + |
|
||||
| | this button to drop it. | Ctrl + D |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Table Relationship Options
|
||||
**************************
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4 1
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+================+
|
||||
| *1M* | Click this button to open a one-to-many relationship dialog to add a relationship between the | Option/Alt + |
|
||||
| | two tables. The selected table becomes the referencing table and will have the *many* endpoint of | Ctrl + O |
|
||||
| | the link. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *MM* | Click this button to open a many-to-many relationship dialog to add a relationship between the | Option/Alt + |
|
||||
| | two tables. This option will create a new table based on the selected columns for the two relating| Ctrl + M |
|
||||
| | tables and link them. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Node Color Options
|
||||
**************************
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 5
|
||||
|
||||
+----------------------+----------------------------------------------------------------------------------------------------------+
|
||||
| Icon | Behavior |
|
||||
+======================+==========================================================================================================+
|
||||
| *Fill Color* | Use Fill Color to change the background color of a table node. This is helpful if you want to |
|
||||
| | identify a of group tables. Once set, all the newly added tables will take the same color. |
|
||||
+----------------------+----------------------------------------------------------------------------------------------------------+
|
||||
| *Text Color* | Use Text Color to change the text color of a table node based on the fill color to make text |
|
||||
| | easily readable. |
|
||||
+----------------------+----------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Utility Options
|
||||
***************
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4 1
|
||||
|
||||
+-------------------------+------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+=========================+================================================================================================+================+
|
||||
| *Add/Edit note* | Click this button to make notes on tables nodes while designing the database. | Option/Alt + |
|
||||
| | | Ctrl + N |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Auto align* | Click this button to auto align all tables and links to make it look more cleaner. | Option/Alt + |
|
||||
| | | Ctrl + L |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Show details* | Click this button to toggle the column details visibility. It allows you to show few or more | Option/Alt + |
|
||||
| | column details. | Shift + D |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Cardinality Notation* | Change the cardinality notation format used to present relationship links. Options available | |
|
||||
| | are - Crow's Foot Notation and Chen Notation. | |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Zoom Options
|
||||
************
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4 1
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+================+
|
||||
| *Zoom to fit* | Click this button to zoom in/out automatically and fit all the tables to the view. | Option/Alt + |
|
||||
| | | Shift + F |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Zoom in* | Click this button to zoom in the diagram. | Option/Alt + |
|
||||
| | | Shift + "+" |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Zoom out* | Click this button to zoom out the diagram. | Option/Alt + |
|
||||
| | | Shift + "-" |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Table Dialog
|
||||
************
|
||||
|
||||
.. image:: images/erd_table_dialog.png
|
||||
:alt: ERD tool table dialog
|
||||
:align: center
|
||||
|
||||
The table dialog allows you to:
|
||||
|
||||
* Change the table structure details.
|
||||
* It can be used edit an existing table or add a new one.
|
||||
* Refer :ref:`table dialog <table_dialog>` for information on different fields.
|
||||
|
||||
Table Node
|
||||
**********
|
||||
|
||||
.. image:: images/erd_table_node.png
|
||||
:alt: ERD tool table node
|
||||
:align: center
|
||||
|
||||
The table node shows table details in a graphical representation:
|
||||
|
||||
* The top bar has a *details toggle button* that is used to toggle column details visibility. There is also a *note button* that is visible only if there is some note added. you can click on this button to quickly change the note.
|
||||
* The first row shows the schema name of the table. Eg. *public* in above image.
|
||||
* The second row shows the table name. Eg. *users* in above image.
|
||||
* All other rows below the table name are the columns of the table along with data type. If the column is a primary key then it will have lock key icon eg. id is the primary key in above image. Otherwise, it will have column icon.
|
||||
* you can click on the node and drag to move on the canvas.
|
||||
* Upon double click on the table node or by clicking the edit button from the toolbar, the table dialog opens where you can change the table details. Refer :ref:`table dialog <table_dialog>` for information on different fields.
|
||||
|
||||
The One to Many Link Dialog
|
||||
***************************
|
||||
|
||||
.. image:: images/erd_1m_dialog.png
|
||||
:alt: ERD tool 1M dialog
|
||||
:align: center
|
||||
|
||||
The one to many link dialog allows you to:
|
||||
|
||||
* Add a foreign key relationship between two tables.
|
||||
* *Local Table* is the table that references a table and has the *many* end point.
|
||||
* *Local Column* the column that references.
|
||||
* *Referenced Table* is the table that is being referred and has the *one* end point.
|
||||
* *Referenced Column* the column that is being referred.
|
||||
|
||||
The Many to Many Link Dialog
|
||||
****************************
|
||||
|
||||
.. image:: images/erd_mm_dialog.png
|
||||
:alt: ERD tool MM dialog
|
||||
:align: center
|
||||
|
||||
The many to many link dialog allows you to:
|
||||
|
||||
* Add a many to many relationship between two tables.
|
||||
* It creates a relationship tables having columns derived from the two tables and link them to the tables.
|
||||
* *Left Table* is the first table that is to be linked. It will receive the *one* endpoint of the link with the new relation table.
|
||||
* *Left Column* the column of the first table, that will always be a primary key.
|
||||
* *Right Table* is the second table that is to be linked. It will receive the *one* endpoint of the link with the new relation table.
|
||||
* *Right Column* the column of the second table, that will always be a primary key.
|
||||
|
||||
The Table Link
|
||||
**************
|
||||
|
||||
.. image:: images/erd_table_link.png
|
||||
:alt: ERD tool table link
|
||||
:align: center
|
||||
|
||||
The table link shows relationship between tables:
|
||||
|
||||
* The single line endpoint of the link shows the column that is being referred.
|
||||
* The three line endpoint of the link shows the column that refers.
|
||||
* If one of the columns that is being referred or that refers is removed from the table then the link will get dropped.
|
||||
* you can click on the link and drag to move on the canvas.
|
||||
|
||||
|
||||
The Table Notes
|
||||
***************
|
||||
|
||||
.. image:: images/erd_table_note.png
|
||||
:alt: ERD tool table note
|
||||
:align: center
|
||||
|
||||
* You can use the notes popup to mark some notes while designing the database.
|
||||
* You open the pop-up using the toolbar note button.
|
||||
* If some note is added to a table then it will have notes button on the table node. You can click on the button to check/update notes.
|
||||
@@ -4,14 +4,14 @@
|
||||
`Event Trigger Dialog`:index:
|
||||
*****************************
|
||||
|
||||
Use the *Domain Trigger* dialog to define an event trigger. Unlike regular
|
||||
Use the *Event Trigger* dialog to define an event trigger. Unlike regular
|
||||
triggers, which are attached to a single table and capture only DML events,
|
||||
event triggers are global to a particular database and are capable of capturing
|
||||
DDL events. Like regular triggers, event triggers can be written in any
|
||||
procedural language that includes event trigger support, or in C, but not in
|
||||
SQL.
|
||||
|
||||
The *Domain Trigger* dialog organizes the development of a event trigger through
|
||||
The *Event Trigger* dialog organizes the development of a event trigger through
|
||||
the following dialog tabs: *General*, *Definition*, and *Security Labels*. The
|
||||
*SQL* tab displays the SQL code generated by dialog selections.
|
||||
|
||||
@@ -67,7 +67,7 @@ in the *Delete Row* popup.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Domain Trigger* dialog generate a generate a SQL command.
|
||||
Your entries in the *Event Trigger* dialog generate a generate a SQL command.
|
||||
Use the *SQL* tab for review; revisit or switch tabs to make any changes to the
|
||||
SQL command.
|
||||
|
||||
@@ -75,18 +75,18 @@ Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Domain Trigger* dialog:
|
||||
the *Event Trigger* dialog:
|
||||
|
||||
.. image:: images/event_trigger_sql.png
|
||||
:alt: Event trigger dialog sql tab
|
||||
:align: center
|
||||
|
||||
The command creates an event trigger named *accounts* that invokes the procedure
|
||||
named *acct_due*.
|
||||
named *evt_tri_fun*.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
|
||||
@@ -58,13 +58,15 @@ Click the *Columns* tab to continue.
|
||||
:alt: Exclusion constraint dialog columns tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Columns* tab to to specify the column(s) to which the
|
||||
constraint applies. Use the drop-down listbox next to *Column* to select a
|
||||
column and click the *Add* icon (+) to provide details of the action on the
|
||||
column:
|
||||
Use the fields in the *Columns* tab to specify the column(s) or expression(s)
|
||||
to which the constraint applies. Use the *Is expression ?* switch to enable
|
||||
expression text input. Use the drop-down listbox next to *Column*
|
||||
to select a column. Once the *Column* is selected or the *Expression* is
|
||||
entered then click the *Add* icon (+) to provide details of the action on the
|
||||
column/expression:
|
||||
|
||||
* The *Column* field is populated with the selection made in the *Column*
|
||||
drop-down listbox.
|
||||
* The *Col/Exp* field is populated with the selection made in the *Column*
|
||||
drop-down listbox or the *Expression* entered.
|
||||
* If applicable, use the drop-down listbox in the *Operator class* to specify
|
||||
the operator class that will be used by the index for the column.
|
||||
* Move the *DESC* switch to *DESC* to specify a descending sort order. The
|
||||
@@ -94,11 +96,9 @@ the *Exclusion Constraint* dialog:
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating an exclusion constraint named
|
||||
*exclude_department* that restricts additions to the dept table to those
|
||||
additions that are not equal to the value of the *deptno* column. The
|
||||
constraint uses a btree index.
|
||||
*ex_dept_no*. The constraint uses a btree index.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -54,11 +54,11 @@ the *Extension* dialog:
|
||||
:alt: Extension dialog sql tab
|
||||
:align: center
|
||||
|
||||
The command creates the *chkpass* extension in the *public* schema. It is
|
||||
version *1.0* of *chkpass*.
|
||||
The command creates the *adminpack* extension in the *public* schema. It is
|
||||
version *1.0* of *adminpack*.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
.. _external_database:
|
||||
|
||||
****************************************************
|
||||
`External database for pgAdmin user settings`:index:
|
||||
****************************************************
|
||||
|
||||
The user settings used by pgAdmin are stored in a SQLite database. In this
|
||||
database, many settings are stored, such as preferences, user accounts,
|
||||
auto-discovered servers, and many more.
|
||||
|
||||
As SQLite is a file-based database and it can be anywhere in the file system,
|
||||
so it is not designed to take care of failures (no HA support). Furthermore,
|
||||
it isn't designed to handle multiple connections concurrently reading/writing
|
||||
data to it. Example: In environments such as Kubernetes it may be useful to
|
||||
use an alternate backend to avoid using SQLite on non-ephemeral storage and to
|
||||
allow HA of the settings database.
|
||||
|
||||
In order to prevent this, pgAdmin now supports storing user settings in an
|
||||
external database using the new 'CONFIG_DATABASE_URI' parameter in the
|
||||
:ref:`config.py <config_py>` file.
|
||||
|
||||
Use SQLite Database
|
||||
*******************
|
||||
|
||||
In order to use SQLite Database, make sure CONFIG_DATABASE_URI parameter is
|
||||
set to an empty string like ''. By default it is set to an empty string in the
|
||||
config.py so if you would like to use SQLite database then no need to change
|
||||
anything.
|
||||
|
||||
Use External Database
|
||||
*********************
|
||||
|
||||
In order to use an external database, make sure CONFIG_DATABASE_URI parameter
|
||||
is set like "dialect+driver://username:password@host:port/database".
|
||||
|
||||
**Note** It is recommended to create the database in advance.
|
||||
|
||||
Use PostgreSQL Database
|
||||
***********************
|
||||
|
||||
Following are the formats to use PostgreSQL as an external database.
|
||||
|
||||
Basic syntax:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
postgresql://username:password@host:port/database
|
||||
|
||||
Using specific schema (It is recommended to create the schema in advance):
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
postgresql://username:password@host:port/database?options=-csearch_path=<schema name>
|
||||
|
||||
Using default pgpass path for the service account:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
postgresql://username@host:port?options=-csearch_path=<schema name>
|
||||
|
||||
Specifying pgpass file path:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
postgresql://username@host:port?passfile=<path of the pgpass file>&options=-csearch_path=<schema name>
|
||||
@@ -53,7 +53,7 @@ Click the *Options* tab to continue.
|
||||
|
||||
Use the fields in the *Options* tab to specify options:
|
||||
|
||||
* Click the the *Add* icon (+) button to add an option/value pair for the
|
||||
* Click the *Add* icon (+) button to add an option/value pair for the
|
||||
foreign data wrapper. Supported option/value pairs will be specific to the
|
||||
selected foreign data wrapper.
|
||||
* Specify the option name in the *Option* field and provide a corresponding
|
||||
@@ -97,12 +97,12 @@ the *Foreign Data Wrapper* dialog:
|
||||
:alt: Foreign data wrapper dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example creates a foreign data wrapper named *libpq_debug* that uses
|
||||
The example creates a foreign data wrapper named *lib_qp_debug* that uses
|
||||
pre-existing validator and handler functions, *dblink_fdw_validator* and
|
||||
*libpg_fdw_handler*. Selections on the *Options* tab set *debug* equal to
|
||||
*true*. The foreign data wrapper is owned by *postgres*.
|
||||
|
||||
* Click the *Help* button (?) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -129,10 +129,10 @@ the *Foreign key* dialog:
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a foreign key constraint named
|
||||
*territory_fkey* that matches values in the *distributors* table *territory*
|
||||
column with those of the *sales_territories* table *region* column.
|
||||
*jobhist_ref_dept_fk* that matches values in the *jobhist* table *dept_no*
|
||||
column with those of the *dept* table *deptno* column.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -93,5 +93,5 @@ Options for the foreign server include a host and a port.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -49,7 +49,7 @@ Click the *Columns* tab to continue.
|
||||
:alt: Foreign table dialog columns tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Columns* tab to to add columns and their attributes to
|
||||
Use the fields in the *Columns* tab to add columns and their attributes to
|
||||
the table. Click the *Add* icon (+) to define a column:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the column.
|
||||
@@ -157,10 +157,10 @@ the *Foreign Table* dialog:
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a foreign table *weblogs* with multiple
|
||||
columns and two options.
|
||||
columns.
|
||||
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -49,7 +49,7 @@ Click the *Tokens* tab to continue.
|
||||
Use the fields in the *Tokens* tab to add a token:
|
||||
|
||||
* Use the *Tokens* field to specify the name of a token.
|
||||
* Click the *Add* icon (+) to create a token.
|
||||
* Click the *Add* button to create a token.
|
||||
* Use the *Dictionaries* field to specify a dictionary.
|
||||
|
||||
Repeat these steps to add additional tokens; to discard a token, click the
|
||||
@@ -73,11 +73,11 @@ the *FTS Configuration* dialog:
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a FTS configuration named
|
||||
*meme_phrases*. It uses the *default* parser.
|
||||
*english_phrases*. It uses the *default* parser.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ The example shown demonstrates creating a custom dictionary named
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ command.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
@@ -52,12 +52,12 @@ the *FTS Template* dialog:
|
||||
:alt: FTS template dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a fts template named *ru_template* that
|
||||
The example shown demonstrates creating a fts template named *eng.template* that
|
||||
uses the ispell dictionary.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
|
||||
@@ -181,5 +181,5 @@ function have three columns (p_ename, p_sal and p_comm).
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -33,9 +33,15 @@ Mode is pre-configured for security.
|
||||
|
||||
deployment
|
||||
login
|
||||
mfa
|
||||
user_management
|
||||
change_ownership
|
||||
change_user_password
|
||||
enabling_ldap_authentication
|
||||
restore_locked_user
|
||||
ldap
|
||||
kerberos
|
||||
oauth2
|
||||
webserver
|
||||
|
||||
|
||||
.. note:: Pre-compiled and configured installation packages are available for
|
||||
|
||||
@@ -10,8 +10,8 @@ search box, dropdown lists, and checkboxes facilitate quick selections of
|
||||
database objects, roles and privileges.
|
||||
|
||||
The wizard organizes privilege management through a sequence of windows:
|
||||
*Object Selection (step 1 of 3)*, *Privileges Selection (step 2 of 3)* and
|
||||
*Final (Review Selection) (step 3 of 3)*. The *Final (Review Selection)* window
|
||||
*Object Selection*, *Privileges Selection* and
|
||||
*Review Selection*. The *Review Selection* window
|
||||
displays the SQL code generated by wizard selections.
|
||||
|
||||
To launch the *Grant Wizard* tool, select a database object in the *pgAdmin*
|
||||
@@ -22,7 +22,7 @@ tree control, then navigate through *Tools* on the menu bar to click on the
|
||||
:alt: Grant wizard step one page
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Object Selection (step 1 of 3)* window to select the
|
||||
Use the fields in the *Object Selection* window to select the
|
||||
object or objects on which you are modifying privileges. Use the *Search by
|
||||
object type or name* field to locate a database object, or use the scrollbar
|
||||
to scroll through the list of all accessible objects.
|
||||
@@ -35,14 +35,14 @@ to scroll through the list of all accessible objects.
|
||||
* The schema in which the object resides in the *Schema* field
|
||||
* The object name in the *Name* field.
|
||||
|
||||
Click the *Next* button to continue, or the *Cancel* button to close the wizard
|
||||
Click the *Next* button to continue, or the *X* button to close the wizard
|
||||
without modifying privileges.
|
||||
|
||||
.. image:: images/grant_wizard_step2.png
|
||||
:alt: Grant wizard step two page
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Privileges Selection (step 2 of 3)* window to grant
|
||||
Use the fields in the *Privileges Selection* window to grant
|
||||
privileges. If you grant a privilege WITH GRANT OPTION, the Grantee will have
|
||||
the right to grant privileges on the object to others. If WITH GRANT OPTION is
|
||||
subsequently revoked, any role who received access to that object from that
|
||||
@@ -64,11 +64,11 @@ For more information about granting privileges on database objects, see the
|
||||
`PostgreSQL core documentation <https://www.postgresql.org/docs/current/sql-grant.html>`_.
|
||||
|
||||
Click the *Next* button to continue, the *Back* button to select or deselect
|
||||
additional database objects, or the *Cancel* button to close the wizard without
|
||||
additional database objects, or the *X* button to close the wizard without
|
||||
modifying privileges.
|
||||
|
||||
Your entries in the *Grant Wizard* tool generate a SQL command; you can review
|
||||
the command in the *Final (Review Selection) (step 3 of 3)* window (see an
|
||||
the command in the *Review Selection* window (see an
|
||||
example below).
|
||||
|
||||
Example
|
||||
@@ -81,11 +81,6 @@ the *Grant Wizard* tool:
|
||||
:alt: Grant wizard step three page
|
||||
:align: center
|
||||
|
||||
The commands displayed assign a role named *Bob* *INSERT* and *UPDATE*
|
||||
privileges *WITH GRANT OPTION* on the *sales_meetings* and the
|
||||
*sales_territories* tables.
|
||||
|
||||
* Click the *Back* button to select or deselect additional database objects,
|
||||
roles and privileges.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Finish* button to save selections and exit the wizard.
|
||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 299 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 166 KiB After Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 184 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 34 KiB |