Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
89e2f09b84 | ||
|
|
0fd9ee06bd | ||
|
|
3f73516f8c | ||
|
|
e3b1ef0b80 | ||
|
|
ae18b9a0ac | ||
|
|
b0af385ea0 | ||
|
|
0122cf9aac | ||
|
|
085a4f4abf | ||
|
|
ad0bcba99e | ||
|
|
7a05edc42a | ||
|
|
d2f93d6fad | ||
|
|
1466e414ec | ||
|
|
8f61944386 | ||
|
|
63df19ee1c | ||
|
|
93adf6884f | ||
|
|
36574b25b6 | ||
|
|
26506a9727 | ||
|
|
caeea7940a | ||
|
|
5b688cf949 | ||
|
|
7dd313f5fc | ||
|
|
1f70385a4e | ||
|
|
8129df42da | ||
|
|
082b968bbc | ||
|
|
2907a79dd7 | ||
|
|
46af290b85 | ||
|
|
26a758a0d6 | ||
|
|
9d006d0ec5 | ||
|
|
7a0bfecfc5 | ||
|
|
604937cf66 | ||
|
|
4f74609ecf | ||
|
|
3672013ddc | ||
|
|
9ad7476a34 | ||
|
|
23a12efd29 | ||
|
|
518b13c779 | ||
|
|
d9c20de31f | ||
|
|
d6400bbcae | ||
|
|
68a5027d15 | ||
|
|
48ec4085d2 | ||
|
|
e494b1520d | ||
|
|
aac0da4cbc | ||
|
|
48737e6a02 | ||
|
|
1122e06f48 | ||
|
|
e3dfe03a2a | ||
|
|
6a406f466d | ||
|
|
aa679e06b2 | ||
|
|
d2621282dc | ||
|
|
5ce2773658 | ||
|
|
43e127de31 | ||
|
|
87d08de3a0 | ||
|
|
536593bf8a | ||
|
|
eb2c554601 | ||
|
|
318d712c4f | ||
|
|
32d904058a | ||
|
|
56cf64ad22 | ||
|
|
dd7eb54e90 | ||
|
|
89fa85d650 | ||
|
|
099fea15ae | ||
|
|
74fd5dfe96 | ||
|
|
287a6628ed | ||
|
|
510dd5c047 | ||
|
|
f715373218 | ||
|
|
5820b9521e | ||
|
|
6fc6ec1cda | ||
|
|
a0893fe43b | ||
|
|
46ba0310fa | ||
|
|
ed0dc62b69 | ||
|
|
fb0bc65ced | ||
|
|
f57558fdb2 | ||
|
|
f93cfe8c4c | ||
|
|
7a22cff28c | ||
|
|
043025d1eb | ||
|
|
4cf8c2f300 | ||
|
|
937877e841 | ||
|
|
dd27e08a98 | ||
|
|
1fbf298d30 | ||
|
|
505a3ac960 | ||
|
|
310450cfa7 | ||
|
|
5f619ae40a | ||
|
|
28a4359020 | ||
|
|
f177d54f21 | ||
|
|
851c15b2d6 | ||
|
|
c0e30c93e5 | ||
|
|
645517d22d | ||
|
|
3983e2c13c | ||
|
|
f29db1a9cd | ||
|
|
c723b4584c | ||
|
|
b75c09d7c0 | ||
|
|
225c3e8f7e | ||
|
|
7edcca9b07 | ||
|
|
9174db2024 | ||
|
|
69e2ec806b | ||
|
|
04ce8b2c71 | ||
|
|
2bfb7c20c8 | ||
|
|
fb2178e5d3 | ||
|
|
4e2c4b0498 | ||
|
|
13d2f9131d | ||
|
|
64cdd509b0 | ||
|
|
bd15d2d0f7 | ||
|
|
64f5253bd3 | ||
|
|
9d0f3ce90b | ||
|
|
703faf3b15 | ||
|
|
5d8c79da38 | ||
|
|
522ddad72b | ||
|
|
11c4877859 | ||
|
|
2469032f15 | ||
|
|
bd9dc97b4f | ||
|
|
d6893f9d8a | ||
|
|
4f34bc0f0e | ||
|
|
a91e4d8a7f | ||
|
|
161c9b0fc7 | ||
|
|
0013a3b047 | ||
|
|
1889c256e1 | ||
|
|
9113932066 | ||
|
|
d3eaac8609 | ||
|
|
e6edf40048 | ||
|
|
dd38fed6e0 | ||
|
|
5ac656c638 | ||
|
|
6855ac1d5e | ||
|
|
29175d7ec4 | ||
|
|
92858e40bf | ||
|
|
e8b81db977 | ||
|
|
7420673a0f | ||
|
|
357a9179b1 | ||
|
|
2cefa9afca | ||
|
|
e1168f8de0 | ||
|
|
290cf8271b | ||
|
|
916182f80f | ||
|
|
2db9242f5c | ||
|
|
3c08e618bd | ||
|
|
c58fda0a70 | ||
|
|
b4c25bdc0a | ||
|
|
36a2c073bd | ||
|
|
776bec0d82 | ||
|
|
ab2dc60097 | ||
|
|
aee6bac5ef | ||
|
|
58b4c45d0c | ||
|
|
a6ce78a8c0 | ||
|
|
2ebf203412 | ||
|
|
45a03dd663 | ||
|
|
fcf720a5d8 | ||
|
|
cb1cdd1b23 | ||
|
|
0d92059155 | ||
|
|
80ab596992 | ||
|
|
b5f0190799 | ||
|
|
3d5a2046c4 | ||
|
|
341c3aded6 | ||
|
|
dd4dc19add | ||
|
|
1ab257d512 | ||
|
|
2ec8051303 | ||
|
|
ec30e6ace7 | ||
|
|
ced296939f | ||
|
|
1802f8a3f8 | ||
|
|
8b10315e2a | ||
|
|
e0fa4a6cb2 | ||
|
|
1366dd1fcd | ||
|
|
0850db2a9b | ||
|
|
a881e4e3f8 | ||
|
|
192a446131 | ||
|
|
b30c590866 | ||
|
|
6dd3ca31be | ||
|
|
c2e875d54b | ||
|
|
979f806161 | ||
|
|
3102a8d24b | ||
|
|
21d57b1f10 | ||
|
|
c873218c32 | ||
|
|
4c05287677 | ||
|
|
6713bc068b | ||
|
|
46d26cd029 | ||
|
|
88db5ec4d5 | ||
|
|
102d6e7a9a | ||
|
|
7add777b21 | ||
|
|
2db518c9c6 | ||
|
|
b91f6f0f5c | ||
|
|
115657a465 | ||
|
|
8e28e0a32b | ||
|
|
830ac1cc91 | ||
|
|
5206dafb35 | ||
|
|
c7a16a4bd5 | ||
|
|
707ff450b5 | ||
|
|
6a63279396 | ||
|
|
d3b3d07f2e | ||
|
|
a1fd9ea3ce | ||
|
|
db9d684524 | ||
|
|
15c621b1d8 | ||
|
|
cdf1c7a2a6 | ||
|
|
d265ed9729 | ||
|
|
18b3cc2683 | ||
|
|
c064eb0795 | ||
|
|
c2268c82ee | ||
|
|
caebdcfa91 | ||
|
|
6012f49919 | ||
|
|
d2f4a62bf3 | ||
|
|
9d25973a77 | ||
|
|
34fbe756e8 | ||
|
|
daad16ea93 | ||
|
|
6620f9263d | ||
|
|
9e40995ab0 | ||
|
|
ecdd95d15a | ||
|
|
d6b22f1f4c | ||
|
|
7ce7808093 | ||
|
|
2395075b7c | ||
|
|
bc24e3643f | ||
|
|
6d3f13076f | ||
|
|
905be1d894 | ||
|
|
a278e8b1e6 | ||
|
|
f0490a54b7 | ||
|
|
5ed1e1e5b6 | ||
|
|
df05efd7d9 | ||
|
|
7c12ade161 | ||
|
|
cb268075c2 | ||
|
|
9f5e8962b5 | ||
|
|
6525f25a22 | ||
|
|
aa15d2a7e2 | ||
|
|
1ca9912987 | ||
|
|
d43518cb3c | ||
|
|
cf64e2c97c | ||
|
|
3e00fe2b0f | ||
|
|
2ae5c0ec4f | ||
|
|
697f4aec95 | ||
|
|
023a1f222f | ||
|
|
a21e6448ce | ||
|
|
eb1b17b636 | ||
|
|
38cd3327f3 | ||
|
|
8ab358ccec | ||
|
|
641f7bbe9d | ||
|
|
a23fad0ba8 | ||
|
|
18277543b6 | ||
|
|
bfa0b87791 | ||
|
|
8c20f0c0d2 | ||
|
|
ee1ea47e88 | ||
|
|
82c4a4a03e | ||
|
|
21efe6f902 | ||
|
|
5c60dcd501 | ||
|
|
85e89c869a | ||
|
|
1485ff338f | ||
|
|
ac4b5ab7fa | ||
|
|
eb971a0320 | ||
|
|
92d9c41da7 | ||
|
|
ba91e3fc1f | ||
|
|
726ecd79e6 | ||
|
|
d22e276586 | ||
|
|
3d0319dba7 | ||
|
|
4a0efc0e86 | ||
|
|
445abf1e31 | ||
|
|
7f58552f60 | ||
|
|
2549085872 | ||
|
|
9e67a0b0e7 | ||
|
|
a1a232a1f1 | ||
|
|
c932213abd | ||
|
|
a0c19252df | ||
|
|
67c978b7a4 | ||
|
|
f4750f0096 | ||
|
|
676fec8694 | ||
|
|
60a0b66414 | ||
|
|
1050c9857a | ||
|
|
b21b03495d | ||
|
|
4632a7faba | ||
|
|
ccb39bea1a | ||
|
|
bda62cb1f1 | ||
|
|
09b76b306c | ||
|
|
e10f1274dc | ||
|
|
9468c16233 | ||
|
|
65fb0f901c | ||
|
|
1347c89d61 | ||
|
|
b1cbcc7ef6 | ||
|
|
22c3a2649b | ||
|
|
2bb0b25688 | ||
|
|
2aefc6361e | ||
|
|
83cb01b8cd | ||
|
|
d42b712ee4 | ||
|
|
fec458dd6a | ||
|
|
9b8902dfb8 | ||
|
|
4a8037fc6a | ||
|
|
d927a517aa | ||
|
|
96939ba985 | ||
|
|
414b074bad | ||
|
|
7b1cac6914 | ||
|
|
4aaacfd5b0 | ||
|
|
52187306ce | ||
|
|
0e799b16b0 | ||
|
|
569d05df4e | ||
|
|
eac5fe5157 | ||
|
|
5337514c63 | ||
|
|
d1bdb178e2 | ||
|
|
9f445dc052 | ||
|
|
d58c33dec0 | ||
|
|
0f56c25893 | ||
|
|
762784d2b5 | ||
|
|
6d6cd19b37 | ||
|
|
c0451cd454 | ||
|
|
0620fafb6c | ||
|
|
a9a1a975a6 | ||
|
|
8a06a836f4 | ||
|
|
dba5761ad0 | ||
|
|
8ec1d4c9eb | ||
|
|
46e9924ebb | ||
|
|
12a7ce54d9 | ||
|
|
9d08776824 | ||
|
|
073d90c4a6 | ||
|
|
7d4ddc3910 | ||
|
|
1294c089a8 | ||
|
|
b64896f558 | ||
|
|
e73e2d2502 | ||
|
|
9338bdcb3a | ||
|
|
d68e6bd892 | ||
|
|
057a2b2312 | ||
|
|
46d186a49f | ||
|
|
7164c677de | ||
|
|
6ad46e1860 | ||
|
|
a662d866af | ||
|
|
a0940fd145 | ||
|
|
f61448eea2 | ||
|
|
943495de31 | ||
|
|
059f1e38cc | ||
|
|
370094274c | ||
|
|
04d6d4e2cc | ||
|
|
cf31d0187b | ||
|
|
f1963401d6 | ||
|
|
94bd1f1680 | ||
|
|
908e156113 | ||
|
|
5fe7813f9f | ||
|
|
d61b8eb1b3 | ||
|
|
0fc2afb829 | ||
|
|
cc2e3ece7a | ||
|
|
5656f756e6 | ||
|
|
9bdf900b25 | ||
|
|
0ec60a6f85 | ||
|
|
70e24ba059 | ||
|
|
ad80217593 | ||
|
|
7dd00a1494 | ||
|
|
109051e1d5 | ||
|
|
86afec860f | ||
|
|
393741fd9d | ||
|
|
e8a4b46ba1 | ||
|
|
97be3d8179 | ||
|
|
505956d1fa | ||
|
|
f7ef86dced | ||
|
|
3138f36e05 | ||
|
|
fe264aafa7 | ||
|
|
88aebb64f9 | ||
|
|
6d1f67f3be | ||
|
|
50a423b142 | ||
|
|
b716800474 | ||
|
|
b695329d2d | ||
|
|
fbee63085c | ||
|
|
99d1068f70 | ||
|
|
18748846ef | ||
|
|
b80784f5a1 | ||
|
|
76eb3e9b67 | ||
|
|
0f6abcc7fa | ||
|
|
ed106e3577 | ||
|
|
3c9aed4d6f | ||
|
|
9daa7c7a7c | ||
|
|
b7dad25d3e | ||
|
|
64a26b560b | ||
|
|
d5bfc726c0 | ||
|
|
0dcb448f2e | ||
|
|
ccafde604e | ||
|
|
ef58d277ca | ||
|
|
6642860d51 | ||
|
|
aec64aa582 | ||
|
|
6de1d3f7de | ||
|
|
90849fe29b | ||
|
|
17129b259b | ||
|
|
dfb74904ed | ||
|
|
2b5c90e379 | ||
|
|
2e29f3fd6d | ||
|
|
637c80c38b | ||
|
|
c76732e3e7 | ||
|
|
870bcbd932 | ||
|
|
b0464500ca | ||
|
|
5e91ed2bb1 | ||
|
|
6e5dbf7beb | ||
|
|
553eeb034d | ||
|
|
858294f36e | ||
|
|
4c616f32eb | ||
|
|
b29bc6868c | ||
|
|
07f72252d7 | ||
|
|
f289dfb762 | ||
|
|
8d4f3c07c7 | ||
|
|
7e30a99937 | ||
|
|
3d516101a4 | ||
|
|
b0b60da84a | ||
|
|
05abb9e430 | ||
|
|
dc4571a3c8 | ||
|
|
7361470b64 | ||
|
|
f282b26883 | ||
|
|
4692b21bcf | ||
|
|
36a3d4e53b | ||
|
|
8bdfa18efb | ||
|
|
52d031f2d0 | ||
|
|
d8ad0b8faf | ||
|
|
c6deb9393c | ||
|
|
d35433d0b8 | ||
|
|
0ce4f49e08 | ||
|
|
dc1e32a632 | ||
|
|
c0a2f1f24d | ||
|
|
0dd1cb3fc1 | ||
|
|
eec2cfd5dd | ||
|
|
d6cab7b421 | ||
|
|
8254e9f030 | ||
|
|
7493649893 | ||
|
|
738c421edf | ||
|
|
c41da41efe | ||
|
|
ed0a596286 | ||
|
|
31a929388b | ||
|
|
0424f7d962 | ||
|
|
8654d6cf43 | ||
|
|
25553b11ed | ||
|
|
74b3495542 | ||
|
|
ee29e64039 | ||
|
|
3a4641889c | ||
|
|
d9c84edf9a | ||
|
|
a930c6617b | ||
|
|
6c5883bce0 | ||
|
|
414e336852 | ||
|
|
d226ffbd1f | ||
|
|
65bc196eba | ||
|
|
12530cd973 | ||
|
|
a0fcb38e68 | ||
|
|
a05acb4f99 | ||
|
|
21cb1a0166 | ||
|
|
41521a9b98 | ||
|
|
781b766ac4 | ||
|
|
df11f28593 | ||
|
|
030741bba5 | ||
|
|
41be5479af | ||
|
|
9c93e93cb4 | ||
|
|
b427a87724 | ||
|
|
077589e08b | ||
|
|
4de6b93ba8 | ||
|
|
014ce31589 | ||
|
|
d9574f3caa | ||
|
|
6a9af07f7a | ||
|
|
e238ecf182 | ||
|
|
c8646f99c0 | ||
|
|
31f255b541 | ||
|
|
fecf3915c5 | ||
|
|
8a550b569f | ||
|
|
1a34f61b24 | ||
|
|
775e61c248 | ||
|
|
aa7ced4ef1 | ||
|
|
d9f6baac72 | ||
|
|
8fe687eb55 | ||
|
|
6c693d158e | ||
|
|
6b3e1f1e65 | ||
|
|
8fe344c268 | ||
|
|
c7afa30d0c | ||
|
|
14f21921bb | ||
|
|
29ae6dfbf6 | ||
|
|
a6c03a6b75 | ||
|
|
068b812245 | ||
|
|
a84a62def8 | ||
|
|
7f0847b95d | ||
|
|
073e310a5a | ||
|
|
d9e95d13e6 | ||
|
|
f4607885e1 | ||
|
|
03f4109ac4 | ||
|
|
bd0aaf7665 | ||
|
|
134c1802e7 | ||
|
|
33deacacee | ||
|
|
d6bc3ccc8b | ||
|
|
e1f990190e | ||
|
|
f77aa3284f | ||
|
|
8ceeb39268 | ||
|
|
4f71dae598 | ||
|
|
4da327088c | ||
|
|
e26a9a25d5 | ||
|
|
99e4c3350f | ||
|
|
99a72e529b | ||
|
|
824e3866d8 | ||
|
|
ce89ae3c1d | ||
|
|
4036f2a0f2 | ||
|
|
37f55ccc25 | ||
|
|
358c5d0a0f | ||
|
|
a09ada18ee | ||
|
|
88a1e03314 | ||
|
|
75b6341a84 | ||
|
|
e538a4f710 | ||
|
|
af00296ffe | ||
|
|
dd7d3c6e23 | ||
|
|
e576a886d0 | ||
|
|
f0d077fed8 | ||
|
|
37e39ca089 | ||
|
|
7c2b218076 | ||
|
|
002fdb33fc | ||
|
|
13b65c9a6a | ||
|
|
e6118a06e8 | ||
|
|
63ac71190b | ||
|
|
37542ae706 | ||
|
|
89d4d835ba | ||
|
|
9f0ea70945 | ||
|
|
86e4a88201 | ||
|
|
c002881f66 | ||
|
|
f17d4530a3 | ||
|
|
94a76cc9e0 | ||
|
|
4c0b229b14 | ||
|
|
17d0d5e0a2 | ||
|
|
f97d29243d | ||
|
|
94864104e4 | ||
|
|
6988ce96d7 | ||
|
|
98492e7718 | ||
|
|
becb453e7d | ||
|
|
35644fdd35 | ||
|
|
5ab056759b | ||
|
|
e1aeaba942 | ||
|
|
e256fc32d9 | ||
|
|
a7ba446703 | ||
|
|
26d0a3e5cb | ||
|
|
7f571fa7d8 | ||
|
|
cb600549c3 | ||
|
|
e1cb6d92c5 | ||
|
|
8812a7db69 | ||
|
|
96361656e4 | ||
|
|
83785da1bc | ||
|
|
4fe69e825e | ||
|
|
6105fc861d | ||
|
|
f156696339 | ||
|
|
b6c8707a4d | ||
|
|
3031c5055a | ||
|
|
44c0d76541 | ||
|
|
0b101d9efd | ||
|
|
b69995b34d | ||
|
|
ef6c9fbd6d | ||
|
|
e43f58d11f | ||
|
|
a684b48fb3 | ||
|
|
7cc30e3216 | ||
|
|
6586be5158 | ||
|
|
1bd14895c3 | ||
|
|
82155cd859 | ||
|
|
0ed3cd248b | ||
|
|
43451fd3f0 | ||
|
|
6340c70d7a | ||
|
|
8e40c8630d | ||
|
|
b9a036e5cb | ||
|
|
e330407d44 | ||
|
|
aa127fe0bd | ||
|
|
16f1e87bb7 | ||
|
|
4db0a6524d | ||
|
|
c9d04684ce | ||
|
|
5262405f06 | ||
|
|
6a90f7c2e1 | ||
|
|
6d766176c1 | ||
|
|
eaf4781f5f | ||
|
|
787c11efda | ||
|
|
fd07e0c868 | ||
|
|
9bad590e9e | ||
|
|
29c236c33d | ||
|
|
a44f17a2fc | ||
|
|
915b09255c | ||
|
|
1964e824c8 | ||
|
|
3e10e2c978 | ||
|
|
e9f16a29cf | ||
|
|
019932c323 | ||
|
|
2ae279a382 | ||
|
|
bf88ff1076 | ||
|
|
3db961cb0f | ||
|
|
02f90aca0b | ||
|
|
c9500a5122 | ||
|
|
26cdda090e | ||
|
|
520b03cb0a | ||
|
|
93e83dddae | ||
|
|
917d08c61e | ||
|
|
49c614160d | ||
|
|
b6173c9d7b | ||
|
|
b0a0a7c50a | ||
|
|
1f0728b7d1 | ||
|
|
59757dbf55 | ||
|
|
641701ca16 | ||
|
|
4f5c3987f1 | ||
|
|
d24a43b1cc | ||
|
|
64a8be3c4f | ||
|
|
0d77bc305e | ||
|
|
96b0d85189 | ||
|
|
3b1c8abd2f | ||
|
|
210bbfdbe1 | ||
|
|
0da23b837d | ||
|
|
989aa462f7 | ||
|
|
75a3e92098 | ||
|
|
02f9de5bdb | ||
|
|
c418a9c9ca | ||
|
|
f167d77b61 | ||
|
|
6594481992 | ||
|
|
4faf14b45f | ||
|
|
198063f046 | ||
|
|
f5d46bf9f1 | ||
|
|
fde8e4054a | ||
|
|
b4b54d6b94 | ||
|
|
23e218f1b5 | ||
|
|
33cb649f26 | ||
|
|
30b4b5b349 | ||
|
|
430e9ae994 | ||
|
|
af56b92af4 | ||
|
|
e2bfac9e42 | ||
|
|
4ab3bbeb82 | ||
|
|
8c3bba65e5 | ||
|
|
d59816054f | ||
|
|
9dccd20bb3 | ||
|
|
45f2e35a99 | ||
|
|
8b99a33e6e | ||
|
|
a54efeddfa | ||
|
|
ed279cac31 | ||
|
|
be4b8284c5 | ||
|
|
093d7af748 | ||
|
|
76d04205ef | ||
|
|
4080511d9d | ||
|
|
195e9663da | ||
|
|
82c2d50885 | ||
|
|
2979424db5 | ||
|
|
d4ee869281 | ||
|
|
df0f6690fd | ||
|
|
c0532f6d13 | ||
|
|
4d53d0eb01 | ||
|
|
c9de5f00c6 | ||
|
|
7668d9af08 | ||
|
|
66f5a40cd9 | ||
|
|
a887019337 | ||
|
|
b617a5d89d | ||
|
|
b0877f63b5 | ||
|
|
56af090e54 | ||
|
|
fa74a42b34 | ||
|
|
c0595e62ee | ||
|
|
f5afc51879 | ||
|
|
01c7636c75 | ||
|
|
964f746d76 | ||
|
|
febbd729ec | ||
|
|
737f8375fb | ||
|
|
fc5287bd9f | ||
|
|
8c4dff057f | ||
|
|
37f76142fb | ||
|
|
cc5c3776ca | ||
|
|
ea3eabc3c7 | ||
|
|
f495af7a76 | ||
|
|
4b9bfb2e4a | ||
|
|
15c518f0f1 | ||
|
|
a6841bb1e1 | ||
|
|
584a200bf0 | ||
|
|
60304e5a46 | ||
|
|
f1a18749f6 | ||
|
|
e29ea15554 | ||
|
|
ded71be73f | ||
|
|
1f5ccd1c3b | ||
|
|
8cb239abcb | ||
|
|
8e8f89aa8f | ||
|
|
53f418b9a2 | ||
|
|
9bda583d5b | ||
|
|
11bf5fc679 | ||
|
|
43d37e3b4c | ||
|
|
3247223595 | ||
|
|
4a87b1387a | ||
|
|
cb26ca0e46 | ||
|
|
f15db03ec3 | ||
|
|
619c4e1180 | ||
|
|
f44627c205 | ||
|
|
1b2cd8404a | ||
|
|
4a2e587123 | ||
|
|
6e2cf8ced2 | ||
|
|
1a9d365c42 | ||
|
|
f8e443bda7 | ||
|
|
1bdb7d33fc | ||
|
|
75ac259632 | ||
|
|
0bd26222d8 | ||
|
|
f8e1973bc2 | ||
|
|
6c7fe644e5 | ||
|
|
f901eeeb4a | ||
|
|
b9c7a9e887 | ||
|
|
5093e6db5e | ||
|
|
f7cc79fab1 | ||
|
|
9110703aaa | ||
|
|
0a67b2ecb9 | ||
|
|
d476343b99 | ||
|
|
ac2bd5e6ee | ||
|
|
246a475600 | ||
|
|
ae2aadeede | ||
|
|
d95e8db4ee | ||
|
|
cccc6e5676 | ||
|
|
c4facc04d3 | ||
|
|
d98e86d3df | ||
|
|
623ff4f91f | ||
|
|
4fa1bdba5a | ||
|
|
4ed2d74d9c | ||
|
|
700e01708b | ||
|
|
1a39dedc62 | ||
|
|
a03b8b4f76 | ||
|
|
ae462ed099 | ||
|
|
5316a28e6c | ||
|
|
bb845817d6 | ||
|
|
425cc2a966 | ||
|
|
dc47c8f898 | ||
|
|
de878b3198 | ||
|
|
00ce130286 | ||
|
|
3ff4dfd02d | ||
|
|
397a1b9616 | ||
|
|
6a5d98cf19 | ||
|
|
f22134dabd | ||
|
|
b7d7bda93a | ||
|
|
3d4d40fa02 | ||
|
|
42cd2a2276 | ||
|
|
7b568cfce2 | ||
|
|
00ebc58795 | ||
|
|
79e04d5e23 | ||
|
|
636ab29669 | ||
|
|
fb87920bbb | ||
|
|
8a03c42bd4 | ||
|
|
5b00ad0336 | ||
|
|
314990447c | ||
|
|
664d9a2144 | ||
|
|
c1c682402a | ||
|
|
7282e15ee2 | ||
|
|
b48121335c | ||
|
|
ea0c077180 | ||
|
|
c11bed3819 | ||
|
|
022cf3d93c | ||
|
|
2522c8c9e2 | ||
|
|
475a717cd6 | ||
|
|
4c192393b0 | ||
|
|
9961a6c101 | ||
|
|
c3c3e802ca | ||
|
|
1ebf7948c6 | ||
|
|
f98136cd99 | ||
|
|
8180403f97 | ||
|
|
62d55cabd9 | ||
|
|
091d2cd0d2 | ||
|
|
69fba93152 | ||
|
|
570ee58f53 | ||
|
|
e10b58e4ca | ||
|
|
080ccdda5b | ||
|
|
a7d8b9de8c | ||
|
|
30c7effa50 | ||
|
|
f85efb2797 | ||
|
|
f8e0b54836 | ||
|
|
131a944e24 | ||
|
|
ab5d954337 | ||
|
|
4bec7df33b | ||
|
|
fbc3e2d0e7 | ||
|
|
4f9d2de8cd | ||
|
|
18b7483cc4 | ||
|
|
c25034a86d | ||
|
|
7408b8c8d9 | ||
|
|
06022dfd7e | ||
|
|
30e9673375 | ||
|
|
2182dc3cc5 | ||
|
|
1f6a0a87f6 | ||
|
|
6d7ff9444a | ||
|
|
4125360dfb | ||
|
|
a804485a4c | ||
|
|
02642628b0 | ||
|
|
5b438e13cc | ||
|
|
687fe617cc | ||
|
|
03391a07e0 | ||
|
|
e987fe9d37 | ||
|
|
d7b1e2cd9c | ||
|
|
2790689d26 | ||
|
|
7c271d21ae | ||
|
|
75e2167165 | ||
|
|
94170757e8 | ||
|
|
9bdb5ea5e0 | ||
|
|
c3e11bd390 | ||
|
|
d056a94f0c | ||
|
|
f16498a8a7 | ||
|
|
e5638b520d | ||
|
|
6e4923d762 | ||
|
|
1e4fd552ac | ||
|
|
55c6fa0d93 | ||
|
|
7489c372e5 | ||
|
|
893ef4701d | ||
|
|
41ee58e79a | ||
|
|
bf2c001c87 | ||
|
|
245a6e6f57 | ||
|
|
6c662ae672 | ||
|
|
8249e66419 | ||
|
|
6032692de0 | ||
|
|
c580c9d4b3 | ||
|
|
8e974b80ca | ||
|
|
faf8062830 | ||
|
|
56e00d74ad | ||
|
|
051e5038b5 | ||
|
|
c54017eac5 | ||
|
|
73dc130908 | ||
|
|
82aa2d1819 | ||
|
|
1bef98fdfa | ||
|
|
faa6236580 | ||
|
|
a1b0139c9b | ||
|
|
f881542834 | ||
|
|
e64d6edc73 | ||
|
|
b10378fe70 | ||
|
|
80b05973c6 | ||
|
|
426d9d5872 | ||
|
|
110a51c5b2 | ||
|
|
aa668856f7 | ||
|
|
d923dcf98b | ||
|
|
6e7759f1d5 | ||
|
|
2acd2a5615 | ||
|
|
f5a6df4ddb | ||
|
|
da553eec9b | ||
|
|
9a69d27009 | ||
|
|
83170a0e94 | ||
|
|
6d8c53bffd | ||
|
|
7944e75695 | ||
|
|
31653aef70 | ||
|
|
6a931588aa | ||
|
|
b4a754bdc0 | ||
|
|
199844e82c | ||
|
|
db06dd0275 | ||
|
|
72505b27cb | ||
|
|
9f26e7ed20 | ||
|
|
8e4e8b3e5a | ||
|
|
9eff2e9926 | ||
|
|
1c2ba72f02 | ||
|
|
5e54f20578 | ||
|
|
2d4429fa64 | ||
|
|
85baa22ca1 | ||
|
|
4690700a24 | ||
|
|
4745ad56e9 | ||
|
|
04357b7a55 | ||
|
|
a0f6e5272a | ||
|
|
eeeb350ed2 | ||
|
|
a68f0702e2 | ||
|
|
60a6c501fb | ||
|
|
5ff3f40116 | ||
|
|
662266a367 | ||
|
|
bc91a7c7b2 | ||
|
|
0ca65d7cfe | ||
|
|
47f26cc377 | ||
|
|
e0c53e7d1d | ||
|
|
d6da1cf25c | ||
|
|
fc4bef56a0 | ||
|
|
028473eb83 | ||
|
|
ac298b03c0 | ||
|
|
06ad6b8ba8 | ||
|
|
dbbbb2e5ed | ||
|
|
28b741a13a | ||
|
|
1ddc9cc889 | ||
|
|
53ab4d7e8d | ||
|
|
f8f7d5ac6f | ||
|
|
5887fb3815 | ||
|
|
234efc3be7 | ||
|
|
25f85fe123 | ||
|
|
3dadb8989b | ||
|
|
232fe286ee | ||
|
|
6192c48ef9 | ||
|
|
92aabb215f | ||
|
|
c76b30e353 | ||
|
|
1795141aec | ||
|
|
9f455a514e | ||
|
|
7090c02014 | ||
|
|
dc64ce331a | ||
|
|
094e5577e8 | ||
|
|
41e2a674e3 | ||
|
|
bdff046c57 | ||
|
|
5c8aefc01e | ||
|
|
ed76787b76 | ||
|
|
f3e4721a90 | ||
|
|
0d6f07a035 | ||
|
|
624f229ce7 | ||
|
|
3155380621 | ||
|
|
663e8382f3 | ||
|
|
659d0b8436 | ||
|
|
24f9f65b1b | ||
|
|
177def1e58 | ||
|
|
3f541200d9 | ||
|
|
687204771c | ||
|
|
4403f326e9 | ||
|
|
35bbee3023 | ||
|
|
a51de78292 | ||
|
|
a850e7bd5a | ||
|
|
b618dfe286 | ||
|
|
99b51f8f20 | ||
|
|
bfca1e3ac8 | ||
|
|
7f667f5761 | ||
|
|
1281f5cd6c | ||
|
|
350ffcce7c | ||
|
|
8331f62e1c | ||
|
|
c29275011a | ||
|
|
7f53e13aa7 | ||
|
|
d1530015ee | ||
|
|
228d3dde5b | ||
|
|
3a5464b278 | ||
|
|
b9d5e08e8f | ||
|
|
4067d65a30 | ||
|
|
ee2099d9c6 | ||
|
|
bfb05d3f9f | ||
|
|
9cdb3b40ab | ||
|
|
6800b1f723 | ||
|
|
db7a2e3023 | ||
|
|
ee8fec6d7f | ||
|
|
f8afe2ef94 | ||
|
|
efbad77dbe | ||
|
|
b5c8c85c90 | ||
|
|
d7ee4bb932 | ||
|
|
8780462708 | ||
|
|
99a8b70e00 | ||
|
|
0cfd76c279 | ||
|
|
537c27a58e | ||
|
|
aab5fadc01 | ||
|
|
97e39699ea | ||
|
|
76e658ee12 | ||
|
|
7b65507533 | ||
|
|
cbe40176c1 | ||
|
|
bcb1392a1a | ||
|
|
9a8a28e4f9 | ||
|
|
1ff007d1cb | ||
|
|
3cb02bcdc3 | ||
|
|
82d209946f | ||
|
|
2ef3080d0e | ||
|
|
5b322d94e8 | ||
|
|
adb5cd34bf | ||
|
|
108af5c10b | ||
|
|
136bb412a1 | ||
|
|
8cfe39e837 | ||
|
|
ec968dbc14 | ||
|
|
b4d9fea83d | ||
|
|
c019778a47 | ||
|
|
6e49c9c36f | ||
|
|
1813eca1ca | ||
|
|
4a6991d0df | ||
|
|
003ab44a91 | ||
|
|
5a0aae0c1c | ||
|
|
f5b927b925 | ||
|
|
d78dfbd30f | ||
|
|
8168f623c4 | ||
|
|
710d520631 | ||
|
|
beb06a4c76 | ||
|
|
aed6b9e636 | ||
|
|
2c2c738f31 | ||
|
|
ab87035658 | ||
|
|
d3ef1137d9 | ||
|
|
0b82a4ad92 | ||
|
|
f4453e33cc | ||
|
|
809e0682bd | ||
|
|
1831c9e70a | ||
|
|
1dcf46cc5f | ||
|
|
88ab6db976 | ||
|
|
79e6f4c008 | ||
|
|
6b5ca07715 | ||
|
|
3f4d5a687b | ||
|
|
ce8a2bb266 | ||
|
|
3dd1e8e102 | ||
|
|
29fd83dc6c | ||
|
|
ed01274f7b | ||
|
|
20a5899c7d | ||
|
|
1df26cb731 | ||
|
|
379b92729a | ||
|
|
4cbc1f2f59 | ||
|
|
28585110dd | ||
|
|
cdf655f7db | ||
|
|
e6c067025c | ||
|
|
6c7e95a463 | ||
|
|
49503dc73d | ||
|
|
f7d6966d60 | ||
|
|
bf0d53bc2c | ||
|
|
2a56e47c5c | ||
|
|
84b712a008 | ||
|
|
f085460453 | ||
|
|
1a9d8f01aa | ||
|
|
f4ac1e804e | ||
|
|
a17687e27c | ||
|
|
08e6d54184 | ||
|
|
07089785be | ||
|
|
8c39b10d9c | ||
|
|
bd0e4a5a8f | ||
|
|
863f62f4d8 | ||
|
|
7c38c1cb38 | ||
|
|
11a3aa56be | ||
|
|
e4bf52f355 | ||
|
|
ba32c98241 | ||
|
|
954c0d3101 | ||
|
|
6a2ba22f75 | ||
|
|
776884860e | ||
|
|
0aa18fd466 | ||
|
|
15427334af | ||
|
|
3487b3360e | ||
|
|
fabb644230 | ||
|
|
bf1f9a4b07 | ||
|
|
588e3814d1 | ||
|
|
f4bc4475cd | ||
|
|
0340b8fb28 | ||
|
|
15556f9f89 | ||
|
|
b76e0bea83 | ||
|
|
252429df50 | ||
|
|
d6c6b4a15a | ||
|
|
64d31b9d3f | ||
|
|
24ec882f45 | ||
|
|
d397959f6a | ||
|
|
da8cf14047 | ||
|
|
2451db8797 | ||
|
|
173b812b93 | ||
|
|
bdb8f20aed | ||
|
|
0d42f8026c | ||
|
|
c69ffaa91c | ||
|
|
173acd46a5 | ||
|
|
c39d257bf6 | ||
|
|
b3490ba3de | ||
|
|
4e5d8fe8e2 | ||
|
|
c4de5474a4 | ||
|
|
ebb5e3fe65 | ||
|
|
644624eabe | ||
|
|
9dbb74367d | ||
|
|
c07e52b9de | ||
|
|
78d55c7cc0 | ||
|
|
81752bb998 | ||
|
|
fb4afce629 | ||
|
|
6e8ebbd375 | ||
|
|
5c0ea0c012 | ||
|
|
ce7679c4bd | ||
|
|
b36d5d153b | ||
|
|
9e65c971a3 | ||
|
|
71919a4ce9 | ||
|
|
402dfd07db | ||
|
|
bf548dda3f | ||
|
|
2894c6cd14 | ||
|
|
3b69f92d70 | ||
|
|
82bd94e696 | ||
|
|
04328b76ba | ||
|
|
08b78fb6a1 | ||
|
|
23364464c2 | ||
|
|
d774a0ff67 | ||
|
|
5437a8adab | ||
|
|
6d52f2b911 | ||
|
|
2ca11c84e8 | ||
|
|
f561c0cee6 | ||
|
|
321b445a7e | ||
|
|
7ff85903e4 | ||
|
|
8b9c50ee5c | ||
|
|
4b6e9b031c | ||
|
|
e691885881 | ||
|
|
caf181d5e3 | ||
|
|
d90136d93d | ||
|
|
9a00a8a60b | ||
|
|
a588c2994d | ||
|
|
13704a4f34 | ||
|
|
912db8913f | ||
|
|
969a2961fe | ||
|
|
6b80523872 | ||
|
|
c16c593322 | ||
|
|
6a7339bbe4 | ||
|
|
41a20e0252 | ||
|
|
2dd075161d | ||
|
|
91075cc3f5 | ||
|
|
26c7d76d4f | ||
|
|
2185ea302d | ||
|
|
32defc91cc | ||
|
|
37bde4aaf4 | ||
|
|
1f76d207f2 | ||
|
|
8eab534c95 | ||
|
|
0eb3008426 | ||
|
|
dd187b9122 | ||
|
|
15252b0a26 | ||
|
|
aa95ff9f57 | ||
|
|
dad0d690db | ||
|
|
2fa849dc26 | ||
|
|
f340cd044b | ||
|
|
991f667f9f | ||
|
|
307637b969 | ||
|
|
91595593d3 | ||
|
|
12186a0fd6 | ||
|
|
9fdf68d559 | ||
|
|
8851cb0704 | ||
|
|
a936f708de | ||
|
|
dfa892d2a2 | ||
|
|
6f0eafb223 | ||
|
|
90a45557b9 | ||
|
|
2790d01c31 | ||
|
|
4d23bb24a5 | ||
|
|
361f7077fd | ||
|
|
dcd163ac02 | ||
|
|
ee37be56f9 | ||
|
|
f1ef7b0346 | ||
|
|
0ee50ac248 | ||
|
|
ea4dbd31e8 | ||
|
|
155768a2d7 | ||
|
|
da8da7bb49 | ||
|
|
5786c17569 | ||
|
|
941dea99f5 | ||
|
|
ab5f35da8d | ||
|
|
db4bb22cc6 | ||
|
|
2cd58efcdd | ||
|
|
ed8d1cde00 | ||
|
|
b7121bb2d2 | ||
|
|
3364350b01 | ||
|
|
4b421550d3 | ||
|
|
020d9bb018 | ||
|
|
eb189844e7 | ||
|
|
20c42d878b | ||
|
|
036bd66638 | ||
|
|
f02f91cbf1 | ||
|
|
34b59da526 | ||
|
|
277bf85645 | ||
|
|
991fe3d797 | ||
|
|
4009ac3108 | ||
|
|
92e6a47713 | ||
|
|
e53c2b1a5d | ||
|
|
e536408ce2 | ||
|
|
f74448a1b2 | ||
|
|
9b5a6e2bb7 | ||
|
|
3fef078ec8 | ||
|
|
74af8976c9 | ||
|
|
ecded18333 | ||
|
|
5452bff49e | ||
|
|
05ae330030 | ||
|
|
94e1820ccd | ||
|
|
49b318c39e | ||
|
|
4ac064de42 | ||
|
|
2ef71cf749 | ||
|
|
d96f453e7f | ||
|
|
0b47d1dbf6 | ||
|
|
d728ee7436 | ||
|
|
1a192109d6 | ||
|
|
024cfd2fab | ||
|
|
a25bb2b7db | ||
|
|
fd3337024f | ||
|
|
ded446fe8a | ||
|
|
a9d964b5ca | ||
|
|
9c3925e448 | ||
|
|
6016a5ee98 | ||
|
|
490999f528 | ||
|
|
ceb0e39e14 | ||
|
|
3bed332439 | ||
|
|
c21ea3c342 | ||
|
|
84ecffa4d9 | ||
|
|
9bff6c7157 | ||
|
|
5c4c09f237 | ||
|
|
f706f7ed0c | ||
|
|
fb12b2e2fc | ||
|
|
badbbade08 | ||
|
|
614c66940a | ||
|
|
7f23f729c6 | ||
|
|
a019e2de6f | ||
|
|
d286bada5c | ||
|
|
fe6e5e3c45 | ||
|
|
61ff588c09 | ||
|
|
a2aabf6270 | ||
|
|
55c6f5205d | ||
|
|
5965bc9107 | ||
|
|
be313bb17b | ||
|
|
7627e9c699 | ||
|
|
4d45a3cb24 | ||
|
|
97919d091a | ||
|
|
8aaacdf96e | ||
|
|
fbc6aea497 | ||
|
|
6fb35f2649 | ||
|
|
b917246be9 | ||
|
|
9c2ea3ca11 | ||
|
|
a5ebdafb82 | ||
|
|
c43aa9b576 | ||
|
|
a0010aac31 | ||
|
|
c4ea1a56bc | ||
|
|
212ca01506 | ||
|
|
ce073a2856 | ||
|
|
ae23f146d1 | ||
|
|
096220ece9 | ||
|
|
83bb07e01d | ||
|
|
89784413dd | ||
|
|
17464aa034 | ||
|
|
b2b5629a01 | ||
|
|
33693734fc | ||
|
|
be26fc540c | ||
|
|
3f22503ad2 | ||
|
|
61f11aa4fc | ||
|
|
48c5c39c5d | ||
|
|
8e9a77b3e3 | ||
|
|
b529c28b43 | ||
|
|
5dd1472d6b | ||
|
|
906a4a845e | ||
|
|
48c3763e95 | ||
|
|
e1ae502725 | ||
|
|
bb1e908b54 | ||
|
|
6a8367beb9 | ||
|
|
9273da2dc6 | ||
|
|
a4bc26c810 | ||
|
|
3db3740cf2 | ||
|
|
546161ab1a | ||
|
|
4dcd3e31d8 | ||
|
|
1e26b96b12 | ||
|
|
31e17f025b | ||
|
|
8c5894dd6a | ||
|
|
04c776cbeb | ||
|
|
ce5120431b | ||
|
|
7a271a34c6 | ||
|
|
2e3475e06a | ||
|
|
4edd100ff9 | ||
|
|
b3c3b69a36 | ||
|
|
670a62208a | ||
|
|
69ec460b60 | ||
|
|
395d3cb545 | ||
|
|
c548eac5ef | ||
|
|
145ca618ae | ||
|
|
e4417229aa | ||
|
|
c7b29d35ae | ||
|
|
a9dad423f6 | ||
|
|
cdc9ed678f | ||
|
|
870d373ced | ||
|
|
ab9a3a57ad | ||
|
|
a502019e20 | ||
|
|
25b8a909b1 | ||
|
|
2356988bdf | ||
|
|
eb1db50f85 | ||
|
|
8f1f04e5f3 | ||
|
|
f4ca208474 | ||
|
|
6aae9d6e20 | ||
|
|
f8b9a86e95 | ||
|
|
47bce4eb23 | ||
|
|
64ee23a088 | ||
|
|
4b895941b3 | ||
|
|
d7bf6ec69f | ||
|
|
48c9864184 | ||
|
|
64a9e8cb83 | ||
|
|
f401def044 |
No files matched your search
@@ -1,8 +1,6 @@
|
||||
*.autosave
|
||||
*.db
|
||||
*.diff
|
||||
*.o
|
||||
*.patch
|
||||
*.psp
|
||||
*.pyc
|
||||
*.pyo
|
||||
@@ -11,14 +9,18 @@
|
||||
.DS_Store
|
||||
.idea
|
||||
.vscode
|
||||
/*.diff
|
||||
/*.patch
|
||||
/dist
|
||||
/debian-build
|
||||
/docker-build
|
||||
/mac-build
|
||||
/pip-build
|
||||
/redhat-build
|
||||
/src-build
|
||||
/win-build
|
||||
_build
|
||||
build-*
|
||||
/build-*
|
||||
pgadmin4.log
|
||||
pkg/win32/installer.iss
|
||||
pkg/mac/codesign.conf
|
||||
@@ -36,10 +38,17 @@ runtime/pgAdmin4_resource.rc
|
||||
runtime/release/
|
||||
runtime/ui_BrowserWindow.h
|
||||
web/config_local.py
|
||||
web/pgadmin/misc/themes/pgadmin.themes.json
|
||||
web/geckodriver.log
|
||||
web/regression/test_config.json
|
||||
web/regression/.coveragerc
|
||||
node_modules/
|
||||
web/pgAdmin/static/js/generated
|
||||
web/pgadmin/static/js/generated
|
||||
web/yarn-error.log
|
||||
/web/cacert.pem
|
||||
auditjs.html
|
||||
auditpy.txt
|
||||
/venv/
|
||||
.scannerwork/
|
||||
web/coverage/
|
||||
@@ -1,5 +1,5 @@
|
||||
[pycodestyle]
|
||||
ignore = E402
|
||||
ignore = E402,W504,W605
|
||||
max-line-length = 79
|
||||
statistics = True
|
||||
show-source = False
|
||||
@@ -0,0 +1,200 @@
|
||||
########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2018, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
#########################################################################
|
||||
|
||||
#########################################################################
|
||||
# Create a Node container which will be used to build the JS components
|
||||
# and clean up the web/ source code
|
||||
#########################################################################
|
||||
|
||||
FROM node:12-alpine3.11 AS app-builder
|
||||
|
||||
RUN apk add --no-cache \
|
||||
autoconf \
|
||||
automake \
|
||||
bash \
|
||||
g++ \
|
||||
libc6-compat \
|
||||
libjpeg-turbo-dev \
|
||||
libpng-dev \
|
||||
make \
|
||||
nasm \
|
||||
git \
|
||||
zlib-dev
|
||||
|
||||
# Create the /pgadmin4 directory and copy the source into it. Explicitly
|
||||
# remove the node_modules directory as we'll recreate a clean version, as well
|
||||
# as various other files we don't want
|
||||
COPY web /pgadmin4/web
|
||||
RUN rm -rf /pgadmin4/web/*.log \
|
||||
/pgadmin4/web/config_*.py \
|
||||
/pgadmin4/web/node_modules \
|
||||
/pgadmin4/web/regression \
|
||||
`find /pgadmin4/web -type d -name tests` \
|
||||
`find /pgadmin4/web -type f -name .DS_Store`
|
||||
|
||||
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 && \
|
||||
yarn run bundle && \
|
||||
rm -rf node_modules \
|
||||
yarn.lock \
|
||||
package.json \
|
||||
.[^.]* \
|
||||
babel.cfg \
|
||||
webpack.* \
|
||||
karma.conf.js \
|
||||
./pgadmin/static/js/generated/.cache
|
||||
|
||||
#########################################################################
|
||||
# Now, create a documentation build container for the Sphinx docs
|
||||
#########################################################################
|
||||
|
||||
FROM python:3.8-alpine3.11 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
|
||||
|
||||
# Copy the docs from the local tree. Explicitly remove any existing builds that
|
||||
# may be present
|
||||
COPY docs /pgadmin4/docs
|
||||
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
|
||||
|
||||
#########################################################################
|
||||
# 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 alpine:3.11 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/
|
||||
COPY --from=pg10-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-10/
|
||||
|
||||
COPY --from=pg11-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-11/
|
||||
COPY --from=pg11-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-11/
|
||||
COPY --from=pg11-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-11/
|
||||
COPY --from=pg11-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-11/
|
||||
|
||||
COPY --from=pg12-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-12/
|
||||
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/
|
||||
|
||||
#########################################################################
|
||||
# Assemble everything into the final container.
|
||||
#########################################################################
|
||||
|
||||
FROM python:3.8-alpine3.11
|
||||
|
||||
COPY --from=tool-builder /usr/local/pgsql /usr/local/
|
||||
|
||||
WORKDIR /pgadmin4
|
||||
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
|
||||
|
||||
# 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 \
|
||||
postfix \
|
||||
postgresql-client \
|
||||
postgresql-libs \
|
||||
shadow \
|
||||
sudo \
|
||||
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 && \
|
||||
mkdir -p /var/lib/pgadmin && \
|
||||
chown pgadmin:pgadmin /var/lib/pgadmin && \
|
||||
mkdir -p /var/log/pgadmin && \
|
||||
chown pgadmin:pgadmin /var/log/pgadmin && \
|
||||
touch /pgadmin4/config_distro.py && \
|
||||
chown pgadmin:pgadmin /pgadmin4/config_distro.py && \
|
||||
setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/python3.8
|
||||
USER pgadmin
|
||||
|
||||
# Finish up
|
||||
VOLUME /var/lib/pgadmin
|
||||
EXPOSE 80 443
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
@@ -1,6 +1,6 @@
|
||||
pgAdmin 4
|
||||
|
||||
Copyright (C) 2013 - 2018, The pgAdmin Development Team
|
||||
Copyright (C) 2013 - 2020, 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
|
||||
|
||||
@@ -2,23 +2,26 @@
|
||||
SETLOCAL
|
||||
|
||||
SET WD=%CD%
|
||||
SET "PGBUILDPATH=%WD%\win-build"
|
||||
SET "BUILDROOT=%WD%\win-build"
|
||||
SET "DISTROOT=%WD%\dist"
|
||||
|
||||
SET CMDOPTION=""
|
||||
IF "%1" == "clean" SET CMDOPTION="VALID"
|
||||
IF "%1" == "x86" SET CMDOPTION="VALID"
|
||||
SET CMDOPTIONS=""
|
||||
IF "%1" == "clean" SET CMDOPTIONS="VALID"
|
||||
IF "%1" == "" SET CMDOPTIONS="VALID"
|
||||
|
||||
IF NOT %CMDOPTION%=="VALID" (
|
||||
IF NOT %CMDOPTIONS%=="VALID" (
|
||||
GOTO USAGE
|
||||
)
|
||||
|
||||
SET ARCHITECTURE=%1
|
||||
|
||||
IF "%ARCHITECTURE%"=="clean" (
|
||||
IF "%1" == "clean" (
|
||||
CALL :CLEAN
|
||||
EXIT /B %ERRORLEVEL%
|
||||
)
|
||||
|
||||
set "ARCHITECTURE=x64"
|
||||
if "%Platform%" == "X86" (
|
||||
set "ARCHITECTURE=x86"
|
||||
)
|
||||
|
||||
REM Main build sequence
|
||||
CALL :SET_ENVIRONMENT
|
||||
@@ -37,7 +40,7 @@ REM Main build sequence Ends
|
||||
|
||||
:CLEAN
|
||||
ECHO Removing build directory...
|
||||
IF EXIST "%PGBUILDPATH%" RD "%PGBUILDPATH%" /S /Q > nul || EXIT /B 1
|
||||
IF EXIST "%BUILDROOT%" RD "%BUILDROOT%" /S /Q > nul || EXIT /B 1
|
||||
|
||||
ECHO Removing temp build directory...
|
||||
IF EXIST "%WD%\pkg\win32\Output" rd "%WD%\pkg\win32\Output" /S /Q > nul || EXIT /B 1
|
||||
@@ -50,40 +53,32 @@ REM Main build sequence Ends
|
||||
|
||||
:SET_ENVIRONMENT
|
||||
ECHO Configuring the environment...
|
||||
IF "%PYTHON_HOME%" == "" SET "PYTHON_HOME=C:\Python27"
|
||||
IF "%PYTHON_DLL%" == "" SET "PYTHON_DLL=C:\Windows\SysWOW64\python27.dll"
|
||||
IF "%QTDIR%" == "" SET "QTDIR=C:\Qt\5.9.1\mingw53_32"
|
||||
IF "%MAKE%" == "" SET "MAKE=mingw32-make.exe"
|
||||
IF "%PGDIR%" == "" SET "PGDIR=C:\Program Files (x86)\PostgreSQL\10"
|
||||
IF "%INNOTOOL%" == "" SET "INNOTOOL=C:\Program Files (x86)\Inno Setup 5"
|
||||
IF "%VCREDIST%" == "" SET "VCREDIST=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist\1033\vcredist_x86.exe"
|
||||
IF "%SIGNTOOL%" == "" SET "SIGNTOOL=C:\Program Files\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe"
|
||||
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_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 VCREDISTNAME (the filename)
|
||||
for /f "delims=" %%i in ("%VCREDIST%") do set "VCREDISTNAME=%%~nxi"
|
||||
REM Set REDIST_NAME (the filename)
|
||||
set "VCREDIST_FILE=vcredist_%ARCHITECTURE%.exe"
|
||||
|
||||
REM Set additional variables we need
|
||||
SET "QMAKE=%QTDIR%\bin\qmake.exe"
|
||||
FOR /F "tokens=4,5 delims=. " %%a IN ('%QMAKE% -v ^| findstr /B /C:"Using Qt version "') DO SET QT_VERSION=%%a.%%b
|
||||
|
||||
SET "VIRTUALENV=venv"
|
||||
SET "TARGET_DIR=%WD%\dist"
|
||||
|
||||
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_RELEASE =" %WD%\web\config.py') DO SET APP_MAJOR=%%a
|
||||
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_REVISION =" %WD%\web\config.py') DO SET APP_MINOR=%%a
|
||||
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_SUFFIX =" %WD%\web\config.py') DO SET APP_VERSION_SUFFIX=%%a
|
||||
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_RELEASE =" %WD%\web\config.py') DO SET APP_MAJOR=%%a
|
||||
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_REVISION =" %WD%\web\config.py') DO SET APP_MINOR=%%a
|
||||
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_SUFFIX =" %WD%\web\config.py') DO SET APP_VERSION_SUFFIX=%%a
|
||||
REM remove single quote from the string
|
||||
SET APP_VERSION_SUFFIX=%APP_VERSION_SUFFIX:'=%
|
||||
SET APP_NAME=""
|
||||
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 ('%PYTHON_HOME%/python.exe -c "print('%APP_NAME%'.lower().replace(' ', ''))"') DO SET APP_SHORTNAME=%%G
|
||||
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
|
||||
|
||||
REM get Python version for the runtime build ex. 2.7.1 will be 27
|
||||
FOR /f "tokens=1 DELims=." %%G IN ('%PYTHON_HOME%/python.exe -c "import sys; print(sys.version.split(' ')[0])"') DO SET PYTHON_MAJOR=%%G
|
||||
FOR /f "tokens=2 DELims=." %%G IN ('%PYTHON_HOME%/python.exe -c "import sys; print(sys.version.split(' ')[0])"') DO SET PYTHON_MINOR=%%G
|
||||
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%"
|
||||
|
||||
EXIT /B 0
|
||||
@@ -91,32 +86,24 @@ REM Main build sequence Ends
|
||||
|
||||
:VALIDATE_ENVIRONMENT
|
||||
ECHO ****************************************************************
|
||||
ECHO S U M M A R Y
|
||||
ECHO * Build summary
|
||||
ECHO ****************************************************************
|
||||
ECHO Build path: %PGBUILDPATH%
|
||||
ECHO Output directory: %TARGET_DIR%
|
||||
ECHO Build path: %BUILDROOT%
|
||||
ECHO Output directory: %DISTROOT%
|
||||
ECHO Installer name: %INSTALLERNAME%
|
||||
ECHO.
|
||||
ECHO Python home: %PYTHON_HOME%
|
||||
ECHO Python DLL: %PYTHON_DLL%
|
||||
ECHO Python version: %PYTHON_VERSION%
|
||||
ECHO Python major version: %PYTHON_MAJOR%
|
||||
ECHO Python minor version: %PYTHON_MINOR%
|
||||
ECHO Python directory: %PGADMIN_PYTHON_DIR%
|
||||
ECHO Python DLL: %PGADMIN_PYTHON_DIR%\Python%PYTHON_VERSION%.dll
|
||||
ECHO Python version: %PYTHON_MAJOR%.%PYTHON_MINOR%
|
||||
ECHO.
|
||||
ECHO Qt home: %QTDIR%
|
||||
ECHO qmake executable: %QMAKE%
|
||||
ECHO Qt version: %QT_VERSION%
|
||||
ECHO Qt directory: %PGADMIN_QT_DIR%
|
||||
ECHO PostgreSQL directory: %PGADMIN_POSTGRES_DIR%
|
||||
ECHO.
|
||||
ECHO PostgreSQL home: %PGDIR%
|
||||
ECHO VC++ redist directory: %PGADMIN_VCREDIST_DIR%
|
||||
ECHO VC++ redist file: %VCREDIST_FILE%
|
||||
ECHO InnoTool directory: %PGADMIN_INNOTOOL_DIR%
|
||||
ECHO signtool directory: %PGADMIN_SIGNTOOL_DIR%
|
||||
ECHO.
|
||||
ECHO VC++ redistributable: %VCREDIST%
|
||||
ECHO VC++ redistributable file: %VCREDISTNAME%
|
||||
ECHO.
|
||||
ECHO innotool executable: %INNOTOOL%
|
||||
ECHO signtool executable: %SIGNTOOL%
|
||||
ECHO.
|
||||
ECHO App major version: %APP_MAJOR%
|
||||
ECHO App minor version: %APP_MINOR%
|
||||
ECHO App version: %APP_VERSION%
|
||||
ECHO App version suffix: %APP_VERSION_SUFFIX%
|
||||
ECHO App short name: %APP_SHORTNAME%
|
||||
@@ -124,88 +111,87 @@ REM Main build sequence Ends
|
||||
ECHO ****************************************************************
|
||||
|
||||
ECHO Checking the environment...
|
||||
IF NOT EXIST "%INNOTOOL%" (
|
||||
ECHO !INNOTOOL! does not exist
|
||||
ECHO Please install Innotool and set the INNOTOOL environment variable.
|
||||
IF NOT EXIST "%PGADMIN_INNOTOOL_DIR%" (
|
||||
ECHO !PGADMIN_INNOTOOL_DIR! does not exist
|
||||
ECHO Please install InnoTool and set the PGADMIN_INNOTOOL_DIR environment variable.
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
IF NOT EXIST "%VCREDIST%" (
|
||||
ECHO !VCREDIST! does not exist
|
||||
ECHO Please install Microsoft Visual studio and set the VCREDIST environment variable.
|
||||
IF NOT EXIST "%PGADMIN_VCREDIST_DIR%" (
|
||||
ECHO !PGADMIN_VCREDIST_DIR! does not exist
|
||||
ECHO Please install Microsoft Visual studio and set the PGADMIN_VCREDIST_DIR environment variable.
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
IF NOT EXIST "%QTDIR%" (
|
||||
ECHO !QTDIR! does not exist.
|
||||
ECHO Please install Qt and set the QTDIR environment variable.
|
||||
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 "%QMAKE%" (
|
||||
IF NOT EXIST "%PGADMIN_QT_DIR%\bin\qmake.exe" (
|
||||
ECHO !QMAKE! does not exist.
|
||||
ECHO Please install Qt and set the QTDIR environment variable.
|
||||
ECHO Please install Qt and set the PGADMIN_QT_DIR environment variable.
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
IF NOT EXIST "%PYTHON_HOME%" (
|
||||
ECHO !PYTHON_HOME! does not exist.
|
||||
ECHO Please install Python and set the PYTHON_HOME environment variable.
|
||||
IF NOT EXIST "%PGADMIN_PYTHON_DIR%" (
|
||||
ECHO !PGADMIN_PYTHON_DIR! does not exist.
|
||||
ECHO Please install Python and set the PGADMIN_PYTHON_DIR environment variable.
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
IF NOT EXIST "%PYTHON_DLL%" (
|
||||
ECHO !PYTHON_DLL! does not exist.
|
||||
ECHO Please install Python and set the PYTHON_DLL environment variable.
|
||||
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 "%PGDIR%" (
|
||||
ECHO !PGDIR! does not exist.
|
||||
ECHO Please install PostgreSQL and set the PGDIR environment variable.
|
||||
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.
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
IF NOT EXIST "%PYTHON_HOME%\Scripts\virtualenv.exe" (
|
||||
ECHO !PYTHON_HOME!\Scripts\virtualenv.exe does not exist.
|
||||
IF NOT EXIST "%PGADMIN_PYTHON_DIR%\Scripts\virtualenv.exe" (
|
||||
ECHO !PGADMIN_PYTHON_DIR!\Scripts\virtualenv.exe does not exist.
|
||||
ECHO Please install the virtualenv package in Python.
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
SET "PATH=%PGDIR%\bin;%PATH%"
|
||||
SET "PATH=%PGADMIN_POSTGRES_DIR%\bin;%PATH%"
|
||||
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:CREATE_VIRTUAL_ENV
|
||||
ECHO Creating virtual environment...
|
||||
IF NOT EXIST "%PGBUILDPATH%" MKDIR "%PGBUILDPATH%"
|
||||
IF NOT EXIST "%BUILDROOT%" MKDIR "%BUILDROOT%"
|
||||
|
||||
CD "%PGBUILDPATH%"
|
||||
"%PYTHON_HOME%\Scripts\virtualenv.exe" "%VIRTUALENV%"
|
||||
CD "%BUILDROOT%"
|
||||
|
||||
XCOPY /S /I /E /H /Y "%PYTHON_HOME%\DLLs" "%PGBUILDPATH%\%VIRTUALENV%\DLLs" > nul || EXIT /B 1
|
||||
XCOPY /S /I /E /H /Y "%PYTHON_HOME%\Lib" "%PGBUILDPATH%\%VIRTUALENV%\Lib" > nul || EXIT /B 1
|
||||
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
|
||||
|
||||
ECHO Activating virtual environment - %PGBUILDPATH%\%VIRTUALENV%...
|
||||
CALL "%PGBUILDPATH%\%VIRTUALENV%\Scripts\activate" || EXIT /B 1
|
||||
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
|
||||
|
||||
ECHO Activating virtual environment - %BUILDROOT%\venv...
|
||||
CALL "%BUILDROOT%\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 we're using VC++, and this is Python 3.6+, we need to remove the hack
|
||||
REM above or it will break qmake. Sigh.
|
||||
IF "%MAKE%" == "nmake" (
|
||||
IF %PYTHON_VERSION% GEQ 36 SET CL=
|
||||
)
|
||||
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=
|
||||
|
||||
CD %WD%
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:CREATE_RUNTIME_ENV
|
||||
MKDIR "%PGBUILDPATH%\runtime"
|
||||
MKDIR "%BUILDROOT%\runtime"
|
||||
|
||||
CD "%WD%\web"
|
||||
|
||||
@@ -219,33 +205,37 @@ REM Main build sequence Ends
|
||||
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" "%PGBUILDPATH%\web" > nul || EXIT /B 1
|
||||
XCOPY /S /I /E /H /Y "%WD%\web" "%BUILDROOT%\web" > nul || EXIT /B 1
|
||||
|
||||
ECHO Cleaning up unnecessary .pyc and .pyo files...
|
||||
FOR /R "%PGBUILDPATH%\web" %%f in (*.pyc *.pyo) do DEL /q "%%f" 1> nul 2>&1
|
||||
FOR /R "%BUILDROOT%\web" %%f in (*.pyc *.pyo) do DEL /q "%%f" 1> nul 2>&1
|
||||
ECHO Removing tests, Python caches and node modules...
|
||||
FOR /R "%PGBUILDPATH%\web" %%f in (tests feature_tests __pycache__ node_modules) do RD /Q /S "%%f" 1> nul 2>&1
|
||||
FOR /R "%BUILDROOT%\web" %%f in (tests feature_tests __pycache__ node_modules) do RD /Q /S "%%f" 1> nul 2>&1
|
||||
ECHO Removing the test framework...
|
||||
RD /Q /S "%PGBUILDPATH%\web\regression" 1> nul 2>&1
|
||||
RD /Q /S "%BUILDROOT%\web\regression" 1> nul 2>&1
|
||||
ECHO Removing tools...
|
||||
RD /Q /S "%PGBUILDPATH%\web\tools" 1> nul 2>&1
|
||||
RD /Q /S "%BUILDROOT%\web\tools" 1> nul 2>&1
|
||||
ECHO Removing any existing configurations...
|
||||
DEL /q "%PGBUILDPATH%\web\pgadmin4.db" 1> nul 2>&1
|
||||
DEL /q "%PGBUILDPATH%\web\config_local.py" 1> nul 2>&1
|
||||
|
||||
DEL /q "%BUILDROOT%\web\pgadmin4.db" 1> nul 2>&1
|
||||
DEL /q "%BUILDROOT%\web\config_local.py" 1> nul 2>&1
|
||||
|
||||
ECHO Staging license files...
|
||||
COPY "%WD%\LICENSE" "%BUILDROOT%\" > nul || EXIT /B 1
|
||||
COPY "%WD%\DEPENDENCIES" "%BUILDROOT%\" > nul || EXIT /B 1
|
||||
|
||||
ECHO Creating config_distro.py
|
||||
ECHO SERVER_MODE = False > "%PGBUILDPATH%\web\config_distro.py"
|
||||
ECHO HELP_PATH = '../../../docs/en_US/html/' >> "%PGBUILDPATH%\web\config_distro.py"
|
||||
ECHO DEFAULT_BINARY_PATHS = { >> "%PGBUILDPATH%\web\config_distro.py"
|
||||
ECHO 'pg': '$DIR/../runtime', >> "%PGBUILDPATH%\web\config_distro.py"
|
||||
ECHO 'ppas': '' >> "%PGBUILDPATH%\web\config_distro.py"
|
||||
ECHO } >> "%PGBUILDPATH%\web\config_distro.py"
|
||||
ECHO SERVER_MODE = False > "%BUILDROOT%\web\config_distro.py"
|
||||
ECHO HELP_PATH = '../../../docs/en_US/html/' >> "%BUILDROOT%\web\config_distro.py"
|
||||
ECHO DEFAULT_BINARY_PATHS = { >> "%BUILDROOT%\web\config_distro.py"
|
||||
ECHO 'pg': '$DIR/../runtime', >> "%BUILDROOT%\web\config_distro.py"
|
||||
ECHO 'ppas': '' >> "%BUILDROOT%\web\config_distro.py"
|
||||
ECHO } >> "%BUILDROOT%\web\config_distro.py"
|
||||
|
||||
ECHO Building docs...
|
||||
MKDIR "%PGBUILDPATH%\docs\en_US\html"
|
||||
MKDIR "%BUILDROOT%\docs\en_US\html"
|
||||
CD "%WD%\docs\en_US"
|
||||
CALL "%PGBUILDPATH%\%VIRTUALENV%\Scripts\python.exe" build_code_snippet.py || EXIT /B 1
|
||||
CALL "%PGBUILDPATH%\%VIRTUALENV%\Scripts\sphinx-build.exe" "%WD%\docs\en_US" "%PGBUILDPATH%\docs\en_US\html" || EXIT /B 1
|
||||
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
|
||||
|
||||
ECHO Removing Sphinx
|
||||
CALL pip uninstall -y sphinx Pygments alabaster colorama docutils imagesize requests snowballstemmer
|
||||
@@ -254,46 +244,50 @@ REM Main build sequence Ends
|
||||
CD "%WD%\runtime"
|
||||
|
||||
ECHO Running qmake...
|
||||
CALL "%QMAKE%" || EXIT /B 1
|
||||
CALL set "PGADMIN_PYTHON_DIR=%PGADMIN_PYTHON_DIR%" && "%PGADMIN_QT_DIR%\bin\qmake.exe" || EXIT /B 1
|
||||
|
||||
ECHO Cleaning the build directory...
|
||||
CALL %MAKE% clean || EXIT /B 1
|
||||
CALL nmake clean || EXIT /B 1
|
||||
|
||||
ECHO Running make...
|
||||
CALL %MAKE% || EXIT /B 1
|
||||
CALL nmake || EXIT /B 1
|
||||
|
||||
ECHO Staging pgAdmin4.exe...
|
||||
COPY "%WD%\runtime\release\pgAdmin4.exe" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%WD%\runtime\release\pgAdmin4.exe" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
|
||||
ECHO Staging Qt components...
|
||||
COPY "%QTDIR%\bin\Qt5Core.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%QTDIR%\bin\Qt5Gui.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%QTDIR%\bin\Qt5Widgets.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%QTDIR%\bin\Qt5Network.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%QTDIR%\bin\libgcc_s_dw2-1.dll" COPY "%QTDIR%\bin\libgcc_s_dw2-1.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%QTDIR%\bin\libstdc++-6.dll" COPY "%QTDIR%\bin\libstdc++-6.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%QTDIR%\bin\libwinpthread-1.dll" COPY "%QTDIR%\bin\libwinpthread-1.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
MKDIR "%PGBUILDPATH%\runtime\platforms" > nul || EXIT /B 1
|
||||
COPY "%QTDIR%\plugins\platforms\qwindows.dll" "%PGBUILDPATH%\runtime\platforms" > nul || EXIT /B 1
|
||||
ECHO [Paths] > "%PGBUILDPATH%\runtime\qt.conf"
|
||||
ECHO Plugins=plugins >> "%PGBUILDPATH%\runtime\qt.conf"
|
||||
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"
|
||||
|
||||
ECHO Staging PostgreSQL components...
|
||||
COPY "%PGDIR%\bin\libpq.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGDIR%\bin\ssleay32.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGDIR%\bin\libeay32.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%PGDIR%\bin\libintl-*.dll" COPY "%PGDIR%\bin\libintl-*.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%PGDIR%\bin\libiconv-*.dll" COPY "%PGDIR%\bin\libiconv-*.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%PGDIR%\bin\zlib.dll" COPY "%PGDIR%\bin\zlib.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%PGDIR%\bin\zlib1.dll" COPY "%PGDIR%\bin\zlib1.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGDIR%\bin\pg_dump.exe" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGDIR%\bin\pg_dumpall.exe" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1L%
|
||||
COPY "%PGDIR%\bin\pg_restore.exe" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGDIR%\bin\psql.exe" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
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
|
||||
)
|
||||
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
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\pg_dump.exe" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\pg_dumpall.exe" "%BUILDROOT%\runtime" > nul || EXIT /B 1L%
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\pg_restore.exe" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\psql.exe" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
|
||||
ECHO Staging VC++ runtime...
|
||||
MKDIR "%PGBUILDPATH%\installer" || EXIT /B 1
|
||||
COPY "%VCREDIST%" "%PGBUILDPATH%\installer" > nul || EXIT /B 1
|
||||
MKDIR "%BUILDROOT%\installer" || EXIT /B 1
|
||||
COPY "%PGADMIN_VCREDIST_DIR%\%VCREDIST_FILE%" "%BUILDROOT%\installer" > nul || EXIT /B 1
|
||||
|
||||
CD %WD%
|
||||
EXIT /B 0
|
||||
@@ -301,51 +295,51 @@ REM Main build sequence Ends
|
||||
|
||||
:CREATE_PYTHON_ENV
|
||||
ECHO Staging Python...
|
||||
COPY %PYTHON_DLL% "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY %PYTHON_HOME%\python.exe "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY %PYTHON_HOME%\pythonw.exe "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
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 "%PGBUILDPATH%\%VIRTUALENV%" %%f in (*.pyc *.pyo) do DEL /q "%%f" 1> nul 2>&1
|
||||
FOR /R "%BUILDROOT%\venv" %%f in (*.pyc *.pyo) do DEL /q "%%f" 1> nul 2>&1
|
||||
ECHO Removing tests...
|
||||
FOR /R "%PGBUILDPATH%\%VIRTUALENV%\Lib" %%f in (test tests) do RD /Q /S "%%f" 1> nul 2>&1
|
||||
FOR /R "%BUILDROOT%\venv\Lib" %%f in (test tests) do RD /Q /S "%%f" 1> nul 2>&1
|
||||
ECHO Removing TCL...
|
||||
RD /Q /S "%PGBUILDPATH%\%VIRTUALENV%\tcl" 1> nul 2>&1
|
||||
RD /Q /S "%BUILDROOT%\venv\tcl" 1> nul 2>&1
|
||||
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:CREATE_INSTALLER
|
||||
ECHO Preparing for creation of windows installer...
|
||||
IF NOT EXIST "%TARGET_DIR%" MKDIR "%TARGET_DIR%"
|
||||
IF NOT EXIST "%DISTROOT%" MKDIR "%DISTROOT%"
|
||||
|
||||
ECHO Copying icon file...
|
||||
COPY "%WD%\pkg\win32\Resources\pgAdmin4.ico" "%PGBUILDPATH%" > nul || EXIT /B 1
|
||||
COPY "%WD%\pkg\win32\Resources\pgAdmin4.ico" "%BUILDROOT%" > nul || EXIT /B 1
|
||||
|
||||
CD "%WD%\pkg\win32"
|
||||
|
||||
ECHO Processing installer configuration script...
|
||||
CALL "%PYTHON_HOME%\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 "%PYTHON_HOME%\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 "%PYTHON_HOME%\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%"""
|
||||
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%"=="amd64" (
|
||||
IF "%ARCHITECTURE%" == "x64" (
|
||||
set ARCMODE="x64"
|
||||
)
|
||||
CALL "%PYTHON_HOME%\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 "%PYTHON_HOME%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage4" "-o" "%WD%\pkg\win32\installer.iss" "-s" MYAPP_VCDIST -r """%VCREDISTNAME%"""
|
||||
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%"""
|
||||
|
||||
ECHO Cleaning up...
|
||||
DEL /s "%WD%\pkg\win32\installer.iss.in_stage*" > nul
|
||||
|
||||
ECHO Creating windows installer using INNO tool...
|
||||
CALL "%INNOTOOL%\ISCC.exe" /q "%WD%\pkg\win32\installer.iss" || EXIT /B 1
|
||||
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" "%TARGET_DIR%\%INSTALLERNAME%" > nul || EXIT /B 1
|
||||
MOVE "%WD%\pkg\win32\Output\Setup.exe" "%DISTROOT%\%INSTALLERNAME%" > nul || EXIT /B 1
|
||||
|
||||
ECHO Location - %TARGET_DIR%\%INSTALLERNAME%
|
||||
ECHO Location - %DISTROOT%\%INSTALLERNAME%
|
||||
ECHO Installer generated successfully.
|
||||
|
||||
CD %WD%
|
||||
@@ -354,7 +348,7 @@ REM Main build sequence Ends
|
||||
|
||||
:SIGN_INSTALLER
|
||||
ECHO Attempting to sign the installer...
|
||||
CALL "%SIGNTOOL%" sign /t http://timestamp.verisign.com/scripts/timstamp.dll "%TARGET_DIR%\%INSTALLERNAME%"
|
||||
CALL "%PGADMIN_SIGNTOOL_DIR%\signtool.exe" sign /t http://timestamp.verisign.com/scripts/timstamp.dll "%DISTROOT%\%INSTALLERNAME%"
|
||||
IF %ERRORLEVEL% NEQ 0 (
|
||||
ECHO.
|
||||
ECHO ************************************************************
|
||||
@@ -368,15 +362,15 @@ REM Main build sequence Ends
|
||||
|
||||
:CLEANUP_ENV
|
||||
ECHO Cleaning the build environment...
|
||||
RD "%PGBUILDPATH%\%VIRTUALENV%\Include" /S /Q 1> nul 2>&1
|
||||
DEL /s "%PGBUILDPATH%\%VIRTUALENV%\pip-selfcheck.json" 1> nul 2>&1
|
||||
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 <x86 | clean>"
|
||||
ECHO Usage: "Make.bat [clean]"
|
||||
ECHO.
|
||||
|
||||
EXIT /B 1
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
APP_NAME := $(shell grep ^APP_NAME web/config.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]' | tr -d "'" | awk '{print tolower($$0)}')
|
||||
APP_RELEASE := $(shell grep ^APP_RELEASE web/config.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
|
||||
APP_REVISION := $(shell grep ^APP_REVISION web/config.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
|
||||
|
||||
#########################################################################
|
||||
# High-level targets
|
||||
#########################################################################
|
||||
@@ -20,7 +24,16 @@ appbundle: docs
|
||||
./pkg/mac/build.sh
|
||||
|
||||
install-node:
|
||||
cd web && yarn install
|
||||
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
|
||||
|
||||
bundle:
|
||||
cd web && yarn run bundle
|
||||
@@ -31,21 +44,47 @@ bundle-dev:
|
||||
linter:
|
||||
cd web && yarn run linter
|
||||
|
||||
check: install-node bundle linter
|
||||
cd web && pycodestyle --config=.pycodestyle . && yarn run karma start --single-run && python regression/runtests.py
|
||||
check: install-node bundle linter check-pep8
|
||||
cd web && yarn run karma start --single-run && python regression/runtests.py
|
||||
|
||||
check-audit:
|
||||
cd web && yarn run audit
|
||||
|
||||
check-auditjs:
|
||||
# Commented the below line to avoid vulnerability in decompress package and
|
||||
# audit only dependencies folder. Refer https://www.npmjs.com/advisories/1217.
|
||||
# Pull request is already been send https://github.com/kevva/decompress/pull/73,
|
||||
# once fixed we will uncomment it.
|
||||
# cd web && yarn run auditjs
|
||||
cd web && yarn run auditjs --groups dependencies
|
||||
|
||||
check-auditjs-html:
|
||||
cd web && yarn run auditjs-html
|
||||
|
||||
check-auditpy:
|
||||
cd web && yarn run auditpy
|
||||
|
||||
check-pep8:
|
||||
cd web && pycodestyle --config=.pycodestyle .
|
||||
pycodestyle --config=.pycodestyle docs/
|
||||
pycodestyle --config=.pycodestyle pkg/
|
||||
pycodestyle --config=.pycodestyle web/
|
||||
pycodestyle --config=.pycodestyle tools/
|
||||
|
||||
check-python:
|
||||
cd web && python regression/runtests.py --exclude feature_tests
|
||||
|
||||
check-resql:
|
||||
cd web && python regression/runtests.py --pkg resql --exclude feature_tests
|
||||
|
||||
check-feature: install-node bundle
|
||||
cd web && python regression/runtests.py --pkg feature_tests
|
||||
|
||||
check-js: install-node linter
|
||||
cd web && yarn run karma start --single-run
|
||||
|
||||
check-js-coverage:
|
||||
cd web && yarn run test:karma-coverage
|
||||
|
||||
runtime-debug:
|
||||
cd runtime && qmake CONFIG+=debug && make
|
||||
|
||||
@@ -53,20 +92,21 @@ runtime:
|
||||
cd runtime && qmake CONFIG+=release && make
|
||||
|
||||
# Include all clean sub-targets in clean
|
||||
clean: clean-appbundle clean-docker clean-dist clean-docs clean-node clean-pip clean-src clean-runtime
|
||||
clean: clean-appbundle clean-debian clean-dist clean-docs clean-node clean-pip clean-redhat clean-src clean-runtime
|
||||
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:
|
||||
cd runtime && make clean
|
||||
if [ -f runtime/Makefile ]; then (cd runtime && make clean); fi;
|
||||
rm -rf build-*
|
||||
|
||||
clean-appbundle:
|
||||
rm -rf mac-build/
|
||||
|
||||
clean-docker:
|
||||
rm -rf docker-build/
|
||||
clean-debian:
|
||||
rm -rf debian-build/
|
||||
|
||||
clean-dist:
|
||||
rm -rf dist/
|
||||
@@ -80,11 +120,18 @@ clean-node:
|
||||
clean-pip:
|
||||
rm -rf pip-build/
|
||||
|
||||
clean-redhat:
|
||||
rm -rf redhat-build/
|
||||
|
||||
clean-src:
|
||||
rm -rf src-build/
|
||||
|
||||
debian:
|
||||
./pkg/debian/build.sh
|
||||
|
||||
docker:
|
||||
./pkg/docker/build.sh
|
||||
echo $(APP_NAME)
|
||||
docker build -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
|
||||
@@ -92,6 +139,9 @@ docs:
|
||||
docs-pdf:
|
||||
LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 $(MAKE) -C docs/en_US -f Makefile.sphinx latexpdf
|
||||
|
||||
docs-epub:
|
||||
LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 $(MAKE) -C docs/en_US -f Makefile.sphinx epub
|
||||
|
||||
messages: msg-extract msg-update msg-compile
|
||||
|
||||
msg-compile:
|
||||
@@ -108,5 +158,8 @@ msg-update:
|
||||
pip: docs
|
||||
./pkg/pip/build.sh
|
||||
|
||||
redhat:
|
||||
./pkg/redhat/build.sh
|
||||
|
||||
src:
|
||||
./pkg/src/build.sh
|
||||
@@ -1,4 +1,4 @@
|
||||
pgAdmin 4
|
||||
pgAdmin 4
|
||||
=========
|
||||
|
||||
pgAdmin 4 is a rewrite of the popular pgAdmin3 management tool for the
|
||||
@@ -26,42 +26,46 @@ Building the Runtime
|
||||
|
||||
To build the runtime, the following packages must be installed:
|
||||
|
||||
- QT 4.6 or above
|
||||
- Python 2.7 or 3.4+
|
||||
- QT 5 (Use the VC++ build on Windows, not MinGW).
|
||||
- Python 3.4+
|
||||
|
||||
Assuming both qmake and python-config are in the path:
|
||||
An environment variable named PGADMIN_PYTHON_DIR must be set to the directory
|
||||
in which Python has been installed, for example:
|
||||
|
||||
$ cd $PGADMIN4_SRC/runtime
|
||||
$ qmake
|
||||
Project MESSAGE: Building for QT5+...
|
||||
Project MESSAGE: Building for Linux/Mac...
|
||||
Project MESSAGE: Using /usr/bin/python-config
|
||||
Project MESSAGE: Python2 detected.
|
||||
$ make
|
||||
...
|
||||
- /usr
|
||||
- /usr/local/python-3.8
|
||||
- C:\Python38
|
||||
|
||||
To build the runtime in debug mode, use the option below with qmake
|
||||
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
|
||||
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, and on Mac OS X, an
|
||||
app bundle called pgAdmin4.app will be created.
|
||||
|
||||
To build the runtime on a Windows system, export PYTHON_HOME and PYTHON_VERSION
|
||||
variables in the System environment. Specify the PYTHON_VERSION with the major
|
||||
and minor number. Do not specify micro level version.
|
||||
|
||||
For example, given a Python version of A.B.C; A - Major number, B - Minor
|
||||
number, C - Micro level (Bug fix releases).
|
||||
|
||||
If Python version is 2.7.12 than specify PYTHON_VERSION=27
|
||||
|
||||
e.g. PYTHON_HOME=C:\Python27\
|
||||
PYTHON_VERSION=27
|
||||
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
|
||||
@@ -88,10 +92,10 @@ Configuring the Python Environment
|
||||
----------------------------------
|
||||
|
||||
In order to run the Python code, a suitable runtime environment is required.
|
||||
Python versions - Python 2.7 or 3.4+ 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:
|
||||
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
|
||||
|
||||
@@ -181,16 +185,7 @@ 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,
|
||||
largely due to the lack of a native compiler toolset. Thankfully, Microsoft
|
||||
supply a free compiler specifically for Python 2.7 users. Download and install
|
||||
it from:
|
||||
|
||||
https://www.microsoft.com/en-gb/download/details.aspx?id=44266
|
||||
|
||||
A blog detailing the setup of Virtual Environments on Windows can be found
|
||||
here:
|
||||
|
||||
http://www.tylerbutler.com/2012/05/how-to-install-python-pip-and-virtualenv-on-windows-with-powershell/
|
||||
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.
|
||||
@@ -219,6 +214,23 @@ can be used:
|
||||
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
|
||||
-----------------------
|
||||
|
||||
@@ -235,7 +247,7 @@ 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/python2.7/site-packages
|
||||
/Users/<USERNAME>/.virtualenvs/pgadmin4/lib/python3.8/site-packages
|
||||
|
||||
On Windows, multiple paths are likely to be required, e.g.
|
||||
|
||||
@@ -277,49 +289,9 @@ run:
|
||||
|
||||
(pgadmin4) $ make pip
|
||||
|
||||
On a Mac, build an application bundle in a disk image (DMG file) with:
|
||||
To build the macOS AppBundle, please see pkg/mac/README.
|
||||
|
||||
(pgadmin4) $ make appbundle
|
||||
|
||||
Configure the framework.conf to match the QT and Python versions the app is
|
||||
being built with:
|
||||
|
||||
$ cp $PGADMIN4_SRC/pkg/mac/framework.conf.in $PGADMIN4_SRC/pkg/mac/framework.conf
|
||||
$ vi $PGADMIN4_SRC/pkg/mac/framework.conf
|
||||
|
||||
If you have an Apple code signing certificate, both the app bundle and disk
|
||||
image can be automatically signed by configuring signing:
|
||||
|
||||
$ cp $PGADMIN4_SRC/pkg/mac/codesign.conf.in $PGADMIN4_SRC/pkg/mac/codesign.conf
|
||||
$ vi $PGADMIN4_SRC/pkg/mac/codesign.conf
|
||||
|
||||
Edit the file as appropriate, ensuring the various version numbers are correct
|
||||
and that the appropriate developer ID is specified.
|
||||
|
||||
On Windows, the InnoSetup tool is required to create an installer. Download the
|
||||
Unicode version from:
|
||||
|
||||
http://www.jrsoftware.org/isdl.php
|
||||
|
||||
A number of environment variables may need to be set to enable the build script
|
||||
to function. The defaults will usually work on a typical 64 bit system with
|
||||
Qt 5.5.1, Python 2.7 and Visual Studio 2013. The examples below are for a
|
||||
similar 32 bit system:
|
||||
|
||||
INNOTOOL=C:\Program Files\Inno Setup 5
|
||||
PGDIR=C:\Program Files\PostgreSQL\10
|
||||
PYTHON_DLL=C:\Windows\System32\Python27.dll
|
||||
PYTHON_HOME=C:\Python27
|
||||
PYTHON_VERSION=27
|
||||
QTDIR=C:\Qt\5.9\msvc2013
|
||||
VCDIR=C:\Program Files\Microsoft Visual Studio 12.0\VC
|
||||
|
||||
To build the installer:
|
||||
|
||||
C:\$PGADMIN4_SRC> make x86
|
||||
|
||||
If you have a code signing certificate, this will automatically be used if
|
||||
found in the Windows Certificate Store to sign the installer.
|
||||
To build the Windows installer, please see pkg/win32/README.txt.
|
||||
|
||||
Support
|
||||
-------
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "EXECUTING: Build docs"
|
||||
echo
|
||||
|
||||
cd ${WORKSPACE}
|
||||
|
||||
. ${WORKSPACE}/pgadmin-venv/bin/activate
|
||||
|
||||
SPHINX_VER=""
|
||||
if [ "${PYTHON_VERSION}" = "2.6" -o "${PYTHON_VERSION}" = "3.3" ]; then
|
||||
SPHINX_VER="==1.4.9"
|
||||
fi
|
||||
|
||||
${WORKSPACE}/pgadmin-venv/bin/pip install Sphinx${SPHINX_VER} || { echo 'ERROR: Failed to install Sphinx to build the docs.' ; exit 1; }
|
||||
|
||||
make docs || { echo 'ERROR: Failed to build the documentation.' ; exit 1; }
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "EXECUTING: Build PIP wheel"
|
||||
echo
|
||||
|
||||
cd ${WORKSPACE}
|
||||
|
||||
. ${WORKSPACE}/pgadmin-venv/bin/activate
|
||||
|
||||
SPHINX_VER=""
|
||||
if [ "${PYTHON_VERSION}" = "2.6" -o "${PYTHON_VERSION}" = "3.3" ]; then
|
||||
SPHINX_VER="==1.4.9"
|
||||
fi
|
||||
|
||||
${WORKSPACE}/pgadmin-venv/bin/pip install Sphinx${SPHINX_VER} || { echo 'ERROR: Failed to install Sphinx to build the PIP wheel.' ; exit 1; }
|
||||
|
||||
make pip || { echo 'ERROR: Failed to build the PIP wheel.' ; exit 1; }
|
||||
@@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "EXECUTING: Build runtime - QT4"
|
||||
echo
|
||||
|
||||
if [ ${PYTHON_VERSION:0:1} == "3" ]; then
|
||||
CONFIG=/usr/local/python-${PYTHON_VERSION}/bin/python3-config
|
||||
else
|
||||
CONFIG=/usr/local/python-${PYTHON_VERSION}/bin/python-config
|
||||
fi
|
||||
|
||||
cd ${WORKSPACE}/runtime
|
||||
|
||||
make clean
|
||||
PATH=/usr/local/python-${PYTHON_VERSION}/bin:$PATH PYTHON_CONFIG=${CONFIG} /bin/qmake-qt4 || { echo 'ERROR: Failed to run the QT4 qmake step.' ; exit 1; }
|
||||
make all || { echo 'ERROR: Failed to build the QT4 runtime.' ; exit 1; }
|
||||
@@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "EXECUTING: Build runtime - QT5"
|
||||
echo
|
||||
|
||||
if [ ${PYTHON_VERSION:0:1} == "3" ]; then
|
||||
CONFIG=/usr/local/python-${PYTHON_VERSION}/bin/python3-config
|
||||
else
|
||||
CONFIG=/usr/local/python-${PYTHON_VERSION}/bin/python-config
|
||||
fi
|
||||
|
||||
cd ${WORKSPACE}/runtime
|
||||
|
||||
make clean
|
||||
PATH=/usr/local/python-${PYTHON_VERSION}/bin:$PATH PYTHON_CONFIG=${CONFIG} /bin/qmake-qt5 DEFINES+=PGADMIN4_USE_WEBKIT || { echo 'ERROR: Failed to run the QT5 qmake step.' ; exit 1; }
|
||||
make all || { echo 'ERROR: Failed to build the QT4 runtime.' ; exit 1; }
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "EXECUTING: Build Tarballs"
|
||||
echo
|
||||
|
||||
cd ${WORKSPACE}
|
||||
|
||||
. ${WORKSPACE}/pgadmin-venv/bin/activate
|
||||
|
||||
SPHINX_VER=""
|
||||
if [ "${PYTHON_VERSION}" = "2.6" -o "${PYTHON_VERSION}" = "3.3" ]; then
|
||||
SPHINX_VER="==1.4.9"
|
||||
fi
|
||||
|
||||
${WORKSPACE}/pgadmin-venv/bin/pip install Sphinx${SPHINX_VER} || { echo 'ERROR: Failed to install Sphinx to build the tarballs.' ; exit 1; }
|
||||
cd ${WORKSPACE}/
|
||||
make src || { echo 'ERROR: Failed to build the tarballs.' ; exit 1; }
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
${WORKSPACE}/ci/create_config.sh || { echo 'ERROR: Failed to create the configuration.' ; exit 1; }
|
||||
${WORKSPACE}/ci/run_python_tests.sh || { echo 'ERROR: Error detected when running the Python tests.' ; exit 1; }
|
||||
${WORKSPACE}/ci/run_jasmine_tests.sh || { echo 'ERROR: Error detected when running the Jasmine tests.' ; exit 1; }
|
||||
${WORKSPACE}/ci/build_docs.sh || { echo 'ERROR: Failed to build the documentation.' ; exit 1; }
|
||||
${WORKSPACE}/ci/build_runtime_qt4.sh || { echo 'ERROR: Failed to build the QT4 runtime.' ; exit 1; }
|
||||
${WORKSPACE}/ci/build_runtime_qt5.sh || { echo 'ERROR: Failed to build the QT5 runtime.' ; exit 1; }
|
||||
${WORKSPACE}/ci/update_messages.sh || { echo 'ERROR: Failed to update translation message catalogs.' ; exit 1; }
|
||||
${WORKSPACE}/ci/build_pip_wheel.sh || { echo 'ERROR: Failed to build the PIP wheel.' ; exit 1; }
|
||||
${WORKSPACE}/ci/build_tarballs.sh || { echo 'ERROR: Failed to build the tarballs.' ; exit 1; }
|
||||
@@ -1,15 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "EXECUTING: Create pgAdmin config"
|
||||
echo
|
||||
|
||||
cd ${WORKSPACE}
|
||||
|
||||
cp ${JENKINS_HOME}/pgadmin-configs/config_local.py ${WORKSPACE}/web/config_local.py || { echo 'ERROR: Failed to create config_local.py.' ; exit 1; }
|
||||
echo LOG_FILE = \"${WORKSPACE}/var/pgadmin4.log\" >> ${WORKSPACE}/web/config_local.py || { echo 'ERROR: Failed to create config_local.py.' ; exit 1; }
|
||||
echo SESSION_DB_PATH = \"${WORKSPACE}/var/sessions\" >> ${WORKSPACE}/web/config_local.py || { echo 'ERROR: Failed to create config_local.py.' ; exit 1; }
|
||||
echo STORAGE_DIR = \"${WORKSPACE}/var/storage\" >> ${WORKSPACE}/web/config_local.py || { echo 'ERROR: Failed to create config_local.py.' ; exit 1; }
|
||||
echo SQLITE_PATH = \"${WORKSPACE}/var/pgadmin4.db\" >> ${WORKSPACE}/web/config_local.py || { echo 'ERROR: Failed to create config_local.py.' ; exit 1; }
|
||||
echo TEST_SQLITE_PATH = \"${WORKSPACE}/var/pgadmin4.db\" >> ${WORKSPACE}/web/config_local.py || { echo 'ERROR: Failed to create config_local.py.' ; exit 1; }
|
||||
|
||||
cp ${JENKINS_HOME}/pgadmin-configs/test_config.json ${WORKSPACE}/web/regression/test_config.json || { echo 'ERROR: Failed to copy the test configuration.' ; exit 1; }
|
||||
@@ -1,49 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "EXECUTING: Feature tests"
|
||||
echo
|
||||
|
||||
echo "Starting virtual frame buffer..."
|
||||
echo
|
||||
|
||||
Xvfb -ac :99 -screen 0 1280x1024x16 &
|
||||
FB_PID=$!
|
||||
export DISPLAY=:99
|
||||
|
||||
echo "Creating Python ${PYTHON_VERSION} virtual environment..."
|
||||
echo
|
||||
|
||||
cd ${WORKSPACE}/
|
||||
|
||||
PYTHON_SUFFIX=""
|
||||
|
||||
if [[ "${PYTHON_VERSION}" == 3* ]]; then
|
||||
PYTHON_SUFFIX="3"
|
||||
fi
|
||||
|
||||
if [ "${PYTHON_VERSION}" == 2.6 -o "${PYTHON_VERSION}" == 3.3 ]; then
|
||||
/usr/bin/virtualenv --no-wheel -p /usr/local/python-${PYTHON_VERSION}/bin/python${PYTHON_SUFFIX} ${WORKSPACE}/pgadmin-venv || { echo 'ERROR: Failed to create the Python virtual environment.' ; exit 1; }
|
||||
. ${WORKSPACE}/pgadmin-venv/bin/activate || { echo 'ERROR: Failed to activate the Python virtual environment.' ; exit 1; }
|
||||
${WORKSPACE}/pgadmin-venv/bin/pip install wheel==0.29.0 || { echo 'ERROR: Failed to install wheel 0.29.0.' ; exit 1; }
|
||||
else
|
||||
/usr/bin/virtualenv -p /usr/local/python-${PYTHON_VERSION}/bin/python${PYTHON_SUFFIX} ${WORKSPACE}/pgadmin-venv || { echo 'ERROR: Failed to create the Python virtual environment.' ; exit 1; }
|
||||
. ${WORKSPACE}/pgadmin-venv/bin/activate || { echo 'ERROR: Failed to activate the Python virtual environment.' ; exit 1; }
|
||||
fi
|
||||
|
||||
${WORKSPACE}/pgadmin-venv/bin/pip install -r requirements.txt || { echo 'ERROR: Failed to install the application requirements.' ; exit 1; }
|
||||
${WORKSPACE}/pgadmin-venv/bin/pip install -r web/regression/requirements.txt || { echo 'ERROR: Failed to install the regression test requirements.' ; exit 1; }
|
||||
|
||||
cd web
|
||||
/usr/bin/yarn install || { echo 'ERROR: Failed to install the required Javascript modules.' ; exit 1; }
|
||||
/usr/bin/yarn run bundle || { echo 'ERROR: Failed to bundle the Javascript code.' ; exit 1; }
|
||||
cd ../
|
||||
|
||||
echo "Running regression tests..."
|
||||
echo
|
||||
|
||||
${WORKSPACE}/pgadmin-venv/bin/python ${WORKSPACE}/web/regression/runtests.py --pkg feature_tests || { echo 'ERROR: Error detected when running the Feature tests.' ; exit 1; }
|
||||
|
||||
echo "Cleaning up..."
|
||||
echo
|
||||
|
||||
kill ${FB_PID}
|
||||
@@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "EXECUTING: Jasmine tests"
|
||||
echo
|
||||
|
||||
cd ${WORKSPACE}/web/
|
||||
|
||||
/usr/bin/yarn install || { echo 'ERROR: Failed to install the required Javascript modules.' ; exit 1; }
|
||||
/usr/bin/yarn run linter || { echo 'ERROR: Failed to lint the Javascript code.' ; exit 1; }
|
||||
./node_modules/.bin/karma start --single-run || { echo 'ERROR: Error detected when running the Jasmine tests.' ; exit 1; }
|
||||
@@ -1,38 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "EXECUTING: Python tests"
|
||||
echo
|
||||
|
||||
echo "Creating Python ${PYTHON_VERSION} virtual environment..."
|
||||
echo
|
||||
|
||||
cd ${WORKSPACE}/
|
||||
|
||||
PYTHON_SUFFIX=""
|
||||
|
||||
if [[ "${PYTHON_VERSION}" == 3* ]]; then
|
||||
PYTHON_SUFFIX="3"
|
||||
fi
|
||||
|
||||
if [ "${PYTHON_VERSION}" == 2.6 -o "${PYTHON_VERSION}" == 3.3 ]; then
|
||||
/usr/bin/virtualenv --no-wheel -p /usr/local/python-${PYTHON_VERSION}/bin/python${PYTHON_SUFFIX} ${WORKSPACE}/pgadmin-venv || { echo 'ERROR: Failed to create the Python virtual environment.' ; exit 1; }
|
||||
. ${WORKSPACE}/pgadmin-venv/bin/activate || { echo 'ERROR: Failed to activate the Python virtual environment.' ; exit 1; }
|
||||
${WORKSPACE}/pgadmin-venv/bin/pip install wheel==0.29.0 || { echo 'ERROR: Failed to install wheel 0.29.0.' ; exit 1; }
|
||||
else
|
||||
/usr/bin/virtualenv -p /usr/local/python-${PYTHON_VERSION}/bin/python${PYTHON_SUFFIX} ${WORKSPACE}/pgadmin-venv || { echo 'ERROR: Failed to create the Python virtual environment.' ; exit 1; }
|
||||
. ${WORKSPACE}/pgadmin-venv/bin/activate || { echo 'ERROR: Failed to activate the Python virtual environment.' ; exit 1; }
|
||||
fi
|
||||
|
||||
${WORKSPACE}/pgadmin-venv/bin/pip install -r requirements.txt || { echo 'ERROR: Failed to install the application requirements.' ; exit 1; }
|
||||
${WORKSPACE}/pgadmin-venv/bin/pip install -r web/regression/requirements.txt || { echo 'ERROR: Failed to install the regression test requirements.' ; exit 1; }
|
||||
|
||||
echo "Running PEP-8 checks..."
|
||||
echo
|
||||
|
||||
make check-pep8 || { echo 'ERROR: Error detected when running the Python PEP-8 checks.' ; exit 1; }
|
||||
|
||||
echo "Running regression tests..."
|
||||
echo
|
||||
|
||||
${WORKSPACE}/pgadmin-venv/bin/python ${WORKSPACE}/web/regression/runtests.py --exclude feature_tests || { echo 'ERROR: Error detected when running the Python tests.' ; exit 1; }
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "EXECUTING: Compile messages"
|
||||
echo
|
||||
|
||||
cd ${WORKSPACE}/web
|
||||
|
||||
. ${WORKSPACE}/pgadmin-venv/bin/activate || { echo 'ERROR: Failed to activate the Python virtual environment.' ; exit 1; }
|
||||
|
||||
pybabel extract -F babel.cfg -o pgadmin/messages.pot pgadmin || { echo 'ERROR: Failed to extract messages from the source code.' ; exit 1; }
|
||||
|
||||
pybabel update -i pgadmin/messages.pot -d pgadmin/translations || { echo 'ERROR: Failed to update message catalogs from the template.' ; exit 1; }
|
||||
|
||||
pybabel compile -d pgadmin/translations || { echo 'ERROR: Failed to compile the message catalogs.' ; exit 1; }
|
||||
@@ -1,18 +1,25 @@
|
||||
.. _add_restore_point_dialog:
|
||||
|
||||
***************************************
|
||||
`Add named restore point Dialog`:index:
|
||||
`Add Named Restore Point Dialog`:index:
|
||||
***************************************
|
||||
|
||||
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 restore point.
|
||||
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
|
||||
restore point.
|
||||
|
||||
.. image:: images/add_restore_point.png
|
||||
:alt: Restore point dialog
|
||||
:align: center
|
||||
|
||||
When the *Restore point name* window launches, use the field *Enter the name of the restore point to add* to provide a descriptive name for the restore point.
|
||||
When the *Restore point name* window launches, use the field *Enter the name of
|
||||
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 <http://www.postgresql.org/docs/9.5/static/recovery-target-settings.html#RECOVERY-TARGET-NAME>`_.
|
||||
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>`_.
|
||||
|
||||
* Click the *OK* button to save the restore point.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
@@ -4,9 +4,9 @@
|
||||
`Backup and Restore`:index:
|
||||
***************************
|
||||
|
||||
A powerful, but user-friendly Backup and Restore tool provides an easy way to use pg_dump, pg_dumpall, and pg_restore to take backups and create copies of databases or database objects for use in a development environment.
|
||||
|
||||
Contents:
|
||||
A powerful, but user-friendly Backup and Restore tool provides an easy way to
|
||||
use pg_dump, pg_dumpall, and pg_restore to take backups and create copies of
|
||||
databases or database objects for use in a development environment.
|
||||
|
||||
.. toctree::
|
||||
|
||||
|
||||
@@ -4,120 +4,215 @@
|
||||
`Backup Dialog`:index:
|
||||
**********************
|
||||
|
||||
Using the *pg_dump* utility, *pgAdmin* provides 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* utility must have read access to all database objects that you want to back up.
|
||||
Using the *pg_dump* utility, *pgAdmin* provides 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*
|
||||
utility must have read access to all database objects that you want to back up.
|
||||
|
||||
You can backup a single table, a schema, or a complete database. Select the name of the backup source in the *pgAdmin* tree control, right click to open the context menu, and select *Backup...* to open the *Backup* dialog. The name of the object selected will appear in the dialog title bar.
|
||||
You can backup a single table, a schema, or a complete database. Select the name
|
||||
of the backup source in the *pgAdmin* tree control, right click to open the
|
||||
context menu, and select *Backup...* to open the *Backup* dialog. The name of
|
||||
the object selected will appear in the dialog title bar.
|
||||
|
||||
.. image:: images/backup_general.png
|
||||
:alt: Backup dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to specify parameters for the backup:
|
||||
|
||||
* Enter the name of the backup file in the *Filename* field. Optionally, select the *Browser* icon (...) to the right to navigate into a directory and select a file that will contain the archive.
|
||||
* Use the drop-down listbox in the *Format* field to select the format that is best suited for your application. Each format has advantages and disadvantages:
|
||||
* Enter the name of the backup file in the *Filename* field. Optionally, select
|
||||
the *Browser* icon (...) to the right to navigate into a directory and select
|
||||
a file that will contain the archive.
|
||||
|
||||
* Select *Custom* to create a custom archive file that you can use with *pg_restore* to create a copy of a database. Custom archive file formats must be restored with *pg_restore*. This format offers the opportunity to select which database objects to restore from the backup file. *Custom* archive format is recommended for medium to large databases as it is compressed by default.
|
||||
* Use the drop-down listbox in the *Format* field to select the format that is
|
||||
best suited for your application. Each format has advantages and
|
||||
disadvantages:
|
||||
|
||||
* Select *Tar* to generate a tar archive file that you can restore with *pg_restore*. The tar format does not support compression.
|
||||
* Select *Custom* to create a custom archive file that you can use with
|
||||
*pg_restore* to create a copy of a database. Custom archive file formats
|
||||
must be restored with *pg_restore*. This format offers the opportunity to
|
||||
select which database objects to restore from the backup file. *Custom*
|
||||
archive format is recommended for medium to large databases as it is
|
||||
compressed by default.
|
||||
|
||||
* Select *Plain* to create a plain-text script file. A plain-text script file contains SQL statements and commands that you can execute at the *psql* command line to recreate the database objects and load the table data. A plain-text backup file can be edited in a text editor, if desired, before using the *psql* program to restore database objects. *Plain* format is normally recommended for smaller databases; script dumps are not recommended for blobs. The SQL commands within the script will reconstruct the database to the last saved state of the database. A plain-text script can be used to reconstruct the database on another machine, or (with modifications) on other architectures.
|
||||
* Select *Tar* to generate a tar archive file that you can restore with
|
||||
*pg_restore*. The tar format does not support compression.
|
||||
|
||||
* Select *Directory* to generate a directory-format archive suitable for use with *pg_restore*. This file format creates a directory with one file for each table and blob being dumped, plus a *Table of Contents* file describing the dumped objects in a machine-readable format that *pg_restore* can read. This format is compressed by default.
|
||||
* Select *Plain* to create a plain-text script file. A plain-text script file
|
||||
contains SQL statements and commands that you can execute at the *psql*
|
||||
command line to recreate the database objects and load the table data. A
|
||||
plain-text backup file can be edited in a text editor, if desired, before
|
||||
using the *psql* program to restore database objects. *Plain* format is
|
||||
normally recommended for smaller databases; script dumps are not
|
||||
recommended for blobs. The SQL commands within the script will reconstruct
|
||||
the database to the last saved state of the database. A plain-text script
|
||||
can be used to reconstruct the database on another machine, or (with
|
||||
modifications) on other architectures.
|
||||
|
||||
* Use the *Compression Ratio* field to select a compression level for the backup. Specify a value of zero to mean use no compression; specify a maximum compression value of 9. Please note that tar archives do not support compression.
|
||||
* Use the *Encoding* drop-down listbox to select the character encoding method that should be used for the archive.
|
||||
* Use the *Number of Jobs* field (when applicable) to specify the number of tables that will be dumped simultaneously in a parallel backup.
|
||||
* Use the dropdown listbox next to *Rolename* to specify the role that owns the backup.
|
||||
* Select *Directory* to generate a directory-format archive suitable for use
|
||||
with *pg_restore*. This file format creates a directory with one file for
|
||||
each table and blob being dumped, plus a *Table of Contents* file
|
||||
describing the dumped objects in a machine-readable format that
|
||||
*pg_restore* can read. This format is compressed by default.
|
||||
|
||||
Click the *Dump options* tab to continue. Use the box fields in the *Dump options* tab to provide options for *pg_dump*.
|
||||
* Use the *Compression Ratio* field to select a compression level for the
|
||||
backup. Specify a value of zero to mean use no compression; specify a maximum
|
||||
compression value of 9. Please note that tar archives do not support
|
||||
compression.
|
||||
* Use the *Encoding* drop-down listbox to select the character encoding method
|
||||
that should be used for the archive.
|
||||
* Use the *Number of Jobs* field (when applicable) to specify the number of
|
||||
tables that will be dumped simultaneously in a parallel 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*.
|
||||
|
||||
.. image:: images/backup_sections.png
|
||||
:alt: Sections option on backup dialog
|
||||
:align: center
|
||||
|
||||
* Move switches in the **Sections** field box to select a portion of the object that will be backed up.
|
||||
* 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 data definition items not included in the data or post-data item lists.
|
||||
* Move the switch next to *Pre-data* to the *Yes* 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 data, large-object contents, and sequence values.
|
||||
* Move the switch next to *Data* to the *Yes* 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 definitions of indexes, triggers, rules, and constraints other than validated check constraints.
|
||||
* Move the switch next to *Post-data* to the *Yes* position to include
|
||||
definitions of indexes, triggers, rules, and constraints other than
|
||||
validated check constraints.
|
||||
|
||||
.. image:: images/backup_objects.png
|
||||
:alt: Type of objects option on backup dialog
|
||||
:align: center
|
||||
|
||||
* Move switches in the **Type of objects** field box to specify details about the type of objects that will be backed up.
|
||||
* 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 up to data.
|
||||
* Move the switch next to *Only data* to the *Yes* 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 *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 objects in the backup.
|
||||
* Move the switch next to *Blobs* to the *No* position to exclude large
|
||||
objects in the backup.
|
||||
|
||||
.. image:: images/backup_do_not_save.png
|
||||
:alt: Do not save option on backup dialog
|
||||
:align: center
|
||||
|
||||
* Move switches in the **Do not save** field box to select the objects that will not be included in the backup.
|
||||
* 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 that set object ownership.
|
||||
* Move the switch next to *Owner* to the *Yes* position to exclude commands
|
||||
that set object ownership.
|
||||
|
||||
* Move the switch next to *Privilege* to the *Yes* position to exclude commands that create access privileges.
|
||||
* Move the switch next to *Privilege* to the *Yes* position to exclude
|
||||
commands that create access privileges.
|
||||
|
||||
* Move the switch next to *Tablespace* to the *Yes* position to exclude tablespaces.
|
||||
* Move the switch next to *Tablespace* to the *Yes* position to exclude
|
||||
tablespaces.
|
||||
|
||||
* Move the switch next to *Unlogged table data* to the *Yes* position to exclude the contents of unlogged tables.
|
||||
* Move the switch next to *Unlogged table data* to the *Yes* position to
|
||||
exclude the contents of unlogged tables.
|
||||
|
||||
* Move the switch next to *Comments* to the *Yes* position to exclude commands that set the comments. **Note:** This option is visible only for database server greater than or equal to 11.
|
||||
* Move the switch next to *Comments* to the *Yes* position to exclude
|
||||
commands that set the comments. **Note:** This option is visible only for
|
||||
database server greater than or equal to 11.
|
||||
|
||||
.. image:: images/backup_queries.png
|
||||
:alt: Queries option on backup dialog
|
||||
:align: center
|
||||
|
||||
* Move switches in the **Queries** field box to specify the type of statements that should be included in the backup.
|
||||
* 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 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 Column Inserts* to the *Yes* 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 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 *Use Insert commands* to the *Yes* 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* position to include a command in the backup that creates a new database when restoring the backup.
|
||||
* Move the switch next to *Include CREATE DATABASE statement* to the *Yes*
|
||||
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* 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 *Include DROP DATABASE statement* to the *Yes*
|
||||
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, 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 greater than or equal to 11.
|
||||
* Move the switch next to *Load Via Partition Root* to the *Yes* 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
|
||||
greater than or equal to 11.
|
||||
|
||||
.. image:: images/backup_disable.png
|
||||
:alt: Disable option on backup dialog
|
||||
:align: center
|
||||
|
||||
* Move switches in the **Disable** field box to specify the type of statements that should be excluded from the backup.
|
||||
* Move switches in the **Disable** field box to specify the type of statements
|
||||
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 target table while the data is being loaded.
|
||||
* 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
|
||||
target table while the data is being loaded.
|
||||
|
||||
* Move the switch next to *$ quoting* to the *Yes* position to enable dollar quoting within function bodies; if disabled, the function body will be quoted using SQL standard string syntax.
|
||||
* Move the switch next to *$ quoting* to the *Yes* position to enable dollar
|
||||
quoting within function bodies; if disabled, the function body will be
|
||||
quoted using SQL standard string syntax.
|
||||
|
||||
.. image:: images/backup_miscellaneous.png
|
||||
:alt: Miscellaneous option on backup dialog
|
||||
:align: center
|
||||
|
||||
* Move switches in the **Miscellaneous** field box to specify miscellaneous backup options.
|
||||
* 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 identifiers as part of the table data for each table.
|
||||
* Move the switch next to *With OIDs* to the *Yes* 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 *pg_dump* to exclude verbose messages.
|
||||
* Move the switch next to *Verbose messages* to the *No* position to instruct
|
||||
*pg_dump* to exclude verbose messages.
|
||||
|
||||
* Move the switch next to *Force double quotes on identifiers* to the *Yes* position to force the quoting of all identifiers.
|
||||
* Move the switch next to *Force double quotes on identifiers* to the *Yes*
|
||||
position to force the quoting of all identifiers.
|
||||
|
||||
* Move the switch next to *Use SET SESSION AUTHORIZATION* to the *Yes* position to include a statement that will use a SET SESSION AUTHORIZATION command to determine object ownership (instead of an ALTER OWNER command).
|
||||
* Move the switch next to *Use SET SESSION AUTHORIZATION* to the *Yes*
|
||||
position to include a statement that will use a SET SESSION AUTHORIZATION
|
||||
command to determine object ownership (instead of an ALTER OWNER command).
|
||||
|
||||
When you’ve specified the details that will be incorporated into the pg_dump command:
|
||||
When you’ve specified the details that will be incorporated into the pg_dump
|
||||
command:
|
||||
|
||||
* Click the *Backup* button to build and execute a command that builds a backup
|
||||
based on your selections on the *Backup* dialog.
|
||||
|
||||
* Click the *Backup* button to build and execute a command that builds a backup based on your selections on the *Backup* dialog.
|
||||
* 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.
|
||||
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*.
|
||||
If the backup is unsuccessful, you can review the error messages returned by the
|
||||
backup command on the *Process Watcher*.
|
||||
@@ -4,31 +4,50 @@
|
||||
`Backup Globals Dialog`:index:
|
||||
******************************
|
||||
|
||||
Use the *Backup Globals* dialog to create a plain-text script that recreates all of the database objects within a cluster, and the global objects that are shared by those databases. Global objects include tablespaces, roles, and object properties. You can use the pgAdmin *Query Tool* to play back a plain-text script, and recreate the objects in the backup.
|
||||
Use the *Backup Globals* dialog to create a plain-text script that recreates all
|
||||
of the database objects within a cluster, and the global objects that are shared
|
||||
by those databases. Global objects include tablespaces, roles, and object
|
||||
properties. You can use the pgAdmin *Query Tool* to play back a plain-text
|
||||
script, and recreate the objects in the backup.
|
||||
|
||||
.. image:: images/backup_globals_general.png
|
||||
:alt: Backup globals dialog
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to specify the following:
|
||||
|
||||
* Enter the name of the backup file in the *Filename* field. Optionally, select the *Browser* icon (ellipsis) to the right to navigate into a directory and select a file that will contain the archive.
|
||||
* Use the drop-down listbox next to *Role name* to specify a role with connection privileges on the selected server. The role will be used for authentication during the backup.
|
||||
* Enter the name of the backup file in the *Filename* field. Optionally, select
|
||||
the *Browser* icon (ellipsis) to the right to navigate into a directory and
|
||||
select a file that will contain the archive.
|
||||
* Use the drop-down listbox next to *Role name* to specify a role with
|
||||
connection privileges on the selected server. The role will be used for
|
||||
authentication during the backup.
|
||||
|
||||
Move switches in the **Miscellaneous** field box to specify the type of statements that should be included in the backup.
|
||||
Move switches in the **Miscellaneous** field box to specify the type of
|
||||
statements that should be included in the backup.
|
||||
|
||||
* Move the *Verbose messages* switch to the *No* position to exclude status messages from the backup. The default is *Yes*.
|
||||
* Move the *Force double quote on identifiers* switch to the *Yes* position to name identifiers without changing case. The default is *No*.
|
||||
* Move the *Verbose messages* switch to the *No* position to exclude status
|
||||
messages from the backup. The default is *Yes*.
|
||||
* Move the *Force double quote on identifiers* switch to the *Yes* position to
|
||||
name identifiers without changing case. The default is *No*.
|
||||
|
||||
Click the *Backup* button to build and execute a command based on your selections; click the *Cancel* button to exit without saving work.
|
||||
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.
|
||||
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.
|
||||
If the backup is unsuccessful, review the error message returned by the
|
||||
*Process Watcher* to resolve any issue.
|
||||
@@ -4,85 +4,135 @@
|
||||
`Backup Server Dialog`:index:
|
||||
*****************************
|
||||
|
||||
Use the *Backup Server* dialog to create a plain-text script that will recreate the selected server. You can use the pgAdmin *Query Tool* to play back a plain-text script, and recreate the server.
|
||||
Use the *Backup Server* dialog to create a plain-text script that will recreate
|
||||
the selected server. You can use the pgAdmin *Query Tool* to play back a
|
||||
plain-text script, and recreate the server.
|
||||
|
||||
.. image:: images/backup_server_general.png
|
||||
:alt: Backup server dialog
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to specify the following:
|
||||
|
||||
* Enter the name of the backup file in the *Filename* field. Optionally, select the *Browser* icon (ellipsis) to the right to navigate into a directory and select a file that will contain the archive.
|
||||
* Use the *Encoding* drop-down listbox to select the character encoding method that should be used for the archive. **Note:** This option is visible only for database server greater than or equal to 11.
|
||||
* Use the drop-down listbox next to *Role name* to specify a role with connection privileges on the selected server. The role will be used for authentication during the backup.
|
||||
* Enter the name of the backup file in the *Filename* field. Optionally, select
|
||||
the *Browser* icon (ellipsis) to the right to navigate into a directory and
|
||||
select a file that will contain the archive.
|
||||
* Use the *Encoding* drop-down listbox to select the character encoding method
|
||||
that should be used for the archive. **Note:** This option is visible only for
|
||||
database server greater than or equal to 11.
|
||||
* Use the drop-down listbox next to *Role name* to specify a role with
|
||||
connection privileges on the selected server. The role will be used for
|
||||
authentication during the backup.
|
||||
|
||||
.. image:: images/backup_server_objects.png
|
||||
:alt: Type of objects option on backup server dialog
|
||||
:align: center
|
||||
|
||||
* Move switches in the **Type of objects** field box to specify details about the type of objects that will be backed up.
|
||||
* 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 up to data.
|
||||
* Move the switch next to *Only data* to the *Yes* 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 *Only schema* to limit the back up to schema-level
|
||||
database objects.
|
||||
|
||||
.. image:: images/backup_server_do_not_save.png
|
||||
:alt: Do not save option on backup server dialog
|
||||
:align: center
|
||||
|
||||
* Move switches in the **Do not save** field box to select the objects that will not be included in the backup.
|
||||
* 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 that set object ownership.
|
||||
* Move the switch next to *Owner* to the *Yes* position to exclude commands
|
||||
that set object ownership.
|
||||
|
||||
* Move the switch next to *Privilege* to the *Yes* position to exclude commands that create access privileges.
|
||||
* Move the switch next to *Privilege* to the *Yes* position to exclude
|
||||
commands that create access privileges.
|
||||
|
||||
* Move the switch next to *Tablespace* to the *Yes* position to exclude tablespaces.
|
||||
* Move the switch next to *Tablespace* to the *Yes* position to exclude
|
||||
tablespaces.
|
||||
|
||||
* Move the switch next to *Unlogged table data* to the *Yes* position to exclude the contents of unlogged tables.
|
||||
* Move the switch next to *Unlogged table data* to the *Yes* position to
|
||||
exclude the contents of unlogged tables.
|
||||
|
||||
* Move the switch next to *Comments* to the *Yes* position to exclude commands that set the comments. **Note:** This option is visible only for database server greater than or equal to 11.
|
||||
* Move the switch next to *Comments* to the *Yes* position to exclude
|
||||
commands that set the comments. **Note:** This option is visible only for
|
||||
database server greater than or equal to 11.
|
||||
|
||||
.. image:: images/backup_server_queries.png
|
||||
:alt: Queries option on backup server dialog
|
||||
:align: center
|
||||
|
||||
* Move switches in the **Queries** field box to specify the type of statements that should be included in the backup.
|
||||
* 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 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 Column Inserts* to the *Yes* 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 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 *Use Insert commands* to the *Yes* 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* 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 *Include DROP DATABASE statement* to the *Yes*
|
||||
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.
|
||||
|
||||
|
||||
.. image:: images/backup_server_disable.png
|
||||
:alt: Disable option on backup server dialog
|
||||
:align: center
|
||||
|
||||
* Move switches in the **Disable** field box to specify the type of statements that should be excluded from the backup.
|
||||
* Move switches in the **Disable** field box to specify the type of statements
|
||||
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 target table while the data is being loaded.
|
||||
* 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
|
||||
target table while the data is being loaded.
|
||||
|
||||
* Move the switch next to *$ quoting* to the *Yes* position to enable dollar quoting within function bodies; if disabled, the function body will be quoted using SQL standard string syntax.
|
||||
* Move the switch next to *$ quoting* to the *Yes* position to enable dollar
|
||||
quoting within function bodies; if disabled, the function body will be
|
||||
quoted using SQL standard string syntax.
|
||||
|
||||
.. image:: images/backup_server_miscellaneous.png
|
||||
:alt: Miscellaneous option on backup server dialog
|
||||
:align: center
|
||||
|
||||
* Move switches in the **Miscellaneous** field box to specify miscellaneous backup options.
|
||||
* 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 identifiers as part of the table data for each table.
|
||||
* Move the switch next to *With OIDs* to the *Yes* 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 *pg_dump* to exclude verbose messages.
|
||||
* Move the switch next to *Verbose messages* to the *No* position to instruct
|
||||
*pg_dump* to exclude verbose messages.
|
||||
|
||||
* Move the switch next to *Force double quotes on identifiers* to the *Yes* position to force the quoting of all identifiers.
|
||||
* Move the switch next to *Force double quotes on identifiers* to the *Yes*
|
||||
position to force the quoting of all identifiers.
|
||||
|
||||
* Move the switch next to *Use SET SESSION AUTHORIZATION* to the *Yes* position to include a statement that will use a SET SESSION AUTHORIZATION command to determine object ownership (instead of an ALTER OWNER command).
|
||||
* Move the switch next to *Use SET SESSION AUTHORIZATION* to the *Yes*
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
If the backup is unsuccessful, review the error message returned by the
|
||||
*Process Watcher* to resolve any issue.
|
||||
@@ -1,40 +0,0 @@
|
||||
.. _browser:
|
||||
|
||||
*****************************
|
||||
`The pgAdmin 4 Client`:index:
|
||||
*****************************
|
||||
|
||||
pgAdmin 4 supports all PostgreSQL features, from writing simple SQL queries to developing complex databases. It is designed to query an active database (in real-time), allowing you to stay current with modifications and implementations.
|
||||
|
||||
Features of pgAdmin 4 include:
|
||||
|
||||
* auto-detection and support for objects discovered at run-time
|
||||
* a live SQL query tool with direct data editing
|
||||
* support for administrative queries
|
||||
* a syntax-highlighting SQL editor
|
||||
* redesigned graphical interfaces
|
||||
* powerful management dialogs and tools for common tasks
|
||||
* responsive, context-sensitive behavior
|
||||
* supportive error messages
|
||||
* helpful hints
|
||||
* online help and information about using pgAdmin dialogs and tools.
|
||||
|
||||
When pgAdmin opens, the interface features a menu bar and a window divided into two panes: the *Browser* tree control in the left pane, and a tabbed browser in the right pane.
|
||||
|
||||
.. image:: images/pgadmin_welcome.png
|
||||
:alt: pgAdmin4 welcome page
|
||||
|
||||
Select an icon from the *Quick Links* panel on the *Dashboard* tab to:
|
||||
|
||||
* Click the *Add New Server* button to open the :ref:`Create - Server dialog <server_dialog>` to add a new server definition.
|
||||
* Click the *Configure pgAdmin* button to open the :ref:`Preferences dialog <preferences>` to customize your pgAdmin client.
|
||||
|
||||
Links in the *Getting Started* panel open a new browser tab that provide useful information for Postgres users:
|
||||
|
||||
* Click the *PostgreSQL Documentation* link to navigate to the *Documentation* page for the PostgreSQL open-source project; once at the project site, you can review the manuals for the currently supported versions of the PostgreSQL server.
|
||||
* Click the *pgAdmin Website* link to navigate to the pgAdmin project website. The pgAdmin site features news about recent pgAdmin releases and other project information.
|
||||
* Click the *Planet PostgreSQL* link to navigate to the blog aggregator for Postgres related blogs.
|
||||
* Click the *Community Support* link to navigate to the *Community* page at the PostgreSQL open-source project site; this page provides information about obtaining support for PostgreSQL features.
|
||||
|
||||
|
||||
|
||||
@@ -1,20 +1,16 @@
|
||||
import os
|
||||
import sys
|
||||
import inspect
|
||||
|
||||
if sys.version_info[0] >= 3:
|
||||
import builtins
|
||||
else:
|
||||
import __builtin__ as builtins
|
||||
import builtins
|
||||
|
||||
# Ensure the global server mode is set.
|
||||
builtins.SERVER_MODE = None
|
||||
|
||||
root = os.path.realpath(
|
||||
os.path.dirname(
|
||||
os.path.realpath(__file__)
|
||||
) + '{0}..{0}..{0}web'.format(os.sep)
|
||||
)
|
||||
os.path.dirname(
|
||||
os.path.realpath(__file__)
|
||||
) + '{0}..{0}..{0}web'.format(os.sep)
|
||||
)
|
||||
|
||||
if sys.path[0] != root:
|
||||
sys.path.insert(0, root)
|
||||
@@ -32,18 +28,19 @@ This document contains code for some of the important classes, listed as
|
||||
below:\n\n""")
|
||||
|
||||
for m in [
|
||||
'PgAdminModule', 'NodeView',
|
||||
'BaseDriver', 'BaseConnection'
|
||||
]:
|
||||
'PgAdminModule', 'NodeView',
|
||||
'BaseDriver', 'BaseConnection'
|
||||
]:
|
||||
target.write("* {0}_\n".format(m))
|
||||
|
||||
|
||||
def print_code(outstream, name, module, info=None):
|
||||
l = len(name)
|
||||
name_len = len(name)
|
||||
|
||||
outstream.write("\n\n.. _{0}:\n\n{0}\n".format(name))
|
||||
|
||||
idx = 0
|
||||
while idx < l:
|
||||
while idx < name_len:
|
||||
idx += 1
|
||||
outstream.write("*")
|
||||
|
||||
@@ -60,21 +57,24 @@ def print_code(outstream, name, module, info=None):
|
||||
|
||||
|
||||
print_code(
|
||||
target, "PgAdminModule", PgAdminModule,
|
||||
"""
|
||||
PgAdminModule is inherted from Flask.Blueprint module.
|
||||
This module defines a set of methods, properties and attributes, that every module should implement.
|
||||
target, "PgAdminModule", PgAdminModule,
|
||||
"""
|
||||
PgAdminModule is inherited from Flask.Blueprint module.
|
||||
This module defines a set of methods, properties and attributes,
|
||||
that every module should implement.
|
||||
""")
|
||||
|
||||
from pgadmin.browser.utils import NodeView
|
||||
|
||||
print_code(
|
||||
target, "NodeView", NodeView,
|
||||
"""
|
||||
NodeView class helps exposing basic REST APIs for different operations used by
|
||||
pgAdmin Browser. The basic idea has been taken from the `Flask's MethodView
|
||||
<http://flask.pocoo.org/docs/0.10/api/#flask.views.MethodView>`_ class. Because
|
||||
- we need a lot more operations (not, just CRUD), we can not use it directly.""")
|
||||
target, "NodeView", NodeView,
|
||||
"""
|
||||
The NodeView class exposes basic REST APIs for different operations used by
|
||||
the pgAdmin Browser. The basic idea has been taken from `Flask's MethodView
|
||||
<http://flask.pocoo.org/docs/1.0/api/#flask.views.MethodView>`_ class. Because
|
||||
we need a lot more operations (not, just CRUD), we can not use it directly.""")
|
||||
|
||||
from pgadmin.utils.driver.abstract import BaseDriver, BaseConnection
|
||||
|
||||
print_code(target, "BaseDriver", BaseDriver)
|
||||
print_code(target, "BaseConnection", BaseConnection)
|
||||
@@ -4,44 +4,64 @@
|
||||
`Cast Dialog`:index:
|
||||
********************
|
||||
|
||||
Use the *Cast* dialog to define a cast. A cast specifies how to convert a value from one data type to another.
|
||||
Use the *Cast* dialog to define a cast. A cast specifies how to convert a value
|
||||
from one data type to another.
|
||||
|
||||
The *Cast* dialog organizes the development of a cast through the following dialog tabs: *General* and *Definition*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *Cast* dialog organizes the development of a cast through the following
|
||||
dialog tabs: *General* and *Definition*. The *SQL* tab displays the SQL code
|
||||
generated by dialog selections.
|
||||
|
||||
.. image:: images/cast_general.png
|
||||
:alt: Cast dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify the cast:
|
||||
|
||||
* The *Name* field is disabled. The name that will be displayed in the *pgAdmin* tree control is the *Source* type concatenated with the *Target* type, and is generated automatically when you make selections on the *Cast* dialog *Definition* tab.
|
||||
* The *Name* field is disabled. The name that will be displayed in the
|
||||
*pgAdmin* tree control is the *Source* type concatenated with the *Target*
|
||||
type, and is generated automatically when you make selections on the *Cast*
|
||||
dialog *Definition* tab.
|
||||
* Store notes about the cast in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/cast_definition.png
|
||||
:alt: Cast dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to define parameters:
|
||||
|
||||
* Use the drop-down listbox next to *Source type* to select the name of the source data type of the cast.
|
||||
* Use the drop-down listbox next to *Target type* to select the name of the target data type of the cast.
|
||||
* 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. 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.
|
||||
* Use the drop-down listbox next to *Source type* to select the name of the
|
||||
source data type of the cast.
|
||||
* Use the drop-down listbox next to *Target type* to select the name of the
|
||||
target data type of the cast.
|
||||
* 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.
|
||||
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.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Cast* dialog generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *Cast* dialog generate a SQL command (see an example below).
|
||||
Use the *SQL* tab for review; revisit or switch tabs to make any changes to the
|
||||
SQL command.
|
||||
|
||||
**Example**
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *Cast* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Cast* dialog:
|
||||
|
||||
.. image:: images/cast_sql.png
|
||||
:alt: Cast dialog sql tab
|
||||
:align: center
|
||||
|
||||
The cast uses a function named *int4(bigint)* to convert a biginteger data type to an integer.
|
||||
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. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
@@ -4,24 +4,37 @@
|
||||
`Change Password Dialog`:index:
|
||||
*******************************
|
||||
|
||||
It is a good policy to routinely change your password to protect data, even in what you may consider a 'safe' environment. In the workplace, failure to apply an appropriate password policy could leave you in breach of Data Protection laws.
|
||||
It is a good policy to routinely change your password to protect data, even in
|
||||
what you may consider a 'safe' environment. In the workplace, failure to apply
|
||||
an appropriate password policy could leave you in breach of Data Protection
|
||||
laws.
|
||||
|
||||
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.
|
||||
* 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 easily but is an unfamiliar acronym.
|
||||
* Ensure that your password is changed regularly; at minimum, change it every ninety days.
|
||||
* Ensure that your password is an adequate length; 6 characters should be the
|
||||
absolute minimum number of characters in the password.
|
||||
* 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
|
||||
easily but is an unfamiliar acronym.
|
||||
* Ensure that your password is changed regularly; at minimum, change it every
|
||||
ninety days.
|
||||
|
||||
The above should be considered a starting point: It is not a comprehensive list and it **will not guarantee security**.
|
||||
The guidelines above should be considered a starting point: They are not a
|
||||
comprehensive list and they **will not guarantee security**.
|
||||
|
||||
.. image:: images/password.png
|
||||
:alt: Change database password dialog
|
||||
:align: center
|
||||
|
||||
Use the *Change Password* dialog to change your password:
|
||||
|
||||
* The name displayed in the *User* field is the role for which you are modifying the password; it is the role that is associated with the server connection that is highlighted in the tree control.
|
||||
* The name displayed in the *User* field is the role for which you are modifying
|
||||
the password; it is the role that is associated with the server connection
|
||||
that is highlighted in the tree control.
|
||||
* Enter the password associated with the role in the *Current Password* field.
|
||||
* 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 *OK* button to change your password; click *Cancel* to exit the dialog
|
||||
without changing your password.
|
||||
@@ -4,18 +4,28 @@
|
||||
`Change User Password Dialog`:index:
|
||||
************************************
|
||||
|
||||
It is a good policy to routinely change your password to protect data, even in what you may consider a 'safe' environment. In the workplace, failure to apply an appropriate password policy could leave you in breach of Data Protection laws.
|
||||
It is a good policy to routinely change your password to protect data, even in
|
||||
what you may consider a 'safe' environment. In the workplace, failure to apply
|
||||
an appropriate password policy could leave you in breach of Data Protection
|
||||
laws.
|
||||
|
||||
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.
|
||||
* 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 easily but is an unfamiliar acronym.
|
||||
* Ensure that your password is changed regularly; at minimum, change it every ninety days.
|
||||
* Ensure that your password is an adequate length; 6 characters should be the
|
||||
absolute minimum number of characters in the password.
|
||||
* 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
|
||||
easily but is an unfamiliar acronym.
|
||||
* Ensure that your password is changed regularly; at minimum, change it every
|
||||
ninety days.
|
||||
|
||||
The above should be considered a starting point: It is not a comprehensive list and it **will not guarantee security**.
|
||||
The guidelines above should be considered a starting point: They are not a
|
||||
comprehensive list and they **will not guarantee security**.
|
||||
|
||||
.. image:: images/change_user_password.png
|
||||
:alt: Change current user password dialog
|
||||
:align: center
|
||||
|
||||
Use the *Change Password* dialog to change your password:
|
||||
|
||||
@@ -23,4 +33,5 @@ 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 *Change Password* button to change your password; click *Close* to exit the dialog.
|
||||
Click the *Change Password* button to change your password; click *Close* to
|
||||
exit the dialog.
|
||||
@@ -4,44 +4,63 @@
|
||||
`Check Dialog`:index:
|
||||
*********************
|
||||
|
||||
Use the *Check* dialog to define or modify a check constraint. A check constraint specifies an expression that produces a Boolean result that new or updated rows must satisfy for an insert or update operation to succeed.
|
||||
Use the *Check* dialog to define or modify a check constraint. A check
|
||||
constraint specifies an expression that produces a Boolean result that new or
|
||||
updated rows must satisfy for an insert or update operation to succeed.
|
||||
|
||||
The *Check* dialog organizes the development of a check constraint through the *General* and *Definition* tabs. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *Check* dialog organizes the development of a check constraint through the
|
||||
*General* and *Definition* tabs. The *SQL* tab displays the SQL code generated
|
||||
by dialog selections.
|
||||
|
||||
.. image:: images/check_general.png
|
||||
:alt: Check dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify the check constraint:
|
||||
|
||||
* Use the *Name* field to provide a descriptive name for the check constraint that will be displayed in the *pgAdmin* tree control. With PostgreSQL 9.5 forward, when a table has multiple check constraints, they will be tested for each row in alphabetical order by name and after NOT NULL constraints.
|
||||
* Use the *Name* field to provide a descriptive name for the check constraint
|
||||
that will be displayed in the *pgAdmin* tree control. With PostgreSQL 9.5
|
||||
forward, when a table has multiple check constraints, they will be tested for
|
||||
each row in alphabetical order by name and after NOT NULL constraints.
|
||||
* Store notes about the check constraint in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/check_definition.png
|
||||
:alt: Check dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to define the check constraint:
|
||||
|
||||
* Provide the expression that a row must satisfy in the *Check* field.
|
||||
* Move the *No Inherit?* switch to the *Yes* position to specify this constraint is automatically inherited by a table's children. The default is *No*.
|
||||
* Move the *Don't validate?* switch to the *No* position to skip validation of existing data; the constraint may not hold for all rows in the table. The default is *Yes*.
|
||||
* Move the *No Inherit?* switch to the *Yes* position to specify that this
|
||||
constraint is not automatically inherited by a table's children. The default
|
||||
is *No*, meaning that the constraint will be inherited by any children.
|
||||
* Move the *Don't validate?* switch to the *No* position to skip validation of
|
||||
existing data; the constraint may not hold for all rows in the table. The
|
||||
default is *Yes*.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Check* dialog generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *Check* dialog generate a SQL command (see an example
|
||||
below). Use the *SQL* tab for review; revisit or switch tabs to make any changes
|
||||
to the SQL command.
|
||||
|
||||
**Example**
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *Check* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Check* dialog:
|
||||
|
||||
.. image:: images/check_sql.png
|
||||
: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 *check_price*
|
||||
on the *price* column of the *products* table. The constraint confirms that
|
||||
any values added to the column are greater than 0.
|
||||
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
@@ -4,16 +4,23 @@
|
||||
`Clear Saved Passwords`:index:
|
||||
******************************
|
||||
|
||||
Use *Clear Saved Password* functionality to clear the saved password for the database server.
|
||||
Use *Clear Saved Password* functionality to clear the saved password for the
|
||||
database server.
|
||||
|
||||
.. image:: images/clear_saved_password.png
|
||||
:align: center
|
||||
|
||||
*Clear Saved Password* shows in the context menu for the selected server as well as under the *Object* menu on the top menu bar.
|
||||
*Clear Saved Password* shows in the context menu for the selected server as well
|
||||
as under the *Object* menu on the top menu bar.
|
||||
|
||||
Use *Clear SSH Tunnel Password* functionality to clear the saved password of SSH Tunnel to connect to the database server.
|
||||
Use *Clear SSH Tunnel Password* functionality to clear the saved password of SSH
|
||||
Tunnel to connect to the database server.
|
||||
|
||||
.. image:: images/clear_tunnel_password.png
|
||||
:align: center
|
||||
|
||||
*Clear SSH Tunnel Password* shows in the context menu for the selected server as well as under the *Object* menu on the top menu bar.
|
||||
*Clear SSH Tunnel Password* shows in the context menu for the selected server as
|
||||
well as under the *Object* menu on the top menu bar.
|
||||
|
||||
**Note:** It will be enabled/visible when the password for the selected database server is already saved.
|
||||
**Note:** It will be enabled/visible when the password for the selected database
|
||||
server is already saved.
|
||||
@@ -10,14 +10,14 @@ 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.
|
||||
|
||||
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.
|
||||
|
||||
Web Application
|
||||
===============
|
||||
***************
|
||||
|
||||
The web application forms the bulk of pgAdmin and can be found in the **/web**
|
||||
directory in the source tree. The main file is **pgAdmin4.py** which can be used
|
||||
@@ -25,16 +25,17 @@ to run the built-in standalone web server, or as a WSGI application for producti
|
||||
use.
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
=============
|
||||
|
||||
The core application configuration is found in **config.py**. This file includes
|
||||
all configurable settings for the application, along with descriptions of their
|
||||
use. It is essential that various settings are configured prior to deployent on
|
||||
a web server; these can be overriden in **config_local.py** to avoid modifying
|
||||
the main configuration file.
|
||||
use. It is essential that various settings are configured prior to deployment on
|
||||
a web server; these can be overridden in **config_local.py** or
|
||||
**config_system.py** (see the :ref:`config.py <config_py>` documentation) to
|
||||
avoid modifying the main configuration file.
|
||||
|
||||
User Settings
|
||||
-------------
|
||||
=============
|
||||
|
||||
When running in desktop mode, pgAdmin has a single, default user account that is
|
||||
used for the desktop user. When running in server mode, there may be unlimited
|
||||
@@ -57,7 +58,7 @@ The local configuration will determine how the script sets up the database,
|
||||
particularly with regard to desktop vs. server mode.
|
||||
|
||||
pgAdmin Core
|
||||
============
|
||||
************
|
||||
|
||||
The heart of pgAdmin is the **pgadmin** package. This contains the globally
|
||||
available HTML templates used by the Jinja engine, as well as any global static
|
||||
@@ -68,7 +69,7 @@ is responsible for setting up logging and authentication, dynamically loading
|
||||
other modules, and a few other tasks.
|
||||
|
||||
Modules
|
||||
=======
|
||||
*******
|
||||
|
||||
Units of functionality are added to pgAdmin through the addition of modules.
|
||||
Theses are Python object instance of classes, inherits the
|
||||
@@ -108,7 +109,7 @@ PgAdminModule class. This is responsible for providing hook points to integrate
|
||||
the module into the rest of the application - for example, a hook might tell
|
||||
the caller what CSS files need to be included on the rendered page, or what menu
|
||||
options to include and what they should do. Hook points need not exist if they
|
||||
are not required. It is the responsiblity of the caller to ensure they are
|
||||
are not required. It is the responsibility of the caller to ensure they are
|
||||
present before attempting to utilise them.
|
||||
|
||||
Hooks currently implemented are:
|
||||
@@ -190,7 +191,7 @@ loaded modules, but must use the defined hook points and fail gracefully in the
|
||||
event that a particular module is not present.
|
||||
|
||||
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
|
||||
@@ -202,7 +203,7 @@ Python package (along with javascript modules) must be created. This must:
|
||||
3) An instance of the class object
|
||||
|
||||
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),
|
||||
@@ -210,6 +211,6 @@ bootstrap for UI look and feel, Backbone for data manipulation of a node,
|
||||
Backform 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 competely.) Please
|
||||
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.
|
||||
@@ -16,7 +16,7 @@ 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 - 2019, The pgAdmin Development Team
|
||||
Copyright (C) 2013 - 2020, The pgAdmin Development Team
|
||||
|
||||
* Ensure there's a blank line immediately following any copyright headers.
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ pgAdmin uses multiple technologies and multiple languages, each of which have
|
||||
their own coding standards.
|
||||
|
||||
General
|
||||
=======
|
||||
*******
|
||||
|
||||
In all languages, indentations should be made with 4 spaces, and excessively long
|
||||
lines wrapped where appropriate to ensure they can be read on smaller displays
|
||||
@@ -20,7 +20,7 @@ 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
|
||||
@@ -54,7 +54,7 @@ Styles should be specified clearly, one per line. For example:
|
||||
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.
|
||||
@@ -62,7 +62,7 @@ being rendered from templates by the Jinja2 template engine in Flask.
|
||||
All HTML must be HTML 5 compliant.
|
||||
|
||||
Javascript
|
||||
==========
|
||||
**********
|
||||
|
||||
Client-side code is written in Javascript using jQuery and various plugins.
|
||||
Whilst much of the code is rendered from static files, there is also code that
|
||||
@@ -110,7 +110,7 @@ names.
|
||||
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,
|
||||
@@ -158,7 +158,7 @@ which may be omitted if on a single statement is present:
|
||||
}
|
||||
|
||||
Python
|
||||
======
|
||||
******
|
||||
|
||||
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
|
||||
@@ -170,7 +170,7 @@ with the required file header is shown below::
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2019, The pgAdmin Development Team
|
||||
# Copyright (C) 2013 - 2020, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
@@ -4,49 +4,79 @@
|
||||
`Collation Dialog`:index:
|
||||
*************************
|
||||
|
||||
Use the *Collation* dialog to define a collation. A collation is an SQL schema object that maps a SQL name to operating system locales. To create a collation, you must have a CREATE privilege on the destination schema.
|
||||
Use the *Collation* dialog to define a collation. A collation is an SQL schema
|
||||
object that maps a SQL name to operating system locales. To create a collation,
|
||||
you must have a CREATE privilege on the destination schema.
|
||||
|
||||
The *Collation* dialog organizes the development of a collation through the following dialog tabs: *General* and *Definition*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *Collation* dialog organizes the development of a collation through the
|
||||
following dialog tabs: *General* and *Definition*. The *SQL* tab displays the
|
||||
SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/collation_general.png
|
||||
:alt: Collation dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify the collation:
|
||||
|
||||
* Use the *Name* field to provide a name for the collation. The collation name must be unique within a schema. The name will be displayed in the *pgAdmin* tree control.
|
||||
* Use the *Name* field to provide a name for the collation. The collation name
|
||||
must be unique within a schema. The name will be displayed in the *pgAdmin*
|
||||
tree control.
|
||||
* Select the name of the owner from the drop-down listbox in the *Owner* field.
|
||||
* Select the name of the schema in which the collation will reside from the drop-down listbox in the *Schema* field.
|
||||
* Select the name of the schema in which the collation will reside from the
|
||||
drop-down listbox in the *Schema* field.
|
||||
* Store notes about the collation in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/collation_definition.png
|
||||
:alt: Collation dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to specify the operating system locale settings:
|
||||
Use the fields in the *Definition* tab to specify the operating system locale
|
||||
settings:
|
||||
|
||||
* Use the drop-down listbox next to *Copy collation* to select the name of an existing collation to copy. The new collation will have the same properties as the existing one, but will be an independent object. If you choose to copy an existing collation, you cannot modify the collation properties displayed on this tab.
|
||||
* Use the *Locale* field to specify a locale; a locale specifies language and language formatting characteristics. If you specify this, you cannot specify either of the following parameters. To view a list of locales supported by your Linux system use the command *locale -a*.
|
||||
* Use the *LC_COLLATE* field to specify a locale with specified string sort order. The locale must be applicable to the current database encoding. (See CREATE DATABASE for details.)
|
||||
* Use the *LC_CTYPE* field to specify a locale with specified character classification. The locale must be applicable to the current database encoding. (See CREATE DATABASE for details.)
|
||||
* Use the drop-down listbox next to *Copy collation* to select the name of an
|
||||
existing collation to copy. The new collation will have the same properties
|
||||
as the existing one, but will be an independent object. If you choose to copy
|
||||
an existing collation, you cannot modify the collation properties displayed on
|
||||
this tab.
|
||||
* Use the *Locale* field to specify a locale; a locale specifies language and
|
||||
language formatting characteristics. If you specify this, you cannot specify
|
||||
either of the following parameters. To view a list of locales supported by
|
||||
your Linux system use the command *locale -a*.
|
||||
* Use the *LC_COLLATE* field to specify a locale with specified string sort
|
||||
order. The locale must be applicable to the current database encoding. (See
|
||||
CREATE DATABASE for details.)
|
||||
* Use the *LC_CTYPE* field to specify a locale with specified character
|
||||
classification. The locale must be applicable to the current database encoding.
|
||||
(See CREATE DATABASE for details.)
|
||||
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Collation* dialog generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *Collation* dialog generate a SQL command (see an example b
|
||||
elow). Use the *SQL* tab for review; revisit or switch tabs to make any changes
|
||||
to the SQL command.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *Collation* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Collation* dialog:
|
||||
|
||||
.. image:: images/collation_sql.png
|
||||
:alt: Collation dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a collation named *french* that uses the rules specified for the locale, *fr-BI-x-icu. The collation is owned by *postgres*.
|
||||
The example shown demonstrates creating a collation named *french* that uses the
|
||||
rules specified for the locale, *fr-BI-x-icu. The collation is owned by
|
||||
*postgres*.
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation. For more information about setting a locale, see Chapter 22.1 Locale Support of the PostgreSQL core documentation:
|
||||
* Click the *Info* button (i) to access online help. For more information about
|
||||
setting a locale, see Chapter 22.1 Locale Support of the PostgreSQL core
|
||||
documentation:
|
||||
|
||||
http://www.postgresql.org/docs/9.5/static/locale.html
|
||||
https://www.postgresql.org/docs/current/locale.html
|
||||
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
|
||||
@@ -4,73 +4,169 @@
|
||||
`Column Dialog`:index:
|
||||
**********************
|
||||
|
||||
Use the *Column* dialog to add a column to an existing table or modify a column definition.
|
||||
Use the *Column* dialog to add a column to an existing table or modify a column
|
||||
definition.
|
||||
|
||||
The *Column* dialog organizes the development of a column through the following dialog tabs: *General*, *Definition*, and *Security*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *Column* dialog organizes the development of a column through the following
|
||||
dialog tabs: *General*, *Definition*, and *Security*. The *SQL* tab displays the
|
||||
SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/column_general.png
|
||||
:alt: Column dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify the column:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the column. The name will be displayed in the *pgAdmin* tree control. This field is required.
|
||||
* Use the *Name* field to add a descriptive name for the column. The name will
|
||||
be displayed in the *pgAdmin* tree control. This field is required.
|
||||
* Store notes about the column in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/column_definition.png
|
||||
:alt: Column dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to add parameters for the column. (Fields are disabled if inapplicable.)
|
||||
Use the fields in the *Definition* tab to add parameters for the column. (Fields
|
||||
are disabled if inapplicable.)
|
||||
|
||||
* Use the drop-down listbox next to *Data Type* to select a data type for the
|
||||
column. For more information on the data types that are supported by
|
||||
PostgreSQL, refer to Chapter 8 of the Postgres core documentation. This field
|
||||
is required.
|
||||
* Use the *Length/Precision* and *Scale* fields to specify the maximum number of
|
||||
significant digits in a numeric value, or the maximum number of characters in
|
||||
a text value.
|
||||
* Use the drop-down listbox next to *Collation* to apply a collation setting to
|
||||
the column.
|
||||
|
||||
Click the *Constraints* tab to continue.
|
||||
|
||||
.. image:: images/column_constraints.png
|
||||
:alt: Column dialog constraints tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Constraints* tab to specify constraints for the column.
|
||||
(Fields are disabled if inapplicable.)
|
||||
|
||||
* Use the drop-down listbox next to *Data Type* to select a data type for the column. For more information on the data types that are supported by PostgreSQL, refer to Chapter 8 of the Postgres core documentation. This field is required.
|
||||
* Use the *Length* and *Precision* fields to specify the maximum number of significant digits in a numeric value, or the maximum number of characters in a text value.
|
||||
* Use the drop-down listbox next to *Collation* to apply a collation setting to the column.
|
||||
* Use the *Default Value* field to specify a default data value.
|
||||
* Move the *Not Null* switch to the *Yes* position to specify the column may not contain null values. The default is *No*.
|
||||
* Move the *Not Null* switch to the *Yes* position to specify the column may not
|
||||
contain null values. The default is *No*.
|
||||
* Use the *Type* field to specify the column type (NONE/IDENTITY/GENERATED).
|
||||
The default is *NONE*.
|
||||
|
||||
Click the *IDENTITY* type to create Identity column.
|
||||
|
||||
.. image:: images/column_constraint_identity.png
|
||||
:alt: Column dialog constraints tab
|
||||
:align: center
|
||||
|
||||
Use the following fields to create *IDENTITY* column. Identity columns are
|
||||
applicable for PG/EPAS version 10 and above.
|
||||
|
||||
* Use the *Identity* field to specify ALWAYS or BY DEFAULT. This clause is
|
||||
used to determine how the sequence value is given precedence over a
|
||||
user-specified value in an INSERT statement.
|
||||
* Use the *Increment* field to specify which value is added to the current
|
||||
sequence value to create a new value.
|
||||
* Provide a value in the *Start* field to specify the beginning value of the
|
||||
sequence. The default starting value is MINVALUE for ascending sequences and
|
||||
MAXVALUE for descending ones.
|
||||
* Provide a value in the *Minimum* field to specify the minimum value a sequence
|
||||
can generate. If this clause is not supplied or NO MINVALUE is specified,
|
||||
then defaults will be used. The defaults are 1 and -263-1 for ascending and
|
||||
descending sequences, respectively.
|
||||
* Provide a value in the *Maximum* field to specify the maximum value for the
|
||||
sequence. If this clause is not supplied or NO MAXVALUE is specified, then
|
||||
default values will be used. The defaults are 263-1 and -1 for ascending and
|
||||
descending sequences, respectively.
|
||||
* Provide a value in the *Cache* field to specify how many sequence numbers are
|
||||
to be preallocated and stored in memory for faster access. The minimum value
|
||||
is 1 (only one value can be generated at a time, i.e., no cache), and this is
|
||||
also the default.
|
||||
* Move the *Cycled* switch to the *Yes* position to allow the sequence to wrap
|
||||
around when the MAXVALUE or the MINVALUE has been reached by an ascending or
|
||||
descending sequence respectively. If the limit is reached, the next number
|
||||
generated will be the MINVALUE or MAXVALUE, respectively. The default is *No*.
|
||||
|
||||
Click the *GENERATED* type to create Generated column.
|
||||
|
||||
.. image:: images/column_constraint_generated.png
|
||||
:alt: Column dialog constraints tab
|
||||
:align: center
|
||||
|
||||
Use the following fields to create *GENERATED* column. Generated columns are
|
||||
applicable for PG/EPAS version 12 and above.
|
||||
|
||||
* Use the *Expression* field to specify the generation expression. It can
|
||||
refer to other columns in the table, but not other generated columns.
|
||||
Any functions and operators used must be immutable. References to other
|
||||
tables are not allowed.
|
||||
|
||||
Click the *Variables* tab to continue.
|
||||
|
||||
.. image:: images/column_variables.png
|
||||
:alt: Column dialog variables tab
|
||||
:align: center
|
||||
|
||||
Use the *Variables* tab to 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:
|
||||
Use the *Variables* tab to 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:
|
||||
|
||||
* Select the name of the variable from the drop-down listbox in the *Name* field.
|
||||
|
||||
* Select *n_distinct* to specify the number of distinct values for the column.
|
||||
* Select *n_distinct_inherited* to specify the number of distinct values for the table and its children.
|
||||
* Select *n_distinct_inherited* to specify the number of distinct values
|
||||
for the table and its children.
|
||||
|
||||
* Specify the number of distinct values in the *Value* field. For more information, see the documentation for `ALTER TABLE <http://www.postgresql.org/docs/9.6/static/sql_altertable.html>`_.
|
||||
* Specify the number of distinct values in the *Value* field. For more
|
||||
information, see the documentation for
|
||||
`ALTER TABLE <https://www.postgresql.org/docs/current/sql-altertable.html>`_.
|
||||
|
||||
Click the *Add* icon (+) to specify each additional *Name*/*Value* pair; to discard a variable, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click the *Add* icon (+) to specify each additional *Name*/*Value* pair; to
|
||||
discard a variable, click the trash icon to the left of the row and confirm
|
||||
deletion in the *Delete Row* popup.
|
||||
|
||||
Click the *Security* tab to continue.
|
||||
|
||||
.. image:: images/column_security.png
|
||||
:alt: Column dialog security tab
|
||||
:align: center
|
||||
|
||||
Use the *Security* tab to assign attributes and define security labels. Click the *Add* icon (+) to add each security label selection:
|
||||
Use the *Security* tab to assign attributes and define security labels. Click
|
||||
the *Add* icon (+) to add each security label selection:
|
||||
|
||||
* Specify a security label provider in the *Provider* field. The named provider must be loaded and must consent to the proposed labeling operation.
|
||||
* Specify a a security label in the *Security Label* field. The meaning of a given label is at the discretion of the label provider. PostgreSQL places no restrictions on whether or how a label provider must interpret security labels; it merely provides a mechanism for storing them.
|
||||
* Specify a security label provider in the *Provider* field. The named provider
|
||||
must be loaded and must consent to the proposed labeling operation.
|
||||
* Specify a a security label in the *Security Label* field. The meaning of a
|
||||
given label is at the discretion of the label provider. PostgreSQL places no
|
||||
restrictions on whether or how a label provider must interpret security
|
||||
labels; it merely provides a mechanism for storing them.
|
||||
|
||||
Click the *Add* icon (+) to assign additional security labels; to discard a security label, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click the *Add* icon (+) to assign additional security labels; to discard a
|
||||
security label, click the trash icon to the left of the row and confirm deletion
|
||||
in the *Delete Row* popup.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Column* dialog generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *Column* dialog generate a SQL command (see an example
|
||||
below). Use the *SQL* tab for review; revisit or switch tabs to make any changes
|
||||
to the SQL command.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *Column* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Column* dialog:
|
||||
|
||||
.. image:: images/column_sql.png
|
||||
: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 *territory* in the table
|
||||
named *distributors*.
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
@@ -0,0 +1,83 @@
|
||||
.. _compound_trigger_dialog:
|
||||
|
||||
********************************
|
||||
`Compound Trigger Dialog`:index:
|
||||
********************************
|
||||
|
||||
Use the *Compound Trigger* dialog to create a compound trigger or modify an
|
||||
existing compound trigger. *Compound Trigger* is supported only for EPAS server
|
||||
12 and above. A compound trigger executes a specified code when certain events
|
||||
occur.
|
||||
|
||||
The *Compound Trigger* dialog organizes the development of a compound trigger
|
||||
through the following dialog tabs: *General*, *Events*, and *Code*. The *SQL*
|
||||
tab displays the SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/compound_trigger_general.png
|
||||
:alt: Compound Trigger dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify the compound trigger:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the compound trigger. This
|
||||
must be distinct from the name of any other compound trigger for the same table.
|
||||
The name will be displayed in the *pgAdmin* tree control.
|
||||
* Store notes about the compound trigger in the *Comment* field.
|
||||
|
||||
.. image:: images/compound_trigger_general_enabled.png
|
||||
:alt: Trigger enabled in dialog tab
|
||||
:align: center
|
||||
|
||||
* *Trigger enabled* field is available in compound trigger dialog once the trigger is created.
|
||||
You can select one of the four options available.
|
||||
|
||||
Click the *Events* tab to continue.
|
||||
|
||||
.. image:: images/compound_trigger_events.png
|
||||
:alt: Compound Trigger dialog events tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Events* tab to specify how and when the compound trigger fires:
|
||||
|
||||
* Select the type of event(s) that will invoke the compound trigger; to select
|
||||
an event type, move the switch next to the event to the *YES* position.
|
||||
The supported event types are *INSERT*, *UPDATE*, *DELETE* and *TRUNCATE*.
|
||||
Views cannot have TRUNCATE triggers.
|
||||
* Use the *When* field to provide a boolean condition that will invoke the
|
||||
compound trigger.
|
||||
* If defining a column-specific compound trigger, use the *Columns* field to
|
||||
specify the columns or columns that are the target of the compound trigger.
|
||||
|
||||
Click the *Code* tab to continue.
|
||||
|
||||
.. image:: images/compound_trigger_code.png
|
||||
:alt: Compound Trigger dialog code tab
|
||||
:align: center
|
||||
|
||||
Use the *Code* field to specify the code for the five timing events
|
||||
*BEFORE STATEMENT*, *AFTER STATEMENT*, *BEFORE EACH ROW*, *AFTER EACH ROW*,
|
||||
*INSTEAD OF EACH ROW* that will be invoked when the compound trigger fires.
|
||||
Basic template is provided with place holders.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Compound Trigger* dialog generate a SQL command (see an example
|
||||
below). Use the *SQL* tab for review; revisit or switch tabs to make any changes
|
||||
to the SQL command.
|
||||
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Compound Trigger* dialog:
|
||||
|
||||
.. image:: images/compound_trigger_sql.png
|
||||
:alt: Compound Trigger dialog sql tab
|
||||
:align: center
|
||||
|
||||
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.
|
||||
@@ -3,7 +3,8 @@
|
||||
# pgAdmin III documentation build configuration file, created by
|
||||
# sphinx-quickstart on Sat Jul 9 15:58:11 2011.
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its containing dir.
|
||||
# This file is execfile()d with the current directory set to its containing
|
||||
# directory.
|
||||
#
|
||||
# Note that not all possible configuration values are present in this
|
||||
# autogenerated file.
|
||||
@@ -11,12 +12,9 @@
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
import sys, os
|
||||
|
||||
if sys.version_info[0] >= 3:
|
||||
import builtins
|
||||
else:
|
||||
import __builtin__ as builtins
|
||||
import os
|
||||
import sys
|
||||
import builtins
|
||||
|
||||
# Ensure the global server mode is set.
|
||||
builtins.SERVER_MODE = None
|
||||
@@ -29,15 +27,15 @@ import config
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
#sys.path.insert(0, os.path.abspath('.'))
|
||||
# sys.path.insert(0, os.path.abspath('.'))
|
||||
|
||||
# -- General configuration -----------------------------------------------------
|
||||
# -- General configuration ----------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#needs_sphinx = '1.0'
|
||||
# needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be extensions
|
||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||
extensions = []
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
@@ -47,7 +45,7 @@ templates_path = ['_templates']
|
||||
source_suffix = '.rst'
|
||||
|
||||
# The encoding of source files.
|
||||
#source_encoding = 'utf-8-sig'
|
||||
# source_encoding = 'utf-8-sig'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
@@ -67,82 +65,83 @@ release = config.APP_VERSION
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#language = None
|
||||
# language = None
|
||||
|
||||
# There are two options for replacing |today|: either, you set today to some
|
||||
# non-false value, then it is used:
|
||||
#today = ''
|
||||
# today = ''
|
||||
# Else, today_fmt is used as the format for a strftime call.
|
||||
#today_fmt = '%B %d, %Y'
|
||||
# today_fmt = '%B %d, %Y'
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
exclude_patterns = ['_build']
|
||||
|
||||
# The reST default role (used for this markup: `text`) to use for all documents.
|
||||
#default_role = None
|
||||
# The reST default role (used for this markup: `text`) to use for all
|
||||
# documents.
|
||||
# default_role = None
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||
#add_function_parentheses = True
|
||||
# add_function_parentheses = True
|
||||
|
||||
# If true, the current module name will be prepended to all description
|
||||
# unit titles (such as .. function::).
|
||||
#add_module_names = True
|
||||
# add_module_names = True
|
||||
|
||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||
# output. They are ignored by default.
|
||||
#show_authors = False
|
||||
# show_authors = False
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
#modindex_common_prefix = []
|
||||
# modindex_common_prefix = []
|
||||
|
||||
|
||||
# -- Options for HTML output ---------------------------------------------------
|
||||
# -- Options for HTML output --------------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
html_theme = 'classic'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
html_theme_options = {
|
||||
'collapsiblesidebar': True,
|
||||
'relbarbgcolor': '#326690',
|
||||
'sidebarbgcolor': '#E2E2E2',
|
||||
'sidebarbtncolor': '#326690',
|
||||
'sidebartextcolor': '#222222',
|
||||
'sidebarlinkcolor': '#326690',
|
||||
'footerbgcolor': '#222222',
|
||||
'codebgcolor': '#d6effc',
|
||||
'textcolor': '#222222',
|
||||
'headbgcolor': '#E2E2E2',
|
||||
'headtextcolor': '#326690',
|
||||
'bodyfont': '"Helvetica Neue", Helvetica, Arial, sans-serif',
|
||||
'headfont': '"Helvetica Neue", Helvetica, Arial, sans-serif'
|
||||
}
|
||||
html_theme = 'pgadmin4'
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
#html_theme_path = []
|
||||
html_theme_path = ['./theme'] # make sphinx search for themes in current dir
|
||||
|
||||
# html_theme_options = {
|
||||
# 'collapsiblesidebar': True,
|
||||
# 'relbarbgcolor': '#326690',
|
||||
# 'sidebarbgcolor': '#E2E2E2',
|
||||
# 'sidebarbtncolor': '#326690',
|
||||
# 'sidebartextcolor': '#222222',
|
||||
# 'sidebarlinkcolor': '#326690',
|
||||
# 'footerbgcolor': '#222222',
|
||||
# 'codebgcolor': '#d6effc',
|
||||
# 'textcolor': '#222222',
|
||||
# 'headbgcolor': '#E2E2E2',
|
||||
# 'headtextcolor': '#326690',
|
||||
# 'bodyfont': '"Helvetica Neue", Helvetica, Arial, sans-serif',
|
||||
# 'headfont': '"Helvetica Neue", Helvetica, Arial, sans-serif'
|
||||
# }
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
# html_theme_path = []
|
||||
|
||||
# The name for this set of Sphinx documents. If None, it defaults to
|
||||
# "<project> v<release> documentation".
|
||||
#html_title = None
|
||||
# html_title = None
|
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
#html_short_title = None
|
||||
# html_short_title = None
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
#html_logo = None
|
||||
# html_logo = None
|
||||
|
||||
# The name of an image file (within the static path) to use as favicon of the
|
||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
# pixels large.
|
||||
#html_favicon = None
|
||||
# html_favicon = None
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
@@ -151,30 +150,30 @@ html_static_path = ['images']
|
||||
|
||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||
# using the given strftime format.
|
||||
#html_last_updated_fmt = '%b %d, %Y'
|
||||
# html_last_updated_fmt = '%b %d, %Y'
|
||||
|
||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||
# typographically correct entities.
|
||||
#html_use_smartypants = True
|
||||
# html_use_smartypants = True
|
||||
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
#html_sidebars = {}
|
||||
# html_sidebars = {}
|
||||
html_sidebars = {
|
||||
'**': ['localtoc.html', 'globaltoc.html', 'searchbox.html']
|
||||
}
|
||||
|
||||
# Additional templates that should be rendered to pages, maps page names to
|
||||
# template names.
|
||||
#html_additional_pages = {}
|
||||
# html_additional_pages = {}
|
||||
|
||||
# If false, no module index is generated.
|
||||
#html_domain_indices = True
|
||||
# html_domain_indices = True
|
||||
|
||||
# If false, no index is generated.
|
||||
#html_use_index = True
|
||||
# html_use_index = True
|
||||
|
||||
# If true, the index is split into individual pages for each letter.
|
||||
#html_split_index = False
|
||||
# html_split_index = False
|
||||
|
||||
# If true, links to the reST sources are added to the pages.
|
||||
html_show_sourcelink = False
|
||||
@@ -188,59 +187,66 @@ html_show_copyright = True
|
||||
# If true, an OpenSearch description file will be output, and all pages will
|
||||
# contain a <link> tag referring to it. The value of this option must be the
|
||||
# base URL from which the finished HTML is served.
|
||||
#html_use_opensearch = ''
|
||||
# html_use_opensearch = ''
|
||||
|
||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||
#html_file_suffix = None
|
||||
# html_file_suffix = None
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'pgadmin4'
|
||||
|
||||
|
||||
# -- Options for LaTeX output --------------------------------------------------
|
||||
# -- Options for LaTeX output -------------------------------------------------
|
||||
|
||||
# The paper size ('letter' or 'a4').
|
||||
#latex_paper_size = 'letter'
|
||||
# latex_paper_size = 'letter'
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#latex_font_size = '10pt'
|
||||
# latex_font_size = '10pt'
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title, author, documentclass [howto/manual]).
|
||||
# (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
|
||||
# the title page.
|
||||
#latex_logo = None
|
||||
# latex_logo = None
|
||||
|
||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||
# not chapters.
|
||||
#latex_use_parts = False
|
||||
# latex_use_parts = False
|
||||
|
||||
# If true, show page references after internal links.
|
||||
#latex_show_pagerefs = False
|
||||
# latex_show_pagerefs = False
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#latex_show_urls = False
|
||||
# latex_show_urls = False
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#latex_preamble = ''
|
||||
# latex_preamble = ''
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#latex_appendices = []
|
||||
# latex_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#latex_domain_indices = True
|
||||
# latex_domain_indices = True
|
||||
|
||||
# Fix the indexing for our docs. See:
|
||||
# https://groups.google.com/forum/#!topic/sphinx-users/ZlQ95_QikXo
|
||||
latex_elements = {
|
||||
'fncychap': r'\usepackage[Sonny]{fncychap}',
|
||||
}
|
||||
|
||||
|
||||
# -- Options for manual page output --------------------------------------------
|
||||
# -- Options for manual page output -------------------------------------------
|
||||
|
||||
# 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)
|
||||
]
|
||||
@@ -0,0 +1,45 @@
|
||||
.. _config_py:
|
||||
|
||||
***************************
|
||||
`The config.py File`:index:
|
||||
***************************
|
||||
|
||||
There are multiple configuration files that are read at startup by pgAdmin. These
|
||||
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
|
||||
in one of the following files.
|
||||
|
||||
* ``config_distro.py``: This file is read after ``config.py`` and is intended for
|
||||
packagers to change any settings that are required for their pgAdmin distribution.
|
||||
This may typically include certain paths and file locations. This file is optional,
|
||||
and may be created by packagers in the same directory as ``config.py`` if
|
||||
needed.
|
||||
|
||||
* ``config_local.py``: This file is read after ``config_distro.py`` and is intended
|
||||
for end users to change any default or packaging specific settings that they may
|
||||
wish to adjust to meet local preferences or standards.This file is optional,
|
||||
and may be created by users in the same directory as ``config.py`` if
|
||||
needed.
|
||||
|
||||
* ``config_system.py``: This file is read after ``config_local.py`` and is
|
||||
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:
|
||||
|
||||
* Linux: ``/etc/pgadmin/config_system.py``
|
||||
* macOS: ``/Library/Preferences/pgadmin/config_system.py``
|
||||
* Windows: ``%CommonProgramFiles%\pgadmin\config_system.py``
|
||||
|
||||
.. 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.
|
||||
|
||||
The default ``config.py`` file is shown below for reference:
|
||||
|
||||
.. literalinclude:: ../../web/config.py
|
||||
:language: python
|
||||
@@ -1,51 +1,76 @@
|
||||
.. _connect_error:
|
||||
|
||||
*************************
|
||||
`Connection error`:index:
|
||||
`Connection Error`:index:
|
||||
*************************
|
||||
|
||||
When connecting to a PostgreSQL server, you may get an error message. If you encounter an error message, please review the message carefully; each error message attempts to incorporate the information you'll need to resolve the problem. For more details about specific errors, please locate the error message in the list below:
|
||||
When connecting to a PostgreSQL server, you may get an error message. If you
|
||||
encounter an error message, please review the message carefully; each error
|
||||
message attempts to incorporate the information you'll need to resolve the
|
||||
problem. For more details about specific errors, please locate the error
|
||||
message in the list below:
|
||||
|
||||
**Connection to the server has been lost**
|
||||
|
||||
.. image:: images/ce_timeout.png
|
||||
:alt: Connection to the server has been lost
|
||||
:align: center
|
||||
|
||||
This error message indicates that the connection attempt has taken longer than the specified threshold; there may be a problem with the connection properties provided on the *Server* dialog, network connectivity issues, or the server may not be running.
|
||||
This error message indicates that the connection attempt has taken longer than
|
||||
the specified threshold; there may be a problem with the connection properties
|
||||
provided on the *Server* dialog, network connectivity issues, or the server may
|
||||
not be running.
|
||||
|
||||
**could not connect to Server: Connection refused**
|
||||
|
||||
.. image:: images/ce_not_running.png
|
||||
:alt: Could not connect to server
|
||||
:align: center
|
||||
|
||||
If pgAdmin displays this message, there are two possible reasons for this:
|
||||
* the database server isn't running - simply start it.
|
||||
* the server isn't configured to accept TCP/IP requests on the address shown.
|
||||
|
||||
For security reasons, a PostgreSQL server "out of the box" doesn't listen on TCP/IP ports. Instead, it must be enabled to listen for TCP/IP requests. This can be done by adding **tcpip = true** to the postgresql.conf file for Versions 7.3.x and 7.4.x, or **listen_addresses='*'** for Version 8.0.x and above; this will make the server accept connections on any IP interface.
|
||||
For security reasons, a PostgreSQL server "out of the box" doesn't listen on
|
||||
TCP/IP ports. Instead, it must be enabled to listen for TCP/IP requests. This
|
||||
can be done by adding **listen_addresses='*'**; this will make the server accept
|
||||
connections on any IP interface.
|
||||
|
||||
For further information, please refer to the PostgreSQL documentation about `runtime configuration <http://www.postgresql.org/docs/current/interactive/runtime-config.html>`_.
|
||||
For further information, please refer to the PostgreSQL documentation about
|
||||
`runtime configuration <https://www.postgresql.org/docs/current/runtime-config.html>`_.
|
||||
|
||||
**FATAL: no pg_hba.conf entry**
|
||||
|
||||
.. image:: images/ce_error_hba.png
|
||||
:alt: No pg_hba.conf entry
|
||||
:align: center
|
||||
|
||||
If pgAdmin displays this message when connecting, your server can be contacted correctly over the network, but is not configured to accept your connection. Your client has not been detected as a legal user for the database.
|
||||
If pgAdmin displays this message when connecting, your server can be contacted
|
||||
correctly over the network, but is not configured to accept your connection.
|
||||
Your client has not been detected as a legal user for the database.
|
||||
|
||||
To connect to a server, the pg_hba.conf file on the database server must be configured to accept connections from the host of the pgAdmin client. Modify the pg_hba.conf file on the database server host, and add an entry in the form:
|
||||
To connect to a server, the pg_hba.conf file on the database server must be
|
||||
configured to accept connections from the host of the pgAdmin client. Modify
|
||||
the pg_hba.conf file on the database server host, and add an entry in the form:
|
||||
|
||||
* **host template1 postgres 192.168.0.0/24 md5** for an IPV4 network
|
||||
* **host template1 postgres ::ffff:192.168.0.0/120 md5** for an IPV6 network
|
||||
|
||||
For more information, please refer to the PostgreSQL documentation about `client authentication <http://www.postgresql.org/docs/current/interactive/client-authentication.html>`_.
|
||||
For more information, please refer to the PostgreSQL documentation about
|
||||
`client authentication <https://www.postgresql.org/docs/current/client-authentication.html>`_.
|
||||
|
||||
**FATAL: password authentication failed**
|
||||
|
||||
.. image:: images/ce_password_failed.png
|
||||
:alt: Password authentication failed
|
||||
:align: center
|
||||
|
||||
* The *password authentication failed for user* error message indicates there may be a problem with the password you entered. Retry the password to confirm you entered it correctly. If the error message returns, make sure that you have the correct password, that you are authorized to access the server, and that the access has been correctly configured in the server's postgresql.conf configuration file.
|
||||
The *password authentication failed for user* error message indicates there
|
||||
may be a problem with the password you entered. Retry the password to confirm
|
||||
you entered it correctly. If the error message returns, make sure that you have
|
||||
the correct password, that you are authorized to access the server, and that
|
||||
the access has been correctly configured in the server's postgresql.conf
|
||||
configuration file.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,31 +1,48 @@
|
||||
.. _connect_to_server:
|
||||
|
||||
**************************
|
||||
`Connect to server`:index:
|
||||
`Connect to Server`:index:
|
||||
**************************
|
||||
|
||||
Use the *Connect to Server* dialog to authenticate with a defined server and access the objects stored on the server through the pgAdmin tree control. To access the dialog, right click on the server name in the *pgAdmin* tree control, and select *Connect Server...* from the context menu.
|
||||
Use the *Connect to Server* dialog to authenticate with a defined server and
|
||||
access the objects stored on the server through the pgAdmin tree control. To
|
||||
access the dialog, right click on the server name in the *pgAdmin* tree control,
|
||||
and select *Connect Server...* from the context menu.
|
||||
|
||||
.. image:: images/connect_to_server.png
|
||||
:alt: Connect to server dialog
|
||||
|
||||
Provide authentication information for the selected server:
|
||||
|
||||
* Use the *Password* field to provide the password of the user that is associated with the defined server.
|
||||
* Check the box next to *Save Password* to instruct the server to save the password for future connections; if you save the password, you will not be prompted when reconnecting to the database server with this server definition.
|
||||
* Use the *Password* field to provide the password of the user that is
|
||||
associated with the defined server.
|
||||
* Check the box next to *Save Password* to instruct the server to save the
|
||||
password for future connections; if you save the password, you will not be
|
||||
prompted when reconnecting to the database server with this server
|
||||
definition.
|
||||
|
||||
In case of SSH Tunneling, *Connect to Server* dialog will prompt for SSH Tunnel and Database server passwords if not already saved.
|
||||
When using SSH Tunneling, the *Connect to Server* dialog will prompt for the SSH
|
||||
Tunnel and Database server passwords if not already saved.
|
||||
|
||||
.. image:: images/connect_to_tunneled_server.png
|
||||
:alt: Connect to server dialog
|
||||
|
||||
Provide authentication information for the selected server:
|
||||
|
||||
* Use the *Password* field to provide the password of the user that is associated with the defined server.
|
||||
* Check the box next to respective *Save Password* to instruct the server to save the password for future connections; if you save the password, you will not be prompted when reconnecting to the database server with this server definition.
|
||||
* Use the *Password* field to provide the password of the user that is
|
||||
associated with the defined server.
|
||||
* Check the box next to respective *Save Password* to instruct the server to
|
||||
save the password for future connections; if you save the password, you will
|
||||
not be prompted when reconnecting to the database server with this server
|
||||
definition.
|
||||
|
||||
The pgAdmin client displays a message in a green status bar in the lower right corner when the server connects successfully.
|
||||
The pgAdmin client displays a message in a green status bar in the lower right
|
||||
corner when the server connects successfully.
|
||||
|
||||
If you receive an error message while attempting a connection, verify that your network is allowing the pgAdmin host and the host of the database server to communicate. For detailed information about a specific error message, please see the :ref:`Connection Error <connect_error>` help page.
|
||||
If you receive an error message while attempting a connection, verify that your
|
||||
network is allowing the pgAdmin host and the host of the database server to
|
||||
communicate. For detailed information about a specific error message, please see
|
||||
the :ref:`Connection Error <connect_error>` help page.
|
||||
|
||||
To review or modify connection details, right-click on the name of the server, and select *Properties...* from the context menu.
|
||||
To review or modify connection details, right-click on the name of the server,
|
||||
and select *Properties...* from the context menu.
|
||||
@@ -1,7 +1,7 @@
|
||||
.. _connecting:
|
||||
|
||||
*******************************
|
||||
`Connecting to a Server`:index:
|
||||
`Connecting To A Server`:index:
|
||||
*******************************
|
||||
|
||||
Before you can use the pgAdmin client to manage the objects that reside on your
|
||||
@@ -11,8 +11,6 @@ the server connections within the tree control for easier management. To open
|
||||
the *Server Group* dialog, right-click on the *Servers* node of the tree
|
||||
control, and select *Server Group* from the *Create* menu.
|
||||
|
||||
Contents:
|
||||
|
||||
.. toctree::
|
||||
|
||||
server_group_dialog
|
||||
@@ -22,18 +20,21 @@ 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.
|
||||
|
||||
Contents:
|
||||
|
||||
.. toctree::
|
||||
|
||||
server_dialog
|
||||
|
||||
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.
|
||||
|
||||
.. toctree::
|
||||
|
||||
master_password
|
||||
|
||||
After defining a server connection, right-click on the server name, and select
|
||||
*Connect to server* to authenticate with the server, and start using pgAdmin to
|
||||
manage objects that reside on the server.
|
||||
|
||||
Contents:
|
||||
|
||||
.. toctree::
|
||||
|
||||
connect_to_server
|
||||
@@ -45,4 +46,4 @@ of pgAdmin.
|
||||
|
||||
.. toctree::
|
||||
|
||||
export_import_servers
|
||||
import_export_servers
|
||||
@@ -1,8 +1,8 @@
|
||||
.. _container_deployment:
|
||||
|
||||
**************************************
|
||||
*****************************
|
||||
`Container Deployment`:index:
|
||||
**************************************
|
||||
*****************************
|
||||
|
||||
pgAdmin can be deployed in a container using the image at:
|
||||
|
||||
@@ -17,11 +17,11 @@ 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.4: /usr/local/pgsql-9.4
|
||||
* 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 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*
|
||||
|
||||
The most recent version of the utilities is used by default; this may be
|
||||
changed in the :ref:`preferences`.
|
||||
@@ -31,19 +31,19 @@ Environment Variables
|
||||
|
||||
The container will accept the following variables at startup:
|
||||
|
||||
*PGADMIN_DEFAULT_EMAIL*
|
||||
**PGADMIN_DEFAULT_EMAIL**
|
||||
|
||||
This is the email address 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*
|
||||
**PGADMIN_DEFAULT_PASSWORD**
|
||||
|
||||
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_ENABLE_TLS*
|
||||
**PGADMIN_ENABLE_TLS**
|
||||
|
||||
Default: <null>
|
||||
*Default: <null>*
|
||||
|
||||
If left un-set, the container will listen on port 80 for connections in plain
|
||||
text. If set to any value, the container will listen on port 443 for TLS
|
||||
@@ -51,63 +51,114 @@ connections.
|
||||
|
||||
When TLS is enabled, a certificate and key must be provided. Typically these
|
||||
should be stored on the host file system and mounted from the container. The
|
||||
expected paths are /certs/server.crt and /certs/server.key
|
||||
expected paths are /certs/server.cert and /certs/server.key
|
||||
|
||||
*PGADMIN_LISTEN_ADDRESS*
|
||||
**PGADMIN_LISTEN_ADDRESS**
|
||||
|
||||
Default: [::]
|
||||
*Default: [::]*
|
||||
|
||||
Specify the local address that the servers listens on. The default should work
|
||||
for most users - in IPv4-only environments, this may need to be set to
|
||||
127.0.0.1.
|
||||
0.0.0.0.
|
||||
|
||||
*PGADMIN_LISTEN_PORT*
|
||||
**PGADMIN_LISTEN_PORT**
|
||||
|
||||
Default: 80 or 443 (if TLS is enabled)
|
||||
*Default: 80 or 443 (if TLS is enabled)*
|
||||
|
||||
Allows the port that the server listens on to be set to a specific value rather
|
||||
than using the default.
|
||||
|
||||
*GUNICORN_THREADS*
|
||||
**PGADMIN_SERVER_JSON_FILE**
|
||||
|
||||
Default: 25
|
||||
*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.
|
||||
|
||||
**GUNICORN_ACCESS_LOGFILE**
|
||||
|
||||
*Default: -* (stdout)
|
||||
|
||||
Specify an output file in which to store the Gunicorn access logs, instead of
|
||||
sending them to stdout.
|
||||
|
||||
**GUNICORN_THREADS**
|
||||
|
||||
*Default: 25*
|
||||
|
||||
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_**
|
||||
|
||||
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
|
||||
variable name from *config.py* and give the value in the format 'string value'
|
||||
for strings, True/False for booleans or 123 for numbers. See below for an
|
||||
example.
|
||||
|
||||
Settings are written to */pgadmin4/config_distro.py* within the container, which
|
||||
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.
|
||||
|
||||
See :ref:`config_py` for more information on the available configuration settings.
|
||||
|
||||
Mapped Files and Directories
|
||||
****************************
|
||||
|
||||
The following files or directories can be mapped from the container onto the
|
||||
host machine to allow configuration to be customised and shared between
|
||||
instances:
|
||||
instances.
|
||||
|
||||
*/var/lib/pgadmin*
|
||||
.. warning:: Warning: pgAdmin runs as the *pgadmin* user (UID: 5050) in the
|
||||
*pgadmin* group (GID: 5050) in the container. You must ensure that all files
|
||||
are readable, and where necessary (e.g. the working/session directory)
|
||||
writeable for this user on the host machine. For example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo chown -R 5050:5050 <host_directory>
|
||||
|
||||
On some filesystems that do not support extended attributes, it may not be
|
||||
possible to run pgAdmin without specifying a value for *PGADMIN_LISTEN_PORT*
|
||||
that is greater than 1024. In such cases, specify an alternate port when
|
||||
launching the container by adding the environment variable, for example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
-e 'PGADMIN_LISTEN_PORT=5050'
|
||||
|
||||
Don't forget to adjust any host-container port mapping accordingly.
|
||||
|
||||
**/var/lib/pgadmin**
|
||||
|
||||
This is the working directory in which pgAdmin stores session data, user files,
|
||||
configuration files, and it's configuration database. Mapping this directory
|
||||
onto the host machine gives you an easy way to maintain configuration between
|
||||
|
||||
invocations of the container.
|
||||
|
||||
*/pgadmin4/config_local.py*
|
||||
**/pgadmin4/config_local.py**
|
||||
|
||||
This file can be used to override configuration settings in pgAdmin. Settings
|
||||
found in config.py can be overridden with deployment specific values if
|
||||
required.
|
||||
required. Settings in config_local.py will also override anything specified in
|
||||
the container environment through *PGADMIN_CONFIG_* prefixed variables.
|
||||
|
||||
*/pgadmin4/servers.json*
|
||||
**/pgadmin4/servers.json**
|
||||
|
||||
If this file is mapped, server definitions found in it will be loaded at launch
|
||||
time. This allows connection information to be pre-loaded into the instance of
|
||||
pgAdmin in the container.
|
||||
pgAdmin in the container. Note that server definitions are only loaded on first
|
||||
launch, i.e. when the configuration database is created, and not on subsequent
|
||||
launches using the same configuration database.
|
||||
|
||||
*/certs/server.cert*
|
||||
**/certs/server.cert**
|
||||
|
||||
If TLS is enabled, this file will be used as the servers TLS certificate.
|
||||
|
||||
*/certs/server.key*
|
||||
**/certs/server.key**
|
||||
|
||||
If TLS is enabled, this file will be used as the key file for the servers TLS
|
||||
certificate.
|
||||
@@ -121,8 +172,21 @@ Run a simple container over port 80:
|
||||
|
||||
docker pull dpage/pgadmin4
|
||||
docker run -p 80:80 \
|
||||
-e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
|
||||
-e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
|
||||
-e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' \
|
||||
-e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' \
|
||||
-d dpage/pgadmin4
|
||||
|
||||
Run a simple container over port 80, setting some configuration options:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
docker pull dpage/pgadmin4
|
||||
docker run -p 80:80 \
|
||||
-e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' \
|
||||
-e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' \
|
||||
-e 'PGADMIN_CONFIG_ENHANCED_COOKIE_PROTECTION=True' \
|
||||
-e 'PGADMIN_CONFIG_LOGIN_BANNER="Authorised users only!"' \
|
||||
-e 'PGADMIN_CONFIG_CONSOLE_LOG_LEVEL=10' \
|
||||
-d dpage/pgadmin4
|
||||
|
||||
Run a TLS secured container using a shared config/storage directory in
|
||||
@@ -133,11 +197,205 @@ Run a TLS secured container using a shared config/storage directory in
|
||||
|
||||
docker pull dpage/pgadmin4
|
||||
docker run -p 443:443 \
|
||||
-v "/private/var/lib/pgadmin:/var/lib/pgadmin" \
|
||||
-v "/path/to/certificate.cert:/certs/server.cert" \
|
||||
-v "/path/to/certificate.key:/certs/server.key" \
|
||||
-v "/tmp/servers.json:/servers.json" \
|
||||
-v /private/var/lib/pgadmin:/var/lib/pgadmin \
|
||||
-v /path/to/certificate.cert:/certs/server.cert \
|
||||
-v /path/to/certificate.key:/certs/server.key \
|
||||
-v /tmp/servers.json:/pgadmin4/servers.json \
|
||||
-e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' \
|
||||
-e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' \
|
||||
-e 'PGADMIN_ENABLE_TLS=True' \
|
||||
-d dpage/pgadmin4
|
||||
|
||||
Reverse Proxying
|
||||
****************
|
||||
|
||||
Sometimes it's desirable to have users connect to pgAdmin through a reverse
|
||||
proxy rather than directly to the container it's running in. The following
|
||||
examples show how this can be achieved. With traditional reverse proxy servers
|
||||
such as `Nginx <https://www.nginx.com/>`_, pgAdmin is running in a container on
|
||||
the same host, with port 5050 on the host mapped to port 80 on the container,
|
||||
for example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
docker pull dpage/pgadmin4
|
||||
docker run -p 5050:80 \
|
||||
-e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
|
||||
-e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
|
||||
-e "PGADMIN_ENABLE_TLS=True" \
|
||||
-d dpage/pgadmin4
|
||||
-d dpage/pgadmin4
|
||||
|
||||
pgAdmin X-Forwarded-* Configuration
|
||||
-----------------------------------
|
||||
|
||||
pgAdmin needs to understand how many proxies set each header so it knows what
|
||||
values to trust. The configuration parameters for the X-Forwarded-* options
|
||||
which are used for this purpose are shown below, along with their default
|
||||
values.
|
||||
|
||||
pgAdmin is configured by default to be able to run behind a reverse proxy even
|
||||
on a non-standard port and these config options don't normally need to be
|
||||
changed. If you're running an unusual configuration (such as multiple reverse
|
||||
proxies) you can adjust the configuration to suit.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# Number of values to trust for X-Forwarded-For
|
||||
PROXY_X_FOR_COUNT = 1
|
||||
|
||||
# Number of values to trust for X-Forwarded-Proto.
|
||||
PROXY_X_PROTO_COUNT = 0
|
||||
|
||||
# Number of values to trust for X-Forwarded-Host.
|
||||
PROXY_X_HOST_COUNT = 0
|
||||
|
||||
# Number of values to trust for X-Forwarded-Port.
|
||||
PROXY_X_PORT_COUNT = 1
|
||||
|
||||
# Number of values to trust for X-Forwarded-Prefix.
|
||||
PROXY_X_PREFIX_COUNT = 0
|
||||
|
||||
HTTP via Nginx
|
||||
--------------
|
||||
|
||||
A configuration similar to the following can be used to create a simple HTTP
|
||||
reverse proxy listening for all hostnames with `Nginx
|
||||
<https://www.nginx.com/>`_:
|
||||
|
||||
.. code-block:: nginx
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
location / {
|
||||
proxy_set_header Host $host;
|
||||
proxy_pass http://localhost:5050/;
|
||||
proxy_redirect off;
|
||||
}
|
||||
}
|
||||
|
||||
If you wish to host pgAdmin under a subdirectory rather than on the root of the
|
||||
server, you must specify the location and set the *X-Script-Name* header which
|
||||
tells the pgAdmin container how to rewrite paths:
|
||||
|
||||
.. code-block:: nginx
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
location /pgadmin4/ {
|
||||
proxy_set_header X-Script-Name /pgadmin4;
|
||||
proxy_set_header Host $host;
|
||||
proxy_pass http://localhost:5050/;
|
||||
proxy_redirect off;
|
||||
}
|
||||
}
|
||||
|
||||
If Nginx is also running in a container, there is no need to map the pgAdmin
|
||||
port to the host, provided the two containers are running in the same Docker
|
||||
network. In such a configuration, the *proxy_pass* option would be changed to
|
||||
point to the pgAdmin container within the Docker network.
|
||||
|
||||
HTTPS via Nginx
|
||||
---------------
|
||||
|
||||
The following configuration can be used to serve pgAdmin over HTTPS to the user
|
||||
whilst the backend container is serving plain HTTP to the proxy server. In this
|
||||
configuration we not only set *X-Script-Name*, but also *X-Scheme* to tell the
|
||||
pgAdmin server to generate any URLs using the correct scheme. A redirect from
|
||||
HTTP to HTTPS is also included. The certificate and key paths may need to be
|
||||
adjusted as appropriate to the specific deployment:
|
||||
|
||||
.. code-block:: nginx
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443;
|
||||
server_name _;
|
||||
|
||||
ssl_certificate /etc/nginx/server.cert;
|
||||
ssl_certificate_key /etc/nginx/server.key;
|
||||
|
||||
ssl on;
|
||||
ssl_session_cache builtin:1000 shared:SSL:10m;
|
||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
|
||||
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
|
||||
ssl_prefer_server_ciphers on;
|
||||
|
||||
location /pgadmin4/ {
|
||||
proxy_set_header X-Script-Name /pgadmin4;
|
||||
proxy_set_header X-Scheme $scheme;
|
||||
proxy_set_header Host $host;
|
||||
proxy_pass http://localhost:5050/;
|
||||
proxy_redirect off;
|
||||
}
|
||||
}
|
||||
|
||||
Traefik
|
||||
-------
|
||||
|
||||
Configuring `Traefik <https://traefik.io/>`_ is straightforward for either HTTP
|
||||
or HTTPS when running pgAdmin in a container as it will automatically configure
|
||||
itself to serve content from containers that are running on the local machine,
|
||||
virtual hosting them at *<container_name>.<domain_name>*, where the domain
|
||||
name is that specified in the Traefik configuration. 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" \
|
||||
-d dpage/pgadmin4
|
||||
|
||||
Note that the TCP/IP port has not been mapped to the host as it was in the
|
||||
Nginx example, and the container name has been set to a known value as it will
|
||||
be used as the hostname and may need to be added to the DNS zone file.
|
||||
|
||||
The following configuration will listen on ports 80 and 443, redirecting 80 to
|
||||
443, using the default certificate shipped with Traefik. See the Traefik
|
||||
documentation for options to use certificates from LetsEncrypt or other issuers.
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
defaultEntryPoints = ["http", "https"]
|
||||
|
||||
[entryPoints]
|
||||
[entryPoints.http]
|
||||
address = ":80"
|
||||
[entryPoints.http.redirect]
|
||||
entryPoint = "https"
|
||||
[entryPoints.https]
|
||||
address = ":443"
|
||||
[entryPoints.https.tls]
|
||||
|
||||
[docker]
|
||||
domain = "domain_name"
|
||||
watch = true
|
||||
|
||||
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:
|
||||
|
||||
.. 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.rule=PathPrefix:/pgadmin4" \
|
||||
-d dpage/pgadmin4
|
||||
|
||||
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.
|
||||
@@ -4,11 +4,14 @@
|
||||
`pgAdmin Project Contributions`:index:
|
||||
**************************************
|
||||
|
||||
pgAdmin is an open-source project that invites you to get involved in the development process. For more information about contributing to the pgAdmin project, contact the developers on the pgAdmin mailing list pgadmin-hackers@postgresql.org to discuss any ideas you might have for enhancements or bug fixes.
|
||||
pgAdmin is an open-source project that invites you to get involved in the
|
||||
development process. For more information about contributing to the pgAdmin
|
||||
project, contact the developers on the pgAdmin mailing list
|
||||
pgadmin-hackers@postgresql.org to discuss any ideas you might have for
|
||||
enhancements or bug fixes.
|
||||
|
||||
In the sections listed below, you'll find detailed information about the development process used to develop, improve, and maintain the pgAdmin client.
|
||||
|
||||
Contents:
|
||||
In the following sections, you'll find detailed information about the
|
||||
development process used to develop, improve, and maintain the pgAdmin client.
|
||||
|
||||
.. toctree::
|
||||
|
||||
|
||||
@@ -4,83 +4,132 @@
|
||||
`Database Dialog`:index:
|
||||
************************
|
||||
|
||||
Use the *Database* dialog to define or modify a database. To create a database, you must be a database superuser or have the CREATE privilege.
|
||||
Use the *Database* dialog to define or modify a database. To create a database,
|
||||
you must be a database superuser or have the CREATE privilege.
|
||||
|
||||
The *Database* dialog organizes the development of a database through the following dialog tabs: *General*, *Definition*, *Security*, and *Parameters*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *Database* dialog organizes the development of a database through the
|
||||
following dialog tabs: *General*, *Definition*, *Security*, and *Parameters*.
|
||||
The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/database_general.png
|
||||
:alt: Database dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify the database:
|
||||
|
||||
* Use the *Database* field to add a descriptive name for the database. The name will be displayed in the *pgAdmin* tree control.
|
||||
* Select the owner of the database from the drop-down listbox in the *Owner* field.
|
||||
* Use the *Database* field to add a descriptive name for the database. The name
|
||||
will be displayed in the *pgAdmin* tree control.
|
||||
* Select the owner of the database from the drop-down listbox in the *Owner*
|
||||
field.
|
||||
* Store notes about the database in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/database_definition.png
|
||||
:alt: Database dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the *Definition* tab to set properties for the database:
|
||||
|
||||
* Select a character set from the drop-down listbox in the *Encoding* field. The default is *UTF8*.
|
||||
* Select a template from the drop-down listbox in the *Template* field. If you do not specify a template, the database will use template1.
|
||||
* Select a tablespace from the drop-down listbox in the *Tablespace* field. The selected tablespace will be the default tablespace used to contain database objects.
|
||||
* Select a character set from the drop-down listbox in the *Encoding* field.
|
||||
The default is *UTF8*.
|
||||
* Select a template from the drop-down listbox in the *Template* field. If you
|
||||
do not specify a template, the database will use template1.
|
||||
* Select a tablespace from the drop-down listbox in the *Tablespace* field. The
|
||||
selected tablespace will be the default tablespace used to contain database
|
||||
objects.
|
||||
* Select the collation order from the drop-down listbox in the *Collation* field.
|
||||
* Select the character classification from the drop-down listbox in the *Character Type* field. This affects the categorization of characters, e.g. lower, upper and digit. The default, or a blank field, uses the character classification of the template 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.
|
||||
* Select the character classification from the drop-down listbox in the
|
||||
*Character Type* field. This affects the categorization of characters, e.g.
|
||||
lower, upper and digit. The default, or a blank field, uses the character
|
||||
classification of the template 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.
|
||||
|
||||
Click the *Security* tab to continue.
|
||||
|
||||
.. image:: images/database_security.png
|
||||
:alt: Database dialog security tab
|
||||
:align: center
|
||||
|
||||
Use the *Security* tab to assign privileges and define security labels.
|
||||
|
||||
Use the *Privileges* panel to assign privileges to a role. Click the *Add* icon (+) to set privileges for database objects:
|
||||
Use the *Privileges* panel to assign privileges to a role. Click the *Add* icon
|
||||
(+) to set privileges for database objects:
|
||||
|
||||
* Select the name of the role from the drop-down listbox in the *Grantee* field.
|
||||
* Click inside the *Privileges* field. Check the boxes to the left of one or more privileges to grant the selected privilege to the specified user.
|
||||
* Select the name of the role from the drop-down listbox in the *Grantor* field. The default grantor is the owner of the database.
|
||||
* Click inside the *Privileges* field. Check the boxes to the left of one or
|
||||
more privileges to grant the selected privilege to the specified user.
|
||||
* The current user, who is the default grantor for granting the privilege, is displayed in the *Grantor* field.
|
||||
|
||||
Click add to set additional privileges; to discard a privilege, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click add to set additional privileges; to discard a privilege, click the trash
|
||||
icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
|
||||
Use the *Security Labels* panel to define security labels applied to the database. Click the *Add* icon (+) to add each security label selection:
|
||||
Use the *Security Labels* panel to define security labels applied to the
|
||||
database. Click the *Add* icon (+) to add each security label selection:
|
||||
|
||||
* Specify a security label provider in the *Provider* field. The named provider must be loaded and must consent to the proposed labeling operation.
|
||||
* Specify a a security label in the *Security Label* field. The meaning of a given label is at the discretion of the label provider. PostgreSQL places no restrictions on whether or how a label provider must interpret security labels; it merely provides a mechanism for storing them.
|
||||
* Specify a security label provider in the *Provider* field. The named provider
|
||||
must be loaded and must consent to the proposed labeling operation.
|
||||
* Specify a a security label in the *Security Label* field. The meaning of a
|
||||
given label is at the discretion of the label provider. PostgreSQL places no
|
||||
restrictions on whether or how a label provider must interpret security
|
||||
labels; it merely provides a mechanism for storing them.
|
||||
|
||||
To discard a security label, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
To discard a security label, click the trash icon to the left of the row and
|
||||
confirm deletion in the *Delete Row* popup.
|
||||
|
||||
Click the *Parameters* tab to continue.
|
||||
|
||||
.. image:: images/database_parameters.png
|
||||
:alt: Database dialog parameters tab
|
||||
:align: center
|
||||
|
||||
Use the *Parameters* tab to set parameters for the database. Click the *Add* icon (+) to add each parameter:
|
||||
Use the *Parameters* tab to set parameters for the database. Click the *Add*
|
||||
icon (+) to add each parameter:
|
||||
|
||||
* Use the drop-down listbox in the *Name* field to select a parameter.
|
||||
* Use the *Value* field to set a value for the parameter.
|
||||
* Use the drop-down listbox next to *Role* to select a role to which the parameter setting specified will apply.
|
||||
* Use the drop-down listbox next to *Role* to select a role to which the
|
||||
parameter setting specified will apply.
|
||||
|
||||
Follow these steps to add additional parameter value definitions; to discard a parameter, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Follow these steps to add additional parameter value definitions; to discard a
|
||||
parameter, click the trash icon to the left of the row and confirm deletion in
|
||||
the *Delete Row* popup.
|
||||
|
||||
Click the *Advanced* tab to continue.
|
||||
|
||||
.. image:: images/database_advanced.png
|
||||
:alt: Database dialog advanced tab
|
||||
:align: center
|
||||
|
||||
Use the *Advanced* tab to set advanced parameters for the database.
|
||||
|
||||
* Use *Schema restriction* field to provide a SQL restriction that will be used
|
||||
against the pg_namespace table to limit the schemas that you see.
|
||||
For example, you might enter: *public* so that only *public* are shown in
|
||||
the pgAdmin browser.Separate entries with a comma or tab as you type.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Database* dialog generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *Database* dialog generate a SQL command (see an example
|
||||
below). Use the *SQL* tab for review; revisit or switch tabs to make any changes
|
||||
to the SQL command.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *Database* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Database* dialog:
|
||||
|
||||
.. image:: images/database_sql.png
|
||||
:alt: Database dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example creates a database named *hr* that is owned by *postgres*. It allows unlimited connections, and is available to all authenticated users.
|
||||
The example creates a database named *hr* that is owned by *postgres*. It
|
||||
allows unlimited connections, and is available to all authenticated users.
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
|
||||
@@ -1,38 +1,63 @@
|
||||
.. _debugger:
|
||||
|
||||
*************************
|
||||
`pgAdmin Debugger`:index:
|
||||
*************************
|
||||
*****************
|
||||
`Debugger`:index:
|
||||
*****************
|
||||
|
||||
.. image:: images/debug_main.png
|
||||
:alt: Debugger page
|
||||
:align: center
|
||||
|
||||
The debugger may be used to debug PL/pgSQL functions in PostgreSQL, as well as EDB-SPL functions, stored procedures and packages in Advanced Server. The Debugger is available as an extension for your PostgreSQL installation, and is distributed as part of Advanced Server. You must have superuser privileges to use the debugger.
|
||||
The debugger may be used to debug PL/pgSQL functions in PostgreSQL, as well as
|
||||
EDB-SPL functions, stored procedures and packages in EDB Postgres Advanced
|
||||
Server. The Debugger is available as an extension for your PostgreSQL
|
||||
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 *shared_preload_libraries* parameter:
|
||||
Before using the debugger, you must modify the *postgresql.conf* file, adding
|
||||
the server-side debugger components to the the value of the
|
||||
*shared_preload_libraries* parameter, for example:
|
||||
|
||||
shared_preload_libraries = '$libdir/*other_libraries*/plugin_debugger'
|
||||
shared_preload_libraries = '$libdir/plugin_debugger'
|
||||
|
||||
After modifying the *shared_preload_libraries* parameter, restart the server to apply the changes.
|
||||
After modifying the *shared_preload_libraries* parameter, restart the server to
|
||||
apply the changes.
|
||||
|
||||
The debugger may be used for either in-context debugging or direct debugging of a target function or procedure. When you use the debugger for in-context debugging, you set a breakpoint at the first line of a program; when a session invokes the target, control is transferred to the debugger. When using direct debugging, the debugger prompts you for any parameters required by the target, and then allows you to step through the code.
|
||||
The debugger may be used for either in-context debugging or direct debugging of
|
||||
a target function or procedure. When you use the debugger for in-context
|
||||
debugging, you set a breakpoint at the first line of a program; when a session
|
||||
invokes the target, control is transferred to the debugger. When using direct
|
||||
debugging, the debugger prompts you for any parameters required by the target,
|
||||
and then allows you to step through the code.
|
||||
|
||||
**In-context Debugging**
|
||||
In-context Debugging
|
||||
********************
|
||||
|
||||
To set a breakpoint at the first line of a program, right-click the name of the object you would like to debug, and select *Set breakpoint* from the *Debugging* sub-menu. The debugger window will open, waiting for another session to invoke the program.
|
||||
To set a breakpoint at the first line of a program, right-click the name of the
|
||||
object you would like to debug, and select *Set breakpoint* from the *Debugging*
|
||||
sub-menu. The debugger window will open, waiting for another session to invoke
|
||||
the program.
|
||||
|
||||
.. image:: images/debug_set_breakpoint.png
|
||||
:alt: Debugger set a breakpoint demo
|
||||
:align: center
|
||||
|
||||
When another session invokes the target, the debugger will display the code, allowing you to add break points, or step through line-by-line. The other session is suspended until the debugging completes; then control is returned to the session.
|
||||
When another session invokes the target, the debugger will display the code,
|
||||
allowing you to add break points, or step through line-by-line. The other
|
||||
session is suspended until the debugging completes; then control is returned
|
||||
to the session.
|
||||
|
||||
.. image:: images/debug_ic_step_in.png
|
||||
:alt: Debugger step-in demo
|
||||
:align: center
|
||||
|
||||
Direct Debugging
|
||||
****************
|
||||
|
||||
**Direct Debugging**
|
||||
|
||||
To use the debugger for direct debugging, right click on the name of the object that you wish to debug in the pgAdmin tree control and select *Debug* from the *Debugging* sub-menu. The debugger window will open, prompting you for any values required by the program:
|
||||
To use the debugger for direct debugging, right click on the name of the object
|
||||
that you wish to debug in the pgAdmin tree control and select *Debug* from the
|
||||
*Debugging* sub-menu. The debugger window will open, prompting you for any
|
||||
values required by the program:
|
||||
|
||||
.. image:: images/debug_params.png
|
||||
:alt: Debugger parameter dialog
|
||||
@@ -43,22 +68,37 @@ Use the fields on the *Debugger* dialog to provide a value for each parameter:
|
||||
* The *Type* field contains the parameter data type.
|
||||
* Check the *Null?* checkbox to indicate that the parameter is a NULL value.
|
||||
* Check the *Expression?* checkbox if the Value field contains an expression.
|
||||
* Use the *Value* field to provide the parameter value that will be passed to the program. When entering parameter values, type the value into the appropriate cell on the grid, or, leave the cell empty to represent NULL, enter '' (two single quotes) to represent an empty string, or to enter a literal string consisting of just two single quotes, enter \'\'. PostgreSQL 8.4 and above supports variadic function parameters. These may be entered as a comma-delimited list of values, quoted and/or cast as required.
|
||||
* Check the *Use default?* checkbox to indicate that the program should use the value in the Default Value field.
|
||||
* Use the *Value* field to provide the parameter value that will be passed to
|
||||
the program. When entering parameter values, type the value into the
|
||||
appropriate cell on the grid, or, leave the cell empty to represent NULL,
|
||||
enter '' (two single quotes) to represent an empty string, or to enter a
|
||||
literal string consisting of just two single quotes, enter \'\'. PostgreSQL
|
||||
8.4 and above supports variadic function parameters. These may be entered as
|
||||
a comma-delimited list of values, quoted and/or cast as required.
|
||||
* Check the *Use default?* checkbox to indicate that the program should use
|
||||
the value in the Default Value field.
|
||||
* The *Default Value* field contains the default value of the parameter.
|
||||
|
||||
Provide values required by the program, and click the *Debug* button to start stepping through the program.
|
||||
Provide values required by the program, and click the *Debug* button to start
|
||||
stepping through the program.
|
||||
The values of the arguments provided here are saved. The values will be pre-filled
|
||||
next time the dialog opens. To clear the values, use the *Clear All* button.
|
||||
|
||||
.. image:: images/debug_step_in.png
|
||||
:alt: Debugger step-in demo
|
||||
:align: center
|
||||
|
||||
Using the Debugger
|
||||
******************
|
||||
|
||||
**Using the Debugger**
|
||||
|
||||
The main debugger window consists of two panels and a context-sensitive toolbar. Use toolbar icons to manage breakpoints and step into or through code; hover over an icon for a tooltip that identifies the option associated with the icon. The toolbar options are:
|
||||
The main debugger window consists of two panels and a context-sensitive toolbar.
|
||||
Use toolbar icons to manage breakpoints and step into or through code; hover
|
||||
over an icon for a tooltip that identifies the option associated with the icon.
|
||||
The toolbar options are:
|
||||
|
||||
.. image:: images/debug_toolbar.png
|
||||
:alt: Debugger navigation toolbar
|
||||
:align: center
|
||||
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+
|
||||
| Option | Action |
|
||||
@@ -78,33 +118,47 @@ The main debugger window consists of two panels and a context-sensitive toolbar.
|
||||
| *Stop* | Click the *Stop* icon to halt the execution of a program. |
|
||||
+-------------------------+-----------------------------------------------------------------------------------------------------------+
|
||||
|
||||
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 the top panel is the line that is about to execute.
|
||||
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
|
||||
the top panel is the line that is about to execute.
|
||||
|
||||
.. image:: images/debug_main.png
|
||||
:alt: Debugger main window
|
||||
:align: center
|
||||
|
||||
The lower panel of the debugger window provides a set of tabs that allow you to review information about the program:
|
||||
The lower panel of the debugger window provides a set of tabs that allow you to
|
||||
review information about the program:
|
||||
|
||||
* The *Parameters* tab displays the value of each parameter.
|
||||
* The *Local* variables tab displays the current value of the program variables.
|
||||
* The *Messages* tab displays any messages returned by the server (errors, warnings and informational messages).
|
||||
* The *Messages* tab displays any messages returned by the server (errors,
|
||||
warnings and informational messages).
|
||||
* The *Results* tab displays the server message when the program completes.
|
||||
* The *Stack* tab displays the list of functions that have been invoked, but which have not yet completed.
|
||||
* The *Stack* tab displays the list of functions that have been invoked, but
|
||||
which have not yet completed.
|
||||
|
||||
As you step through a program, the *Local variables* tab displays the current value of each variable:
|
||||
As you step through a program, the *Local variables* tab displays the current
|
||||
value of each variable:
|
||||
|
||||
.. image:: images/debug_variables.png
|
||||
:alt: Debugger local variables tab
|
||||
:align: center
|
||||
|
||||
When you step into a subroutine, the *Stack* tab displays the call stack, including the name of each caller, the parameter values for each caller (if any), and the line number within each caller:
|
||||
When you step into a subroutine, the *Stack* tab displays the call stack,
|
||||
including the name of each caller, the parameter values for each caller (if
|
||||
any), and the line number within each caller:
|
||||
|
||||
.. image:: images/debug_stack.png
|
||||
:alt: Debugger local stack tab
|
||||
:align: center
|
||||
|
||||
Select a caller to change focus to that stack frame and display the state of the caller in the upper panel.
|
||||
Select a caller to change focus to that stack frame and display the state of
|
||||
the caller in the upper panel.
|
||||
|
||||
When the program completes, the *Results* tab displays the message returned by the server. If the program encounters an error, the *Messages* tab displays details:
|
||||
When the program completes, the *Results* tab displays the message returned by
|
||||
the server. If the program encounters an error, the *Messages* tab displays
|
||||
details:
|
||||
|
||||
.. image:: images/debug_error_message.png
|
||||
:alt: Debugger error message
|
||||
|
||||
:align: center
|
||||
@@ -1,8 +1,8 @@
|
||||
.. _deployment:
|
||||
|
||||
***************************
|
||||
`pgAdmin Deployment`:index:
|
||||
***************************
|
||||
*******************
|
||||
`Deployment`:index:
|
||||
*******************
|
||||
|
||||
Pre-compiled and configured installation packages for pgAdmin 4 are available
|
||||
for a number of desktop environments; we recommend using an installer whenever
|
||||
@@ -10,11 +10,10 @@ possible. If you are interested in learning more about the project, or if a
|
||||
pgAdmin installer is not available for your environment, the pages listed below
|
||||
will provide detailed information about creating a custom deployment.
|
||||
|
||||
Contents:
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
|
||||
config_py
|
||||
desktop_deployment
|
||||
server_deployment
|
||||
container_deployment
|
||||
container_deployment
|
||||
@@ -36,28 +36,10 @@ this is overridden by the desktop runtime at startup. In most environments, no
|
||||
Python configuration is required unless you wish to override other default
|
||||
settings.
|
||||
|
||||
There are multiple configuration files that are read at startup by pgAdmin. These
|
||||
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
|
||||
in one of the following files.
|
||||
|
||||
* ``config_distro.py``: This file is read after ``config.py`` and is intended for
|
||||
packagers to change any settings that are required for their pgAdmin distribution.
|
||||
This may typically include certain paths and file locations.
|
||||
|
||||
* ``config_local.py``: This file is read after ``config_distro.py`` and is intended
|
||||
for end users to change any default or packaging specific settings that they may
|
||||
wish to adjust to meet local preferences or standards.
|
||||
|
||||
.. note:: If the SERVER_MODE setting is changed in ``config_distro.py`` or ``config_local.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.
|
||||
See :ref:`config_py` for more information on configuration settings.
|
||||
|
||||
Runtime
|
||||
-------
|
||||
*******
|
||||
|
||||
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
|
||||
@@ -76,15 +58,25 @@ and the registry on Windows (HKEY_CURRENT_USER\\Software\\pgadmin\\pgadmin4).
|
||||
|
||||
The configuration settings:
|
||||
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| 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. |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| PythonPath | String | The Python module search path |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
.. 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 |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
|
||||
@@ -4,12 +4,14 @@
|
||||
`Developer Tools`:index:
|
||||
************************
|
||||
|
||||
The pgAdmin *Tools* menu displays a list of powerful developer tools that you can use to execute and analyze complex SQL commands, manage data, and debug PL/SQL code.
|
||||
|
||||
Contents:
|
||||
The pgAdmin *Tools* menu displays a list of powerful developer tools that you
|
||||
can use to execute and analyze complex SQL commands, manage data, and debug
|
||||
PL/SQL code.
|
||||
|
||||
.. toctree::
|
||||
|
||||
:maxdepth: 2
|
||||
|
||||
debugger
|
||||
query_tool
|
||||
editgrid
|
||||
schema_diff
|
||||
@@ -4,42 +4,64 @@
|
||||
`Domain Constraints Dialog`:index:
|
||||
**********************************
|
||||
|
||||
Use the *Domain Constraints* dialog to create or modify a domain constraint. A domain constraint confirms that the values provided for a domain meet a defined criteria. The *Domain Constraints* dialog implements options of the ALTER DOMAIN command.
|
||||
Use the *Domain Constraints* dialog to create or modify a domain constraint. A
|
||||
domain constraint confirms that the values provided for a domain meet a defined
|
||||
criteria. The *Domain Constraints* dialog implements options of the ALTER DOMAIN
|
||||
command.
|
||||
|
||||
The *Domain Constraints* dialog organizes the development of a domain constraint through the following dialog tabs: *General* and *Definition*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *Domain Constraints* dialog organizes the development of a domain constraint
|
||||
through the following dialog tabs: *General* and *Definition*. The *SQL* tab
|
||||
displays the SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/domain_constraint_general.png
|
||||
:alt: Domain constraint dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify the domain constraint:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the constraint. The name will be displayed in the *pgAdmin* tree control.
|
||||
* Use the *Name* field to add a descriptive name for the constraint. The name
|
||||
will be displayed in the *pgAdmin* tree control.
|
||||
* Store notes about the constraint in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/domain_constraint_definition.png
|
||||
:alt: Domain constraint dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to define the domain constraint:
|
||||
|
||||
* Use the *Check* field to provide a CHECK expression. A CHECK expression specifies a constraint that the domain must satisfy. A constraint must produce a Boolean result; include the key word VALUE to refer to the value being tested. Only those expressions that evaluate to TRUE or UNKNOWN will succeed. A CHECK expression cannot contain subqueries or refer to variables other than VALUE. If a domain has multiple CHECK constraints, they will be tested in alphabetical order.
|
||||
* Move the *Validate?* switch to the *No* position to mark the constraint NOT VALID. If the constraint is marked NOT VALID, the constraint will not be applied to existing column data. The default value is *Yes*.
|
||||
* Use the *Check* field to provide a CHECK expression. A CHECK expression
|
||||
specifies a constraint that the domain must satisfy. A constraint must produce
|
||||
a Boolean result; include the key word VALUE to refer to the value being
|
||||
tested. Only those expressions that evaluate to TRUE or UNKNOWN will succeed.
|
||||
A CHECK expression cannot contain subqueries or refer to variables other than
|
||||
VALUE. If a domain has multiple CHECK constraints, they will be tested in
|
||||
alphabetical order.
|
||||
* Move the *Validate?* switch to the *No* position to mark the constraint NOT
|
||||
VALID. If the constraint is marked NOT VALID, the constraint will not be
|
||||
applied to existing column data. The default value is *Yes*.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Domain Constraints* dialog generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *Domain Constraints* dialog generate a SQL command (see an
|
||||
example below). Use the *SQL* tab for review; revisit or switch tabs to make any
|
||||
changes to the SQL command.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *Domain Constraints* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Domain Constraints* dialog:
|
||||
|
||||
.. image:: images/domain_constraint_sql.png
|
||||
:alt: Domain constraint dialog general tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a domain constraint on the domain *timesheets* named *weekday*. It constrains a value to equal *Friday*.
|
||||
The example shown demonstrates creating a domain constraint on the domain
|
||||
*timesheets* named *weekday*. It constrains a value to equal *Friday*.
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
|
||||
@@ -4,75 +4,120 @@
|
||||
`Domain Dialog`:index:
|
||||
**********************
|
||||
|
||||
Use the *Domain* dialog to define a domain. A domain is a data type definition that may constrain permissible values. Domains are useful when you are creating multiple tables that contain comparable columns; you can create a domain that defines constraints that are common to the columns and re-use the domain definition when creating the columns, rather than individually defining each set of constraints.
|
||||
Use the *Domain* dialog to define a domain. A domain is a data type definition
|
||||
that may constrain permissible values. Domains are useful when you are creating
|
||||
multiple tables that contain comparable columns; you can create a domain that
|
||||
defines constraints that are common to the columns and re-use the domain
|
||||
definition when creating the columns, rather than individually defining each
|
||||
set of constraints.
|
||||
|
||||
The *Domain* dialog organizes the development of a domain through the following tabs: *General*, *Definition*, *Constraints*, and *Security*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *Domain* dialog organizes the development of a domain through the following
|
||||
tabs: *General*, *Definition*, *Constraints*, and *Security*. The *SQL* tab
|
||||
displays the SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/domain_general.png
|
||||
:alt: Domain dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields on the *General* tab to identify a domain:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the domain. The name will be displayed in the *pgAdmin* tree control.
|
||||
* Use the drop-down listbox next to *Owner* to select a role that will own the domain.
|
||||
* Select the name of the schema in which the domain will reside from the drop-down listbox in the *Schema* field.
|
||||
* Use the *Name* field to add a descriptive name for the domain. The name will
|
||||
be displayed in the *pgAdmin* tree control.
|
||||
* Use the drop-down listbox next to *Owner* to select a role that will own the
|
||||
domain.
|
||||
* Select the name of the schema in which the domain will reside from the
|
||||
drop-down listbox in the *Schema* field.
|
||||
* Store notes about the domain in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/domain_definition.png
|
||||
:alt: Domain dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to describe the domain:
|
||||
|
||||
* Use the drop-down listbox next to *Base type* to specify a data type.
|
||||
* Use the context-sensitive *Length* field to specify a numeric length for a numeric type.
|
||||
* Use the context-sensitive *Precision* field to specify the total count of significant digits for a numeric type.
|
||||
* Specify a default value for the domain data type in the *Default* field. The data type of the default expression must match the data type of the domain. If no default value is specified, then the default value is the null value.
|
||||
* Move the *Not Null* switch to specify the values of this domain are prevented from being null.
|
||||
* Use the drop-down listbox next to *Collation* to apply a collation cast. If no collation is specified, the underlying data type's default collation is used. The underlying type must be collatable if COLLATE is specified.
|
||||
* Use the context-sensitive *Length* field to specify a numeric length for a
|
||||
numeric type.
|
||||
* Use the context-sensitive *Precision* field to specify the total count of
|
||||
significant digits for a numeric type.
|
||||
* Specify a default value for the domain data type in the *Default* field. The
|
||||
data type of the default expression must match the data type of the domain. If
|
||||
no default value is specified, then the default value is the null value.
|
||||
* Move the *Not Null* switch to specify the values of this domain are prevented
|
||||
from being null.
|
||||
* Use the drop-down listbox next to *Collation* to apply a collation cast. If
|
||||
no collation is specified, the underlying data type's default collation is
|
||||
used. The underlying type must be collatable if COLLATE is specified.
|
||||
|
||||
Click the *Constraints* tab to continue.
|
||||
|
||||
.. image:: images/domain_constraints.png
|
||||
:alt: Domain dialog constraints tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Constraints* tab to specify rules for the domain. Click the *Add* icon (+) to set constraints:
|
||||
Use the fields in the *Constraints* tab to specify rules for the domain. Click
|
||||
the *Add* icon (+) to set constraints:
|
||||
|
||||
* Use the *Name* field to specify a name for the constraint.
|
||||
* Use the *Check* field to provide an expression for the constraint.
|
||||
* Use the *Validate* checkbox to determine whether the constraint will be validated. The default checkbox is checked and sets a validation requirement.
|
||||
* Use the *Validate* checkbox to determine whether the constraint will be
|
||||
validated. The default checkbox is checked and sets a validation requirement.
|
||||
|
||||
A CHECK clause specifies an integrity test which values of the domain must satisfy. Each constraint must be an expression that produces a Boolean result. Use the key word VALUE to refer to the value being tested. Expressions evaluating to TRUE or UNKNOWN succeed. If the expression produces a FALSE result, an error is reported and the value is not allowed to be converted to the domain type. A CHECK expression cannot contain subqueries nor refer to variables other than VALUE. If a domain has multiple CHECK constraints, they will be tested in alphabetical order by name.
|
||||
A CHECK clause specifies an integrity test which values of the domain must
|
||||
satisfy. Each constraint must be an expression that produces a Boolean result.
|
||||
Use the key word VALUE to refer to the value being tested. Expressions
|
||||
evaluating to TRUE or UNKNOWN succeed. If the expression produces a FALSE
|
||||
result, an error is reported and the value is not allowed to be converted to
|
||||
the domain type. A CHECK expression cannot contain subqueries nor refer to
|
||||
variables other than VALUE. If a domain has multiple CHECK constraints, they
|
||||
will be tested in alphabetical order by name.
|
||||
|
||||
Click the *Add* icon (+) to set additional constraints; to discard a constraint, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click the *Add* icon (+) to set additional constraints; to discard a constraint,
|
||||
click the trash icon to the left of the row and confirm deletion in the *Delete
|
||||
Row* popup.
|
||||
|
||||
Click the *Security* tab to continue.
|
||||
|
||||
.. image:: images/domain_security.png
|
||||
:alt: Domain dialog security tab
|
||||
:align: center
|
||||
|
||||
Use the *Security Labels* panel to assign security labels. Click the *Add* icon (+) to add a label:
|
||||
Use the *Security Labels* panel to assign security labels. Click the *Add* icon
|
||||
(+) to add a label:
|
||||
|
||||
* Specify a security label provider in the *Provider* field. The named provider must be loaded and must consent to the proposed labeling operation.
|
||||
* Specify a a security label in the *Security Label* field. The meaning of a given label is at the discretion of the label provider. PostgreSQL places no restrictions on whether or how a label provider must interpret security labels; it merely provides a mechanism for storing them.
|
||||
* Specify a security label provider in the *Provider* field. The named provider
|
||||
must be loaded and must consent to the proposed labeling operation.
|
||||
* Specify a a security label in the *Security Label* field. The meaning of a
|
||||
given label is at the discretion of the label provider. PostgreSQL places no
|
||||
restrictions on whether or how a label provider must interpret security
|
||||
labels; it merely provides a mechanism for storing them.
|
||||
|
||||
Click the *Add* icon (+) to specify each additional label; to discard a label, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click the *Add* icon (+) to specify each additional label; to discard a label,
|
||||
click the trash icon to the left of the row and confirm deletion in the *Delete
|
||||
Row* popup.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Domain* dialog generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *Domain* dialog generate a SQL command (see an example
|
||||
below). Use the *SQL* tab for review; revisit or switch tabs to make any changes
|
||||
to the SQL command.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by selections made in the *Domain* dialog:
|
||||
The following is an example of the sql command generated by selections made in
|
||||
the *Domain* dialog:
|
||||
|
||||
.. image:: images/domain_sql.png
|
||||
: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 *minimum-wage* that
|
||||
confirms that the value entered is greater than or equal to *7.25*.
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
|
||||
@@ -1,130 +1,126 @@
|
||||
.. _editgrid:
|
||||
|
||||
|
||||
***********************************
|
||||
`Reviewing and Editing Data`:index:
|
||||
***********************************
|
||||
***********************
|
||||
`View/Edit Data`:index:
|
||||
***********************
|
||||
|
||||
To review 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 *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.
|
||||
|
||||
.. image:: images/editgrid.png
|
||||
:alt: Edit grid window
|
||||
:align: center
|
||||
|
||||
To modify the content of a table, each row in the table must be uniquely identifiable. If the table definition does not include an OID or a primary key, the displayed data is read only. Note that views cannot be edited; updatable views (using rules) are not supported.
|
||||
To modify the content of a table, each row in the table must be uniquely
|
||||
identifiable. If the table definition does not include an OID or a primary key,
|
||||
the displayed data is read only. Note that views cannot be edited; updatable
|
||||
views (using rules) are not supported.
|
||||
|
||||
The editor features a toolbar that allows quick access to frequently used options, and a work environment divided into two panels:
|
||||
The editor features a toolbar that allows quick access to frequently used
|
||||
options, and a work environment divided into two panels:
|
||||
|
||||
* The upper panel displays the SQL command that was used to select the content displayed in the lower panel.
|
||||
* The lower panel (the Data Grid) displays the data selected from the table or view.
|
||||
* The upper panel displays the SQL command that was used to select the content
|
||||
displayed in the lower panel.
|
||||
* The lower panel (the Data Grid) displays the data selected from the table or
|
||||
view.
|
||||
|
||||
**The View/Edit Data Toolbar**
|
||||
The View/Edit Data Toolbar
|
||||
**************************
|
||||
|
||||
The toolbar includes context-sensitive icons that provide shortcuts to frequently performed tasks.
|
||||
The :ref:`Query Tool <query_tool>` and :ref:`View/Edit Data <editgrid>` tools
|
||||
are actually different operating modes of the same tool. Some controls will be
|
||||
disabled in either mode. Please see
|
||||
:ref:`The Query Tool Toolbar <query_tool_toolbar>` for a description of the
|
||||
available controls.
|
||||
|
||||
.. image:: images/editgrid_toolbar.png
|
||||
:alt: Edit grid toolbar
|
||||
.. _data-grid:
|
||||
|
||||
Hover over an icon to display a tooltip that describes the icon's functionality.
|
||||
The Data Grid
|
||||
*************
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+-------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+=============+
|
||||
| *Save* | Use the *Save* icon to save your changes to the currently displayed table contents. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+-------------+
|
||||
| *Find* | Use options on the *Find* menu to access Search and Replace functionality or to Jump to another | Ctrl/Cmd +F |
|
||||
| | line. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+-------------+
|
||||
| *Copy* | Click the *Copy* icon to copy the currently selected data. | Ctrl+C |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+-------------+
|
||||
| *Paste Row* | Click the *Paste Row* icon to paste the content that is currently on the clipboard. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+-------------+
|
||||
| *Delete Row* | Use the *Delete Row* icon to delete all the selected rows from the output panel. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+-------------+
|
||||
| *Filter* | Click the *Filter* icon to open a dialog that allows you to write and apply a filter for the | |
|
||||
| | content currently displayed in the output panel. Click the down arrow to open the *Filter* drop- | |
|
||||
| | down menu and select from pre-defined options: | |
|
||||
| | | |
|
||||
| | Use options on the *Filter* menu to quick-sort or quick-filter the data set: | |
|
||||
| | | |
|
||||
| | * Filter: This option opens a dialog that allows you to define a filter. A filter is a | |
|
||||
| | condition that is supplied to an arbitrary WHERE clause that restricts the result set. | |
|
||||
| | | |
|
||||
| | * Remove Filter: This option removes all selection / exclusion filter conditions. | |
|
||||
| | | |
|
||||
| | * By Selection: This option refreshes the data set and displays only those rows whose | |
|
||||
| | column value matches the value in the cell currently selected. | |
|
||||
| | | |
|
||||
| | * Exclude Selection: This option refreshes the data set and excludes those rows whose | |
|
||||
| | column value matches the value in the cell currently selected. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+-------------+
|
||||
| *No limit* | Use the *No limit* drop-down listbox to specify how many rows to display in the output panel. | |
|
||||
| | Select from: *No limit* (the default), *1000 rows*, *500 rows*, or *100 rows*. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+-------------+
|
||||
| *Execute/Refresh* | Click the *Execute/Refresh* icon to execute the SQL command that is displayed in the top panel. | F5 |
|
||||
| | If you have not saved modifications to the content displayed in the data grid, you will be | |
|
||||
| | prompted to confirm the execution. To preserve your changes before refreshing the content, click | |
|
||||
| | the *Save* toolbar button before executing the refresh. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+-------------+
|
||||
| *Stop* | Click the *Stop* icon to cancel the execution of the currently running query. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+-------------+
|
||||
| *Clear History* | Use the *Clear History* drop-down menu to erase the contents of the *History* tab. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+-------------+
|
||||
| *Download as CSV* | Click the *Download as CSV* icon to download the result set of the current query to a | F8 |
|
||||
| | comma-separated list. You can control the CSV settings through | |
|
||||
| | *Preferences -> SQL Editor -> CSV output* dialogue. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+-------------+
|
||||
|
||||
**The Data Grid**
|
||||
|
||||
The top row of the data grid displays the name of each column, the data type, and if applicable, the number of characters allowed. A column that is part of the primary key will additionally be marked with [PK].
|
||||
The top row of the data grid displays the name of each column, the data type,
|
||||
and if applicable, the number of characters allowed. A column that is part of
|
||||
the primary key will additionally be marked with [PK].
|
||||
|
||||
To modify the displayed data:
|
||||
|
||||
* To change a numeric value within the grid, double-click the value to select the field. Modify the content in the square in which it is displayed.
|
||||
* To change a non-numeric value within the grid, double-click the content to access the edit bubble. After modifying the contentof the edit bubble, click the *Save* button to display your changes in the data grid, or *Cancel* to exit the edit bubble without saving.
|
||||
* To change a numeric value within the grid, double-click the value to select
|
||||
the field. Modify the content in the square in which it is displayed.
|
||||
* To change a non-numeric value within the grid, double-click the content to
|
||||
access the edit bubble. After modifying the contentof the edit bubble, click
|
||||
the *Ok* button to display your changes in the data grid, or *Cancel* to
|
||||
exit the edit bubble without saving.
|
||||
|
||||
To enter a newline character, click Ctrl-Enter or Shift-Enter. Newline formatting is only displayed when the field content is accessed via an edit bubble.
|
||||
To enter a newline character, click Ctrl-Enter or Shift-Enter. Newline
|
||||
formatting is only displayed when the field content is accessed via an edit
|
||||
bubble.
|
||||
|
||||
To add a new row to the table, enter data into the last (unnumbered) row of the table. As soon as you store the data, the row is assigned a row number, and a fresh empty line is added to the data grid.
|
||||
To add a new row to the table, enter data into the last (unnumbered) row of the
|
||||
table. As soon as you store the data, the row is assigned a row number, and a
|
||||
fresh empty line is added to the data grid.
|
||||
|
||||
To write a SQL NULL to the table, simply leave the field empty. When you store the new row, the will server fill in the default value for that column. If you store a change to an existing row, the value NULL will explicitly be written.
|
||||
To write a SQL NULL to the table, simply leave the field empty. When you store
|
||||
the new row, the will server fill in the default value for that column. If you
|
||||
store a change to an existing row, the value NULL will explicitly be written.
|
||||
|
||||
To write an empty string to the table, enter the special string '' (two single quotes) in the field. If you want to write a string containing solely two single quotes to the table, you need to escape these quotes, by typing \'\'
|
||||
To write an empty string to the table, enter the special string '' (two single
|
||||
quotes) in the field. If you want to write a string containing solely two single
|
||||
quotes to the table, you need to escape these quotes, by typing \'\'
|
||||
|
||||
To delete a row, press the *Delete* toolbar button. A popup will open, asking you to confirm the deletion.
|
||||
To delete a row, press the *Delete* toolbar button. A popup will open, asking
|
||||
you to confirm the deletion.
|
||||
|
||||
To commit the changes to the server, select the *Save* toolbar button. Modifications to a row are written to the server automatically when you select a different row.
|
||||
To commit the changes to the server, select the *Save Data* toolbar button.
|
||||
|
||||
**Geometry Data Viewer**
|
||||
|
||||
If PostGIS is installed, you can view GIS objects in a map by selecting row(s) and clicking the 'View Geometry' button in the column. If no rows are selected, the entire data set will be rendered:
|
||||
If PostGIS is installed, you can view GIS objects in a map by selecting row(s)
|
||||
and clicking the 'View Geometry' button in the column. If no rows are selected,
|
||||
the entire data set will be rendered:
|
||||
|
||||
.. image:: images/geometry_viewer.png
|
||||
:alt: Geometry Viewer Button
|
||||
:align: center
|
||||
|
||||
You can adjust the layout by dragging the title of the panel. To view the properties of the geometries directly in map, just click the specific geometry:
|
||||
You can adjust the layout by dragging the title of the panel. To view the
|
||||
properties of the geometries directly in map, just click the specific geometry:
|
||||
|
||||
.. image:: images/geometry_viewer_property_table.png
|
||||
:alt: Geometry Viewer Property Table
|
||||
:align: center
|
||||
|
||||
Notes:
|
||||
.. note::
|
||||
|
||||
- *Supported data types:* The Geometry Viewer supports 2D and 3DM geometries in EWKB format including `Point, LineString, Polygon MultiPoint, MultiLineString, MultiPolygon and GeometryCollection`.
|
||||
- *Supported data types:* The Geometry Viewer supports 2D and 3DM geometries in
|
||||
EWKB format including `Point, LineString, Polygon MultiPoint, MultiLineString,
|
||||
MultiPolygon and GeometryCollection`.
|
||||
|
||||
- *SRIDs:* If there are geometries with different SRIDs in the same column, the viewer will render geometries with the same SRID in the map. If SRID=4326 the OSM tile layer will be added into the map.
|
||||
- *SRIDs:* If there are geometries with different SRIDs in the same column, the
|
||||
viewer will render geometries with the same SRID in the map. If SRID=4326 the
|
||||
OSM tile layer will be added into the map.
|
||||
|
||||
- *Data size:* For performance reasons, the viewer will render no more than 100000 geometries, totaling up to 20MB.
|
||||
- *Data size:* For performance reasons, the viewer will render no more than
|
||||
100000 geometries, totaling up to 20MB.
|
||||
|
||||
- *Internet access:* An internet connection is required for the Geometry Viewer to function correctly.
|
||||
- *Internet access:* An internet connection is required for the Geometry Viewer
|
||||
to function correctly.
|
||||
|
||||
**Sort/Filter options dialog**
|
||||
Sort/Filter options dialog
|
||||
**************************
|
||||
|
||||
You can access *Sort/Filter options dialog* by clicking on Sort/Filter button. This allows you to specify an SQL Filter to limit the data displayed and data sorting options in the edit grid window:
|
||||
You can access *Sort/Filter options dialog* by clicking on Sort/Filter button.
|
||||
This allows you to specify an SQL Filter to limit the data displayed and data
|
||||
sorting options in the edit grid window:
|
||||
|
||||
.. image:: images/editgrid_filter_dialog.png
|
||||
:alt: Edit grid filter dialog window
|
||||
:align: center
|
||||
|
||||
* Use *SQL Filter* to provide SQL filtering criteria. These will be added to the "WHERE" clause of the query used to retrieve the data. For example, you might enter:
|
||||
* Use *SQL Filter* to provide SQL filtering criteria. These will be added to
|
||||
the "WHERE" clause of the query used to retrieve the data. For example,
|
||||
you might enter:
|
||||
|
||||
.. code-block:: sql
|
||||
|
||||
@@ -142,3 +138,8 @@ 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 *Close* button to discard current changes and close the dialog.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
viewdata_filter
|
||||
@@ -0,0 +1,105 @@
|
||||
.. _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."
|
||||
|
||||
@@ -4,57 +4,87 @@
|
||||
`Event Trigger Dialog`:index:
|
||||
*****************************
|
||||
|
||||
Use the *Domain 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.
|
||||
Use the *Domain 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 following dialog tabs: *General*, *Definition*, and *Security Labels*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *Domain 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.
|
||||
|
||||
.. image:: images/event_trigger_general.png
|
||||
:alt: Event trigger dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify the event trigger:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the event trigger. The name will be displayed in the *pgAdmin* tree control.
|
||||
* Use the drop-down listbox next to *Owner* to specify the owner of the event trigger.
|
||||
* Use the *Name* field to add a descriptive name for the event trigger. The name
|
||||
will be displayed in the *pgAdmin* tree control.
|
||||
* Use the drop-down listbox next to *Owner* to specify the owner of the event
|
||||
trigger.
|
||||
* Store notes about the event trigger in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/event_trigger_definition.png
|
||||
:alt: Event trigger dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to define the event trigger:
|
||||
|
||||
* Select a radio button in the *Enabled Status* field to specify a status for the trigger: *Enable* *Disable*, *Replica* *Always*.
|
||||
* Use the drop-down listbox next to *Trigger function* to specify an existing function. A trigger function takes an empty argument list, and returns a value of type event_trigger.
|
||||
* Select a radio button in the *Events* field to specify when the event trigger will fire: *DDL COMMAND START*, *DDL COMMAND END*, or *SQL DROP*.
|
||||
* Use the *When* field to write a condition for the event trigger that must be satisfied before the event trigger can execute.
|
||||
* Select a value from the drop down of *Trigger Enabled* field to specify a status
|
||||
for the trigger: *Enable* *Disable*, *Replica* *Always*.
|
||||
* Use the drop-down listbox next to *Trigger function* to specify an existing
|
||||
function. A trigger function takes an empty argument list, and returns a
|
||||
value of type event_trigger.
|
||||
* Select a value from the drop down of *Events* field to specify when the event
|
||||
trigger will fire: *DDL COMMAND START*, *DDL COMMAND END*, or *SQL DROP*.
|
||||
* Use the *When TAG in* field to enter filter values for TAG for which the trigger
|
||||
will be executed. The values must be in single quotes separated by comma.
|
||||
|
||||
Click the *Security Labels* tab to continue.
|
||||
|
||||
.. image:: images/event_trigger_security.png
|
||||
:alt: Event trigger dialog security tab
|
||||
:align: center
|
||||
|
||||
Use the *Security* tab to define security labels applied to the trigger. Click the *Add* icon (+) to add each security label.
|
||||
Use the *Security* tab to define security labels applied to the trigger. Click
|
||||
the *Add* icon (+) to add each security label.
|
||||
|
||||
* Specify a security label provider in the *Provider* field. The named provider must be loaded and must consent to the proposed labeling operation.
|
||||
* Specify a security label in the *Security Label* field. The meaning of a given label is at the discretion of the label provider. PostgreSQL places no restrictions on whether or how a label provider must interpret security labels; it merely provides a mechanism for storing them.
|
||||
* Specify a security label provider in the *Provider* field. The named provider
|
||||
must be loaded and must consent to the proposed labeling operation.
|
||||
* Specify a security label in the *Security Label* field. The meaning of a given
|
||||
label is at the discretion of the label provider. PostgreSQL places no
|
||||
restrictions on whether or how a label provider must interpret security
|
||||
labels; it merely provides a mechanism for storing them.
|
||||
|
||||
Click the *Add* icon (+) to assign additional security labels; to discard a security label, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click the *Add* icon (+) to assign additional security labels; to discard a
|
||||
security label, click the trash icon to the left of the row and confirm deletion
|
||||
in the *Delete Row* popup.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Domain 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.
|
||||
Your entries in the *Domain 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.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *Domain Trigger* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Domain 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*.
|
||||
The command creates an event trigger named *accounts* that invokes the procedure
|
||||
named *acct_due*.
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
|
||||
@@ -1,69 +1,104 @@
|
||||
.. _exclusion_constraint_dialog:
|
||||
|
||||
************************************
|
||||
`Exclusion constraint Dialog`:index:
|
||||
`Exclusion Constraint Dialog`:index:
|
||||
************************************
|
||||
|
||||
Use the *Exclusion constraint* dialog to define or modify the behavior of an exclusion constraint. An exclusion constraint guarantees that if any two rows are compared on the specified column or expression (using the specified operator), at least one of the operator comparisons will return false or null.
|
||||
Use the *Exclusion constraint* dialog to define or modify the behavior of an
|
||||
exclusion constraint. An exclusion constraint guarantees that if any two rows
|
||||
are compared on the specified column or expression (using the specified
|
||||
operator), at least one of the operator comparisons will return false or null.
|
||||
|
||||
The *Exclusion constraint* dialog organizes the development of an exclusion constraint through the following dialog tabs: *General*, *Definition*, and *Columns*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *Exclusion constraint* dialog organizes the development of an exclusion
|
||||
constraint through the following dialog tabs: *General*, *Definition*, and
|
||||
*Columns*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/exclusion_constraint_general.png
|
||||
:alt: Exclusion constraint dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify the exclusion constraint:
|
||||
|
||||
* Use the *Name* field to provide a descriptive name for the exclusion constraint. The name will be displayed in the *pgAdmin* tree control.
|
||||
* Use the *Name* field to provide a descriptive name for the exclusion
|
||||
constraint. The name will be displayed in the *pgAdmin* tree control.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/exclusion_constraint_definition.png
|
||||
:alt: Exclusion constraint dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to define the exclusion constraint:
|
||||
|
||||
* Use the drop-down listbox next to *Tablespace* to select the tablespace in which the index associated with the exclude constraint will reside.
|
||||
* Use the drop-down listbox next to *Access method* to specify the type of index that will be used when implementing the exclusion constraint:
|
||||
* Use the drop-down listbox next to *Tablespace* to select the tablespace in
|
||||
which the index associated with the exclude constraint will reside.
|
||||
* Use the drop-down listbox next to *Access method* to specify the type of
|
||||
index that will be used when implementing the exclusion constraint:
|
||||
|
||||
* Select *gist* to specify a GiST index.
|
||||
* Select *spgist* to specify a space-partitioned GiST index.
|
||||
* Select *btree* to specify a B-tree index.
|
||||
* Select *hash* to specify a hash index.
|
||||
|
||||
* Use the *Fill Factor* field to specify a fill factor for the table and associated index. The fill factor is a percentage between 10 and 100. 100 (complete packing) is the default.
|
||||
* Move the *Deferrable?* switch to the *Yes* position to specify that the timing of the constraint is deferrable, and can be postponed until the end of the statement. The default is *No*.
|
||||
* If enabled, move the *Deferred?* switch to the *Yes* position to specify the timing of the constraint is deferred to the end of the statement. The default is *No*.
|
||||
* Use the *Constraint* field to provide a condition that a row must satisfy to be included in the table.
|
||||
* Use the *Fill Factor* field to specify a fill factor for the table and
|
||||
associated index. The fill factor is a percentage between 10 and 100. 100
|
||||
(complete packing) is the default.
|
||||
* Move the *Deferrable?* switch to the *Yes* position to specify that the
|
||||
timing of the constraint is deferrable, and can be postponed until the end of
|
||||
the statement. The default is *No*.
|
||||
* If enabled, move the *Deferred?* switch to the *Yes* position to specify the
|
||||
timing of the constraint is deferred to the end of the statement. The default
|
||||
is *No*.
|
||||
* Use the *Constraint* field to provide a condition that a row must satisfy to
|
||||
be included in the table.
|
||||
|
||||
Click the *Columns* tab to continue.
|
||||
|
||||
.. image:: images/exclusion_constraint_columns.png
|
||||
: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 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:
|
||||
|
||||
* The *Column* field is populated with the selection made in the *Column* drop-down listbox.
|
||||
* 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 default is *ASC* which specifies an ascending sort order.
|
||||
* Use the *NULLs order* column to specify the placement of NULL values (when sorted). Specify *FIRST* or *LAST*.
|
||||
* Use the drop-down list next to *Operator* to specify a comparison or conditional operator.
|
||||
* The *Column* field is populated with the selection made in the *Column*
|
||||
drop-down listbox.
|
||||
* 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
|
||||
default is *ASC* which specifies an ascending sort order.
|
||||
* Use the *NULLs order* column to specify the placement of NULL values (when
|
||||
sorted). Specify *FIRST* or *LAST*.
|
||||
* Use the drop-down list next to *Operator* to specify a comparison or
|
||||
conditional operator.
|
||||
|
||||
Use *Include columns* field to specify columns for *INCLUDE* clause of the constraint. This option is available in Postgres 11 and later.
|
||||
Use *Include columns* field to specify columns for *INCLUDE* clause of the
|
||||
constraint. This option is available in Postgres 11 and later.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Exclusion Constraint* dialog generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *Exclusion Constraint* dialog generate a SQL command (see
|
||||
an example below). Use the *SQL* tab for review; revisit or switch tabs to make
|
||||
any changes to the SQL command.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *Exclusion Constraint* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Exclusion Constraint* dialog:
|
||||
|
||||
.. image:: images/exclusion_constraint_sql.png
|
||||
:alt: Exclusion constraint dialog sql tab
|
||||
: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.
|
||||
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.
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
@@ -4,42 +4,60 @@
|
||||
`Extension Dialog`:index:
|
||||
*************************
|
||||
|
||||
Use the *Extension* dialog to install a new extension into the current database. An extension is a collection of SQL objects that add targeted functionality to your Postgres installation. The *Extension* dialog adds the functionality of an extension to the current database only; you must register the extension in each database that use the extension. Before you load an extension into a database, you should confirm that any pre-requisite files are installed.
|
||||
Use the *Extension* dialog to install a new extension into the current database.
|
||||
An extension is a collection of SQL objects that add targeted functionality to
|
||||
your Postgres installation. The *Extension* dialog adds the functionality of
|
||||
an extension to the current database only; you must register the extension in
|
||||
each database that use the extension. Before you load an extension into a
|
||||
database, you should confirm that any pre-requisite files are installed.
|
||||
|
||||
The *Extension* dialog allows you to implement options of the CREATE EXTENSION command through the following dialog tabs: *General* and *Definition*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *Extension* dialog allows you to implement options of the CREATE EXTENSION
|
||||
command through the following dialog tabs: *General* and *Definition*. The *SQL*
|
||||
tab displays the SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/extension_general.png
|
||||
:alt: Extension dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify an extension:
|
||||
|
||||
* Use the drop-down listbox in the *Name* field to select the extension. Each extension must have a unique name.
|
||||
* Use the drop-down listbox in the *Name* field to select the extension. Each
|
||||
extension must have a unique name.
|
||||
* Store notes about the extension in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/extension_definition.png
|
||||
:alt: Extension dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the *Definition* tab to select the *Schema* and *Version*:
|
||||
|
||||
* Use the drop-down listbox next to *Schema* to select the name of the schema in which to install the extension's objects.
|
||||
* Use the drop-down listbox next to *Version* to select the version of the extension to install.
|
||||
* Use the drop-down listbox next to *Schema* to select the name of the schema
|
||||
in which to install the extension's objects.
|
||||
* Use the drop-down listbox next to *Version* to select the version of the
|
||||
extension to install.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Extension* dialog generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *Extension* dialog generate a SQL command (see an example
|
||||
below). Use the *SQL* tab for review; revisit or switch tabs to make any changes
|
||||
to the SQL command.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *Extension* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Extension* dialog:
|
||||
|
||||
.. image:: images/extension_sql.png
|
||||
: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 *chkpass* extension in the *public* schema. It is
|
||||
version *1.0* of *chkpass*.
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
|
||||
@@ -4,72 +4,105 @@
|
||||
`Foreign Data Wrapper Dialog`:index:
|
||||
************************************
|
||||
|
||||
Use the *Foreign Data Wrapper* dialog to create or modify a foreign data wrapper. A foreign data wrapper is an adapter between a Postgres database and data stored on another data source.
|
||||
Use the *Foreign Data Wrapper* dialog to create or modify a foreign data
|
||||
wrapper. A foreign data wrapper is an adapter between a Postgres database and
|
||||
data stored on another data source.
|
||||
|
||||
You must be a superuser to create a foreign data wrapper.
|
||||
|
||||
The *Foreign Data Wrapper* dialog organizes the development of a foreign data wrapper through the following dialog tabs: *General*, *Definition*, *Options*, and *Security*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *Foreign Data Wrapper* dialog organizes the development of a foreign data
|
||||
wrapper through the following dialog tabs: *General*, *Definition*, *Options*,
|
||||
and *Security*. The *SQL* tab displays the SQL code generated by dialog
|
||||
selections.
|
||||
|
||||
.. image:: images/foreign_data_wrapper_general.png
|
||||
:alt: Foreign data wrapper dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify the foreign data wrapper:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the foreign data wrapper. A foreign data wrapper name must be unique within the database. The name will be displayed in the *pgAdmin* tree control.
|
||||
* Use the drop-down listbox next to *Owner* to select the name of the role that will own the foreign data wrapper.
|
||||
* Use the *Name* field to add a descriptive name for the foreign data wrapper.
|
||||
A foreign data wrapper name must be unique within the database. The name will
|
||||
be displayed in the *pgAdmin* tree control.
|
||||
* Use the drop-down listbox next to *Owner* to select the name of the role that
|
||||
will own the foreign data wrapper.
|
||||
* Store notes about the foreign data wrapper in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/foreign_data_wrapper_definition.png
|
||||
:alt: Foreign data wrapper dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to set parameters:
|
||||
|
||||
* Select the name of the handler function from the drop-down listbox in the *Handler* field. This is the name of an existing function that will be called to retrieve the execution functions for foreign tables.
|
||||
* Select the name of the validator function from the drop-down listbox in the *Validator* field. This is the name of an existing function that will be called to check the generic options given to the foreign data wrapper, as well as options for foreign servers, user mappings and foreign tables using the foreign data wrapper.
|
||||
* Select the name of the handler function from the drop-down listbox in the
|
||||
*Handler* field. This is the name of an existing function that will be called
|
||||
to retrieve the execution functions for foreign tables.
|
||||
* Select the name of the validator function from the drop-down listbox in the
|
||||
*Validator* field. This is the name of an existing function that will be
|
||||
called to check the generic options given to the foreign data wrapper, as
|
||||
well as options for foreign servers, user mappings and foreign tables using
|
||||
the foreign data wrapper.
|
||||
|
||||
Click the *Options* tab to continue.
|
||||
|
||||
.. image:: images/foreign_data_wrapper_options.png
|
||||
:alt: Foreign data wrapper dialog options tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Options* tab to specify options:
|
||||
|
||||
* Click the 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 value in the *Value* field.
|
||||
* Click the 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
|
||||
value in the *Value* field.
|
||||
|
||||
Click the *Add* icon (+) to specify each additional pair; to discard an option, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click the *Add* icon (+) to specify each additional pair; to discard an option,
|
||||
click the trash icon to the left of the row and confirm deletion in the *Delete
|
||||
Row* popup.
|
||||
|
||||
Click the *Security* tab to continue.
|
||||
|
||||
.. image:: images/foreign_data_wrapper_security.png
|
||||
:alt: Foreign data wrapper dialog security tab
|
||||
:align: center
|
||||
|
||||
Use the *Security* tab to assign security privileges. Click the *Add* icon (+) to assign a set of privileges.
|
||||
Use the *Security* tab to assign security privileges. Click the *Add* icon (+)
|
||||
to assign a set of privileges.
|
||||
|
||||
* Select the name of the role from the drop-down listbox in the *Grantee* field.
|
||||
* Click inside the *Privileges* field. Check the boxes to the left of one or more privileges to grant the selected privileges to the specified user.
|
||||
* Select the name of the role granting the privileges from the drop-down listbox in the *Grantor* field. The default grantor is the owner of the foreign data wrapper.
|
||||
* Click inside the *Privileges* field. Check the boxes to the left of one or
|
||||
more privileges to grant the selected privileges to the specified user.
|
||||
* The current user, who is the default grantor for granting the privilege, is displayed in the *Grantor* field.
|
||||
|
||||
Click add to assign additional privileges; to discard a privilege, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click add to assign additional privileges; to discard a privilege, click the
|
||||
trash icon to the left of the row and confirm deletion in the *Delete Row*
|
||||
popup.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Foreign Data Wrapper* dialog generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *Foreign Data Wrapper* dialog generate a SQL command (see an
|
||||
example below). Use the *SQL* tab for review; revisit or switch tabs to make any
|
||||
changes to the SQL command.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *Foreign Data Wrapper* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Foreign Data Wrapper* dialog:
|
||||
|
||||
.. image:: images/foreign_data_wrapper_sql.png
|
||||
:alt: Foreign data wrapper dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example creates a foreign data wrapper named *libpq_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*.
|
||||
The example creates a foreign data wrapper named *libpq_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. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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 *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
@@ -4,58 +4,94 @@
|
||||
`Foreign key Dialog`:index:
|
||||
***************************
|
||||
|
||||
Use the *Foreign key* dialog to specify the behavior of a foreign key constraint. A foreign key constraint maintains referential integrity between two tables. A foreign key constraint cannot be defined between a temporary table and a permanent table.
|
||||
Use the *Foreign key* dialog to specify the behavior of a foreign key
|
||||
constraint. A foreign key constraint maintains referential integrity between
|
||||
two tables. A foreign key constraint cannot be defined between a temporary
|
||||
table and a permanent table.
|
||||
|
||||
The *Foreign key* dialog organizes the development of a foreign key constraint through the following dialog tabs: *General*, *Definition*, *Columns*, and *Action*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *Foreign key* dialog organizes the development of a foreign key constraint
|
||||
through the following dialog tabs: *General*, *Definition*, *Columns*, and
|
||||
*Action*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/foreign_key_general.png
|
||||
:alt: Foreign key dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify the foreign key constraint:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the foreign key. The name will be displayed in the *pgAdmin* tree control.
|
||||
* Use the *Name* field to add a descriptive name for the foreign key. The name
|
||||
will be displayed in the *pgAdmin* tree control.
|
||||
* Store notes about the foreign key constraint in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/foreign_key_definition.png
|
||||
:alt: Foreign key dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to define the foreign key constraint:
|
||||
|
||||
* Move the *Deferrable?* switch to the *Yes* position to specify the timing of the constraint is deferrable and can be postponed until the end of the statement. The default is *No*.
|
||||
* If enabled, move the *Deferred?* switch to the *Yes* position to specify the timing of the constraint is deferred to the end of the statement. The default is *No*.
|
||||
* Move the *Match type* switch specify the type of matching that is enforced by the constraint:
|
||||
* Move the *Deferrable?* switch to the *Yes* position to specify the timing of
|
||||
the constraint is deferrable and can be postponed until the end of the
|
||||
statement. The default is *No*.
|
||||
* If enabled, move the *Deferred?* switch to the *Yes* position to specify the
|
||||
timing of the constraint is deferred to the end of the statement. The default
|
||||
is *No*.
|
||||
* Move the *Match type* switch specify the type of matching that is enforced by
|
||||
the constraint:
|
||||
|
||||
* Select *Full* to indicate that all columns of a multicolumn foreign key must be null if any column is null; if all columns are null, the row is not required to have a match in the referenced table.
|
||||
* Select *Simple* to specify that a single foreign key column may be null; if any column is null, the row is not required to have a match in the referenced table.
|
||||
* Select *Full* to indicate that all columns of a multicolumn foreign key
|
||||
must be null if any column is null; if all columns are null, the row is
|
||||
not required to have a match in the referenced table.
|
||||
* Select *Simple* to specify that a single foreign key column may be null;
|
||||
if any column is null, the row is not required to have a match in the
|
||||
referenced table.
|
||||
|
||||
* Move the *Validated* switch to the *Yes* position to instruct the server to validate the existing table content (against a foreign key or check constraint) when you save modifications to this dialog.
|
||||
* Move the *Auto FK Index* switch to the *No* position to disable the automatic index feature.
|
||||
* The field next to *Covering Index* generates the name of an index if the *Auto FK Index* switch is in the *Yes* position; or, this field is disabled.
|
||||
* Move the *Validated* switch to the *Yes* position to instruct the server to
|
||||
validate the existing table content (against a foreign key or check
|
||||
constraint) when you save modifications to this dialog.
|
||||
* Move the *Auto FK Index* switch to the *No* position to disable the automatic
|
||||
index feature.
|
||||
* The field next to *Covering Index* generates the name of an index if the *Auto
|
||||
FK Index* switch is in the *Yes* position; or, this field is disabled.
|
||||
|
||||
Click the *Columns* tab to continue.
|
||||
|
||||
.. image:: images/foreign_key_columns.png
|
||||
:alt: Foreign key dialog columns tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Columns* tab to specify one or more reference column(s). A Foreign Key constraint requires that one or more columns of a table must only contain values that match values in the referenced column(s) of a row of a referenced table:
|
||||
Use the fields in the *Columns* tab to specify one or more reference column(s).
|
||||
A Foreign Key constraint requires that one or more columns of a table must only
|
||||
contain values that match values in the referenced column(s) of a row of a
|
||||
referenced table:
|
||||
|
||||
* Use the drop-down listbox next to *Local column* to specify the column in the current table that will be compared to the foreign table.
|
||||
* Use the drop-down listbox next to *References* to specify the name of the table in which the comparison column(s) resides.
|
||||
* Use the drop-down listbox next to *Referencing* to specify a column in the foreign table.
|
||||
* Use the drop-down listbox next to *Local column* to specify the column in the
|
||||
current table that will be compared to the foreign table.
|
||||
* Use the drop-down listbox next to *References* to specify the name of the
|
||||
table in which the comparison column(s) resides.
|
||||
* Use the drop-down listbox next to *Referencing* to specify a column in the
|
||||
foreign table.
|
||||
|
||||
Click the *Add* icon (+) to add a column to the list; repeat the steps above and click the *Add* icon (+) to add additional columns. To discard an entry, click the trash icon to the left of the entry and confirm deletion in the *Delete Row* popup.
|
||||
Click the *Add* icon (+) to add a column to the list; repeat the steps above and
|
||||
click the *Add* icon (+) to add additional columns. To discard an entry, click
|
||||
the trash icon to the left of the entry and confirm deletion in the *Delete Row*
|
||||
popup.
|
||||
|
||||
Click the *Action* tab to continue.
|
||||
|
||||
.. image:: images/foreign_key_action.png
|
||||
:alt: Foreign key dialog action tab
|
||||
:align: center
|
||||
|
||||
Use the drop-down listboxes on the *Action* tab to specify behavior related to the foreign key constraint that will be performed when data within the table is updated or deleted:
|
||||
Use the drop-down listboxes on the *Action* tab to specify behavior related to
|
||||
the foreign key constraint that will be performed when data within the table is
|
||||
updated or deleted:
|
||||
|
||||
* Use the drop-down listbox next to *On update* to select an action that will be performed when data in the table is updated.
|
||||
* Use the drop-down listbox next to *On delete* to select an action that will be performed when data in the table is deleted.
|
||||
* Use the drop-down listbox next to *On update* to select an action that will be
|
||||
performed when data in the table is updated.
|
||||
* Use the drop-down listbox next to *On delete* to select an action that will be
|
||||
performed when data in the table is deleted.
|
||||
|
||||
The supported actions are:
|
||||
|
||||
@@ -78,18 +114,25 @@ The supported actions are:
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Foreign key* dialog generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *Foreign key* dialog generate a SQL command (see an example
|
||||
below). Use the *SQL* tab for review; revisit or switch tabs to make any changes
|
||||
to the SQL command.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *Foreign key* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Foreign key* dialog:
|
||||
|
||||
.. image:: images/foreign_key_sql.png
|
||||
:alt: Foreign key dialog sql tab
|
||||
: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.
|
||||
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.
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
@@ -4,16 +4,25 @@
|
||||
`Foreign Server Dialog`:index:
|
||||
******************************
|
||||
|
||||
Use the *Foreign Server* dialog to create a foreign server. A foreign server typically encapsulates connection information that a foreign-data wrapper uses to access an external data resource. Each foreign data wrapper may connect to a different foreign server; in the *pgAdmin* tree control, expand the node of the applicable foreign data wrapper to launch the *Foreign Server* dialog.
|
||||
Use the *Foreign Server* dialog to create a foreign server. A foreign server
|
||||
typically encapsulates connection information that a foreign-data wrapper uses
|
||||
to access an external data resource. Each foreign data wrapper may connect to a
|
||||
different foreign server; in the *pgAdmin* tree control, expand the node of the
|
||||
applicable foreign data wrapper to launch the *Foreign Server* dialog.
|
||||
|
||||
The *Foreign Server* dialog organizes the development of a foreign server through the following dialog tabs: *General*, *Definition*, *Options*, and *Security*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *Foreign Server* dialog organizes the development of a foreign server
|
||||
through the following dialog tabs: *General*, *Definition*, *Options*, and
|
||||
*Security*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/foreign_server_general.png
|
||||
:alt: Foreign server dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify the foreign server:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the foreign server. The name will be displayed in the *pgAdmin* tree control. It must be unique within the database.
|
||||
* Use the *Name* field to add a descriptive name for the foreign server. The
|
||||
name will be displayed in the *pgAdmin* tree control. It must be unique within
|
||||
the database.
|
||||
* Use the drop-down listbox next to *Owner* to select a role.
|
||||
* Store notes about the foreign server in the *Comment* field.
|
||||
|
||||
@@ -21,6 +30,7 @@ Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/foreign_server_definition.png
|
||||
:alt: Foreign server dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to set parameters:
|
||||
|
||||
@@ -31,41 +41,57 @@ Click the *Options* tab to continue.
|
||||
|
||||
.. image:: images/foreign_server_options.png
|
||||
:alt: Foreign server dialog options tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Options* tab to specify options. Click the *Add* button to create an option clause for the foreign server.
|
||||
Use the fields in the *Options* tab to specify options. Click the *Add* button
|
||||
to create an option clause for the foreign server.
|
||||
|
||||
* Specify the option name in the *Option* field.
|
||||
* Provide a corresponding value in the *Value* field.
|
||||
|
||||
Click *Add* to create each additional clause; to discard an option, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click *Add* to create each additional clause; to discard an option, click the
|
||||
trash icon to the left of the row and confirm deletion in the *Delete Row*
|
||||
popup.
|
||||
|
||||
Click the *Security* tab to continue.
|
||||
|
||||
.. image:: images/foreign_server_security.png
|
||||
:alt: Foreign server dialog security tab
|
||||
:align: center
|
||||
|
||||
Use the *Security* tab to assign security privileges to the foreign server. Click *Add* before you assign a set of privileges.
|
||||
Use the *Security* tab to assign security privileges to the foreign server.
|
||||
Click *Add* before you assign a set of privileges.
|
||||
|
||||
* Select the name of the role from the drop-down listbox in the *Grantee* field.
|
||||
* Click inside the *Privileges* field. Check the boxes to the left of one or more privileges to grant the selected privileges to the specified user.
|
||||
* Select the name of the role from the drop-down listbox in the *Grantor* field. The default grantor is the owner of the foreign server. This is a required field.
|
||||
* Click inside the *Privileges* field. Check the boxes to the left of one or
|
||||
more privileges to grant the selected privileges to the specified user.
|
||||
* The current user, who is the default grantor for granting the privilege, is displayed in the *Grantor* field.
|
||||
|
||||
Click *Add* to assign a new set of privileges; to discard a privilege, click the trash icon to the left of the row and confirm deletion in the *Delete Row* dialog.
|
||||
Click *Add* to assign a new set of privileges; to discard a privilege, click the
|
||||
trash icon to the left of the row and confirm deletion in the *Delete Row*
|
||||
dialog.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Foreign Server* dialog generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *Foreign Server* dialog generate a SQL command (see an
|
||||
example below). Use the *SQL* tab for review; revisit or switch tabs to make
|
||||
any changes to the SQL command.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *Foreign Server* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Foreign Server* dialog:
|
||||
|
||||
.. image:: images/foreign_server_sql.png
|
||||
:alt: Foreign server dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a foreign server for the foreign data wrapper *hdfs_fdw*. It has the name *hdfs_server*; its type is *hiveserver2*. Options for the foreign server include a host and a port.
|
||||
The example shown demonstrates creating a foreign server for the foreign data
|
||||
wrapper *hdfs_fdw*. It has the name *hdfs_server*; its type is *hiveserver2*.
|
||||
Options for the foreign server include a host and a port.
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
@@ -4,107 +4,163 @@
|
||||
`Foreign Table Dialog`:index:
|
||||
*****************************
|
||||
|
||||
Use the *Foreign Table* dialog to define a foreign table in the current database. Foreign tables define the structure of an external data source that resides on a foreign server.
|
||||
Use the *Foreign Table* dialog to define a foreign table in the current
|
||||
database. Foreign tables define the structure of an external data source that
|
||||
resides on a foreign server.
|
||||
|
||||
The *Foreign Table* dialog organizes the development of a foreign table through the following dialog tabs: *General*, *Definition*, *Columns*, *Constraints*, *Options*, and *Security*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *Foreign Table* dialog organizes the development of a foreign table through
|
||||
the following dialog tabs: *General*, *Definition*, *Columns*, *Constraints*,
|
||||
*Options*, and *Security*. The *SQL* tab displays the SQL code generated by
|
||||
dialog selections.
|
||||
|
||||
.. image:: images/foreign_table_general.png
|
||||
:alt: Foreign table dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify the foreign table:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the foreign table. The name of the foreign table must be distinct from the name of any other foreign table, table, sequence, index, view, existing data type, or materialized view in the same schema. The name will be displayed in the *pgAdmin* tree control.
|
||||
* Use the drop-down listbox next to *Owner* to select the name of the role that will own the foreign table.
|
||||
* Select the name of the schema in which the foreign table will reside from the drop-down listbox in the *Schema* field.
|
||||
* Use the *Name* field to add a descriptive name for the foreign table. The name
|
||||
of the foreign table must be distinct from the name of any other foreign
|
||||
table, table, sequence, index, view, existing data type, or materialized view
|
||||
in the same schema. The name will be displayed in the *pgAdmin* tree control.
|
||||
* Use the drop-down listbox next to *Owner* to select the name of the role that
|
||||
will own the foreign table.
|
||||
* Select the name of the schema in which the foreign table will reside from the
|
||||
drop-down listbox in the *Schema* field.
|
||||
* Store notes about the foreign table in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/foreign_table_definition.png
|
||||
:alt: Foreign table dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to define the external data source:
|
||||
|
||||
* Use the drop-down listbox next to *Foreign server* to select a foreign server. This list is populated with servers defined through the *Foreign Server* dialog.
|
||||
* Use the drop-down listbox next to *Inherits* to specify a parent table. The foreign table will inherit all of its columns. This field is optional.
|
||||
* Use the drop-down listbox next to *Foreign server* to select a foreign server.
|
||||
This list is populated with servers defined through the *Foreign Server*
|
||||
dialog.
|
||||
* Use the drop-down listbox next to *Inherits* to specify a parent table. The
|
||||
foreign table will inherit all of its columns. This field is optional.
|
||||
|
||||
Click the *Columns* tab to continue.
|
||||
|
||||
.. image:: images/foreign_table_columns.png
|
||||
:alt: Foreign table dialog columns tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Columns* tab to to add columns and their attributes to the table. Click the *Add* icon (+) to define a column:
|
||||
Use the fields in the *Columns* tab to 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.
|
||||
* Use the drop-down listbox in the *Data Type* field to select a data type for the column. This can include array specifiers. For more information on which data types are supported by PostgreSQL, refer to Chapter 8 of the core documentation.
|
||||
* Use the drop-down listbox in the *Data Type* field to select a data type for
|
||||
the column. This can include array specifiers. For more information on which
|
||||
data types are supported by PostgreSQL, refer to Chapter 8 of the core
|
||||
documentation.
|
||||
|
||||
Click the *Add* icon (+) to specify each additional column; to discard a column, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click the *Add* icon (+) to specify each additional column; to discard a column,
|
||||
click the trash icon to the left of the row and confirm deletion in the *Delete
|
||||
Row* popup.
|
||||
|
||||
Click the *Constraints* tab to continue.
|
||||
|
||||
.. image:: images/foreign_table_constraints.png
|
||||
:alt: Foreign table dialog constraints tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Constraints* tab to apply a table constraint to the foreign table. Click the *Add* icon (+) to define a constraint:
|
||||
Use the fields in the *Constraints* tab to apply a table constraint to the
|
||||
foreign table. Click the *Add* icon (+) to define a constraint:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the constraint. If the constraint is violated, the constraint name is present in error messages, so constraint names like *col must be positive* can be used to communicate helpful information.
|
||||
* Use the *Check* field to write a check expression producing a Boolean result. Each row in the foreign table is expected to satisfy the check expression.
|
||||
* Check the *No Inherit* checkbox to specify that the constraint will not propagate to child tables.
|
||||
* Uncheck the *Validate* checkbox to disable validation. The database will not assume that the constraint holds for all rows in the table.
|
||||
* Use the *Name* field to add a descriptive name for the constraint. If the
|
||||
constraint is violated, the constraint name is present in error messages, so
|
||||
constraint names like *col must be positive* can be used to communicate
|
||||
helpful information.
|
||||
* Use the *Check* field to write a check expression producing a Boolean result.
|
||||
Each row in the foreign table is expected to satisfy the check expression.
|
||||
* Check the *No Inherit* checkbox to specify that the constraint will not
|
||||
propagate to child tables.
|
||||
* Uncheck the *Validate* checkbox to disable validation. The database will not
|
||||
assume that the constraint holds for all rows in the table.
|
||||
|
||||
Click the *Add* icon (+) to specify each additional constraint; to discard a constraint, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click the *Add* icon (+) to specify each additional constraint; to discard a
|
||||
constraint, click the trash icon to the left of the row and confirm deletion in
|
||||
he *Delete Row* popup.
|
||||
|
||||
Click the *Options* tab to continue.
|
||||
|
||||
.. image:: images/foreign_table_options.png
|
||||
:alt: Foreign table dialog options tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Options* tab to specify options to be associated with the new foreign table or one of its columns; the accepted option names and values are specific to the foreign data wrapper associated with the foreign server. Click the *Add* icon (+) to add an option/value pair.
|
||||
Use the fields in the *Options* tab to specify options to be associated with
|
||||
the new foreign table or one of its columns; the accepted option names and
|
||||
values are specific to the foreign data wrapper associated with the foreign
|
||||
server. Click the *Add* icon (+) to add an option/value pair.
|
||||
|
||||
* Specify the option name in the *Option* field. Duplicate option names are not allowed.
|
||||
* Specify the option name in the *Option* field. Duplicate option names are not
|
||||
allowed.
|
||||
* Provide a corresponding value in the *Value* field.
|
||||
|
||||
Click the *Add* icon (+) to specify each additional option/value pair; to discard an option, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click the *Add* icon (+) to specify each additional option/value pair; to
|
||||
discard an option, click the trash icon to the left of the row and confirm
|
||||
deletion in the *Delete Row* popup.
|
||||
|
||||
Click the *Security* tab to continue.
|
||||
|
||||
.. image:: images/foreign_table_security.png
|
||||
:alt: Foreign table dialog security tab
|
||||
:align: center
|
||||
|
||||
Use the *Security* tab to assign privileges and define security labels.
|
||||
|
||||
Use the *Privileges* panel to assign privileges to a role. Click the *Add* icon (+) to set privileges for database objects:
|
||||
Use the *Privileges* panel to assign privileges to a role. Click the *Add* icon
|
||||
(+) to set privileges for database objects:
|
||||
|
||||
* Select the name of the role to which privileges will be assigned from the drop-down listbox in the *Grantee* field.
|
||||
* Click inside the *Privileges* field. Check the boxes to the left of one or more privileges to grant the selected privilege to the specified user.
|
||||
* Select the name of the role that owns the foreign table from the drop-down listbox in the *Grantor* field. The default grantor is the owner of the database.
|
||||
* Select the name of the role to which privileges will be assigned from the
|
||||
drop-down listbox in the *Grantee* field.
|
||||
* Click inside the *Privileges* field. Check the boxes to the left of one or
|
||||
more privileges to grant the selected privilege to the specified user.
|
||||
* The current user, who is the default grantor for granting the privilege, is displayed in the *Grantor* field.
|
||||
|
||||
Click the *Add* icon (+) to assign additional privileges; to discard a privilege, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click the *Add* icon (+) to assign additional privileges; to discard a
|
||||
privilege, click the trash icon to the left of the row and confirm deletion in
|
||||
the *Delete Row* popup.
|
||||
|
||||
Use the *Security Labels* panel to define security labels applied to the function. Click the *Add* icon (+) to add each security label selection:
|
||||
Use the *Security Labels* panel to define security labels applied to the
|
||||
function. Click the *Add* icon (+) to add each security label selection:
|
||||
|
||||
* Specify a security label provider in the *Provider* field. The named provider must be loaded and must consent to the proposed labeling operation.
|
||||
* Specify a a security label in the *Security Label* field. The meaning of a given label is at the discretion of the label provider. PostgreSQL places no restrictions on whether or how a label provider must interpret security labels; it merely provides a mechanism for storing them.
|
||||
* Specify a security label provider in the *Provider* field. The named provider
|
||||
must be loaded and must consent to the proposed labeling operation.
|
||||
* Specify a a security label in the *Security Label* field. The meaning of a
|
||||
given label is at the discretion of the label provider. PostgreSQL places no
|
||||
restrictions on whether or how a label provider must interpret security
|
||||
labels; it merely provides a mechanism for storing them.
|
||||
|
||||
Click the *Add* icon (+) to assign additional security labels; to discard a security label, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click the *Add* icon (+) to assign additional security labels; to discard a
|
||||
security label, click the trash icon to the left of the row and confirm deletion
|
||||
in the *Delete Row* popup.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Foreign Table* dialog generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *Foreign Table* dialog generate a SQL command (see an
|
||||
example below). Use the *SQL* tab for review; revisit or switch tabs to make
|
||||
any changes to the SQL command.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *Foreign Table* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Foreign Table* dialog:
|
||||
|
||||
.. image:: images/foreign_table_sql.png
|
||||
:alt: Foreign table dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a foreign table *weblogs* with multiple columns and two options.
|
||||
The example shown demonstrates creating a foreign table *weblogs* with multiple
|
||||
columns and two options.
|
||||
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
|
||||
|
||||
@@ -1,39 +1,50 @@
|
||||
.. _fts_configuration_dialog:
|
||||
|
||||
*********************************
|
||||
`FTS Configuration dialog`:index:
|
||||
`FTS Configuration Dialog`:index:
|
||||
*********************************
|
||||
|
||||
Use the *FTS Configuration* dialog to configure a full text search. A text search configuration specifies a text search parser that can divide a string into tokens, along with dictionaries that can identify searchable tokens.
|
||||
Use the *FTS Configuration* dialog to configure a full text search. A text
|
||||
search configuration specifies a text search parser that can divide a string
|
||||
into tokens, along with dictionaries that can identify searchable tokens.
|
||||
|
||||
The *FTS Configuration* dialog organizes the development of a FTS configuration through the following dialog tabs: "*General*, *Definition*, and *Tokens*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *FTS Configuration* dialog organizes the development of a FTS configuration
|
||||
through the following dialog tabs: "*General*, *Definition*, and *Tokens*. The
|
||||
*SQL* tab displays the SQL code generated by dialog selections.
|
||||
|
||||
Click the *General* tab to begin.
|
||||
|
||||
.. image:: images/fts_configuration_general.png
|
||||
:alt: FTS configuration dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify a FTS configuration:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the FTS configuration. The name will be displayed in the *pgAdmin* tree control.
|
||||
* Use the drop-down listbox next to *Owner* to specify the role that will own the configuration.
|
||||
* Select the name of the schema in which the FTS configuration will reside from the drop-down listbox in the *Schema* field.
|
||||
* Use the *Name* field to add a descriptive name for the FTS configuration. The
|
||||
name will be displayed in the *pgAdmin* tree control.
|
||||
* Use the drop-down listbox next to *Owner* to specify the role that will own
|
||||
the configuration.
|
||||
* Select the name of the schema in which the FTS configuration will reside from
|
||||
the drop-down listbox in the *Schema* field.
|
||||
* Store notes about the FTS configuration in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/fts_configuration_definition.png
|
||||
:alt: FTS configuration dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to define parameters:
|
||||
|
||||
* Select the name of the text search parser from the drop-down listbox in the *Parser* field.
|
||||
* Select the name of the text search parser from the drop-down listbox in the
|
||||
*Parser* field.
|
||||
* Select a language from the drop-down listbox in the *Copy Config* field.
|
||||
|
||||
Click the *Tokens* tab to continue.
|
||||
|
||||
.. image:: images/fts_configuration_tokens.png
|
||||
:alt: FTS configuration dialog tokens tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Tokens* tab to add a token:
|
||||
|
||||
@@ -41,22 +52,30 @@ Use the fields in the *Tokens* tab to add a token:
|
||||
* Click the *Add* icon (+) 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 trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Repeat these steps to add additional tokens; to discard a token, click the
|
||||
trash icon to the left of the row and confirm deletion in the *Delete Row*
|
||||
popup.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *FTS Configuration* dialog generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *FTS Configuration* dialog generate a SQL command (see an
|
||||
example below). Use the *SQL* tab for review; revisit or switch tabs to make
|
||||
any changes to the SQL command.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *FTS Configuration* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *FTS Configuration* dialog:
|
||||
|
||||
.. image:: images/fts_configuration_sql.png
|
||||
:alt: FTS configuration dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a FTS configuration named *meme_phrases*. It uses the *default* parser.
|
||||
The example shown demonstrates creating a FTS configuration named
|
||||
*meme_phrases*. It uses the *default* parser.
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
|
||||
@@ -4,59 +4,109 @@
|
||||
`FTS Dictionary Dialog`:index:
|
||||
******************************
|
||||
|
||||
Use the *FTS Dictionary* dialog to create a full text search dictionary. You can use a predefined templates or create a new dictionary with custom parameters.
|
||||
Use the *FTS Dictionary* dialog to create a full text search dictionary. You
|
||||
can use a predefined templates or create a new dictionary with custom
|
||||
parameters.
|
||||
|
||||
The *FTS Dictionary* dialog organizes the development of a FTS dictionary through the following dialog tabs: *General*, *Definition*, and *Options*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *FTS Dictionary* dialog organizes the development of a FTS dictionary
|
||||
through the following dialog tabs: *General*, *Definition*, and *Options*. The
|
||||
*SQL* tab displays the SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/fts_dictionary_general.png
|
||||
:alt: FTS dictionary dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify the dictionary:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the dictionary. The name will be displayed in the *pgAdmin* tree control.
|
||||
* Use the drop-down listbox next to *Owner* to select the role that will own the FTS Dictionary.
|
||||
* Select the name of the schema in which the dictionary will reside from the drop-down listbox in the *Schema* field.
|
||||
* Use the *Name* field to add a descriptive name for the dictionary. The name
|
||||
will be displayed in the *pgAdmin* tree control.
|
||||
* Use the drop-down listbox next to *Owner* to select the role that will own the
|
||||
FTS Dictionary.
|
||||
* Select the name of the schema in which the dictionary will reside from the
|
||||
drop-down listbox in the *Schema* field.
|
||||
* Store notes about the dictionary in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/fts_dictionary_definition.png
|
||||
:alt: FTS dictionary dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the field in the *Definition* tab to choose a template from the drop-down listbox:
|
||||
Use the field in the *Definition* tab to choose a template from the drop-down
|
||||
listbox:
|
||||
|
||||
*Select *ispell* to select the Ispell template. The Ispell dictionary template supports morphological dictionaries, which can normalize many different linguistic forms of a word into the same lexeme. For example, an English Ispell dictionary can match all declensions and conjugations of the search term bank, e.g., banking, banked, banks, banks', and bank's. Ispell dictionaries usually recognize a limited set of words, so they should be followed by another broader dictionary; for example, a Snowball dictionary, which recognizes everything.
|
||||
*Select *simple* to select the simple template. The simple dictionary template operates by converting the input token to lower case and checking it against a file of stop words. If it is found in the file then an empty array is returned, causing the token to be discarded. If not, the lower-cased form of the word is returned as the normalized lexeme. Alternatively, the dictionary can be configured to report non-stop-words as unrecognized, allowing them to be passed on to the next dictionary in the list.
|
||||
*Select *snowball* to select the Snowball template. The Snowball dictionary template is based on a project by Martin Porter, inventor of the popular Porter's stemming algorithm for the English language. Snowball now provides stemming algorithms for many languages (see the Snowball site for more information). Each algorithm understands how to reduce common variant forms of words to a base, or stem, spelling within its language. A Snowball dictionary recognizes everything, whether or not it is able to simplify the word, so it should be placed at the end of the dictionary list. It is useless to have it before any other dictionary because a token will never pass through it to the next dictionary.
|
||||
*Select *synonym* to select the synonym template. This dictionary template is used to create dictionaries that replace a word with a synonym. Phrases are not supported (use the thesaurus template (Section 12.6.4) for that). A synonym dictionary can be used to overcome linguistic problems, for example, to prevent an English stemmer dictionary from reducing the word Paris to pari.
|
||||
*Select *thesaurus* to select the thesaurus template. A thesaurus dictionary replaces all non-preferred terms by one preferred term and, optionally, preserves the original terms for indexing as well. PostgreSQL's current implementation of the thesaurus dictionary is an extension of the synonym dictionary with added phrase support.
|
||||
* Select *ispell* to select the Ispell template. The Ispell dictionary template
|
||||
supports morphological dictionaries, which can normalize many different
|
||||
linguistic forms of a word into the same lexeme. For example, an English
|
||||
Ispell dictionary can match all declensions and conjugations of the search
|
||||
term bank, e.g., banking, banked, banks, banks', and bank's. Ispell
|
||||
dictionaries usually recognize a limited set of words, so they should be
|
||||
followed by another broader dictionary; for example, a Snowball dictionary,
|
||||
which recognizes everything.
|
||||
* Select *simple* to select the simple template. The simple dictionary template
|
||||
operates by converting the input token to lower case and checking it against
|
||||
a file of stop words. If it is found in the file then an empty array is
|
||||
returned, causing the token to be discarded. If not, the lower-cased form of
|
||||
the word is returned as the normalized lexeme. Alternatively, the dictionary
|
||||
can be configured to report non-stop-words as unrecognized, allowing them to
|
||||
be passed on to the next dictionary in the list.
|
||||
* Select *snowball* to select the Snowball template. The Snowball dictionary
|
||||
template is based on a project by Martin Porter, inventor of the popular
|
||||
Porter's stemming algorithm for the English language. Snowball now provides
|
||||
stemming algorithms for many languages (see the Snowball site for more
|
||||
information). Each algorithm understands how to reduce common variant forms of
|
||||
words to a base, or stem, spelling within its language. A Snowball dictionary
|
||||
recognizes everything, whether or not it is able to simplify the word, so it
|
||||
should be placed at the end of the dictionary list. It is useless to have it
|
||||
before any other dictionary because a token will never pass through it to the
|
||||
next dictionary.
|
||||
* Select *synonym* to select the synonym template. This dictionary template is
|
||||
used to create dictionaries that replace a word with a synonym. Phrases are not
|
||||
supported (use the thesaurus template (Section 12.6.4) for that). A synonym
|
||||
dictionary can be used to overcome linguistic problems, for example, to prevent
|
||||
an English stemmer dictionary from reducing the word Paris to pari.
|
||||
* Select *thesaurus* to select the thesaurus template. A thesaurus dictionary
|
||||
replaces all non-preferred terms by one preferred term and, optionally,
|
||||
preserves the original terms for indexing as well. PostgreSQL's current
|
||||
implementation of the thesaurus dictionary is an extension of the synonym
|
||||
dictionary with added phrase support.
|
||||
|
||||
Click the *Options* tab to continue.
|
||||
|
||||
.. image:: images/fts_dictionary_options.png
|
||||
:alt: FTS dictionary dialog options tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Options* tab to provide template-specific options. Click the *Add* icon (+) to add an option clause:
|
||||
Use the fields in the *Options* tab to provide template-specific options. Click
|
||||
the *Add* icon (+) to add an option clause:
|
||||
|
||||
* Specify the name of an option in the *Option* field
|
||||
* Provide a value for the option in the *Value* field.
|
||||
|
||||
Click the *Add* icon (+) to specify each additional option/value pair; to discard an option, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click the *Add* icon (+) to specify each additional option/value pair; to
|
||||
discard an option, click the trash icon to the left of the row and confirm
|
||||
deletion in the *Delete Row* popup.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *FTS Dictionary* 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.
|
||||
Your entries in the *FTS Dictionary* 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.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *FTS Dictionary* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *FTS Dictionary* dialog:
|
||||
|
||||
.. image:: images/fts_dictionary_sql.png
|
||||
:alt: FTS dictionary dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a custom dictionary named *more_stopwords* which is based on the simple template and is configured to use standard English.
|
||||
The example shown demonstrates creating a custom dictionary named
|
||||
*more_stopwords* which is based on the simple template and is configured to use standard English.
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
|
||||
@@ -4,40 +4,59 @@
|
||||
`FTS Parser Dialog`:index:
|
||||
**************************
|
||||
|
||||
Use the *FTS Parser* dialog to create a new text search parser. A text search parser defines a method for splitting a text string into tokens and assigning types (categories) to the tokens.
|
||||
Use the *FTS Parser* dialog to create a new text search parser. A text search
|
||||
parser defines a method for splitting a text string into tokens and assigning
|
||||
types (categories) to the tokens.
|
||||
|
||||
The *FTS Parser* dialog organizes the development of a text search parser through the following dialog tabs: *General*, and *Definition*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *FTS Parser* dialog organizes the development of a text search parser
|
||||
through the following dialog tabs: *General*, and *Definition*. The *SQL* tab
|
||||
displays the SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/fts_parser_general.png
|
||||
:alt: FTS parser dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify a text search parser:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the parser. The name will be displayed in the *pgAdmin* tree control.
|
||||
* Select the name of the schema in which the parser will reside from the drop-down listbox in the *Schema* field.
|
||||
* Use the *Name* field to add a descriptive name for the parser. The name will
|
||||
be displayed in the *pgAdmin* tree control.
|
||||
* Select the name of the schema in which the parser will reside from the
|
||||
drop-down listbox in the *Schema* field.
|
||||
* Store notes about the domain in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/fts_parser_definition.png
|
||||
:alt: FTS parser dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to define parameters:
|
||||
|
||||
* Use the drop-down listbox next to *Start function* to select the name of the function that will initialize the parser.
|
||||
* Use the drop-down listbox next to *Get next token function* to select the name of the function that will return the next token.
|
||||
* Use the drop-down listbox next to *End function* to select the name of the function that is called when the parser is finished.
|
||||
* Use the drop-down listbox next to *Lextypes function* to select the name of the lextypes function for the parser. The lextypes function returns an array that contains the id, alias, and a description of the tokens used by the parser.
|
||||
* Use the drop-down listbox next to *Headline function* to select the name of the headline function for the parser. The headline function returns an excerpt from the document in which the terms of the query are highlighted.
|
||||
* Use the drop-down listbox next to *Start function* to select the name of the
|
||||
function that will initialize the parser.
|
||||
* Use the drop-down listbox next to *Get next token function* to select the
|
||||
name of the function that will return the next token.
|
||||
* Use the drop-down listbox next to *End function* to select the name of the
|
||||
function that is called when the parser is finished.
|
||||
* Use the drop-down listbox next to *Lextypes function* to select the name of
|
||||
the lextypes function for the parser. The lextypes function returns an array
|
||||
that contains the id, alias, and a description of the tokens used by the
|
||||
parser.
|
||||
* Use the drop-down listbox next to *Headline function* to select the name of
|
||||
the headline function for the parser. The headline function returns an excerpt
|
||||
from the document in which the terms of the query are highlighted.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
.. image:: images/fts_parser_sql.png
|
||||
:alt: FTS parser dialog sql tab
|
||||
:align: center
|
||||
|
||||
Your entries in the *FTS Parser* 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.
|
||||
Your entries in the *FTS Parser* 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.
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
|
||||
@@ -4,43 +4,58 @@
|
||||
`FTS Template Dialog`:index:
|
||||
****************************
|
||||
|
||||
Use the *FTS Template* dialog to create a new text search template. A text search template defines the functions that implement text search dictionaries.
|
||||
Use the *FTS Template* dialog to create a new text search template. A text
|
||||
search template defines the functions that implement text search dictionaries.
|
||||
|
||||
The *FTS Template* dialog organizes the development of a text search Template through the following dialog tabs: *General*, and *Definition*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *FTS Template* dialog organizes the development of a text search Template
|
||||
through the following dialog tabs: *General*, and *Definition*. The *SQL* tab
|
||||
displays the SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/fts_template_general.png
|
||||
:alt: FTS template dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify a template:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the template. The name will be displayed in the *pgAdmin* tree control.
|
||||
* Select the name of the schema in which the template will reside from the drop-down listbox in the *Schema* field.
|
||||
* Use the *Name* field to add a descriptive name for the template. The name will
|
||||
be displayed in the *pgAdmin* tree control.
|
||||
* Select the name of the schema in which the template will reside from the
|
||||
drop-down listbox in the *Schema* field.
|
||||
* Store notes about the template in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/fts_template_definition.png
|
||||
:alt: FTS template dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to define function parameters:
|
||||
|
||||
* Use the drop-down listbox next to *Init function* to select the name of the init function for the template. The init function is optional.
|
||||
* Use the drop-down listbox next to *Lexize function* to select the name of the lexize function for the template. The lexize function is required.
|
||||
* Use the drop-down listbox next to *Init function* to select the name of the
|
||||
init function for the template. The init function is optional.
|
||||
* Use the drop-down listbox next to *Lexize function* to select the name of the
|
||||
lexize function for the template. The lexize function is required.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *FTS Template* dialog generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *FTS Template* dialog generate a SQL command (see an example
|
||||
below). Use the *SQL* tab for review; revisit or switch tabs to make any changes
|
||||
to the SQL command.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *FTS Template* dialog:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *FTS Template* dialog:
|
||||
|
||||
.. image:: images/fts_template_sql.png
|
||||
:alt: FTS template dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a fts template named *ru_template* that uses the ispell dictionary.
|
||||
The example shown demonstrates creating a fts template named *ru_template* that
|
||||
uses the ispell dictionary.
|
||||
|
||||
* Click the *Info* button (i) to access online help. View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
|
||||
@@ -4,118 +4,182 @@
|
||||
`Function Dialog`:index:
|
||||
************************
|
||||
|
||||
Use the *Function* dialog to define a function. If you drop and then recreate a function, the new function is not the same entity as the old; you must drop existing rules, views, triggers, etc. that refer to the old function.
|
||||
Use the *Function* dialog to define a function. If you drop and then recreate
|
||||
a function, the new function is not the same entity as the old; you must drop
|
||||
existing rules, views, triggers, etc. that refer to the old function.
|
||||
|
||||
The *Function* dialog organizes the development of a function through the following dialog tabs: *General*, *Definition*, *Options*, *Arguments*, *Parameters*, and *Security*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *Function* dialog organizes the development of a function through the
|
||||
following dialog tabs: *General*, *Definition*, *Code*, *Options*,
|
||||
*Parameters*, and *Security*. The *SQL* tab displays the SQL code generated by
|
||||
dialog selections.
|
||||
|
||||
.. image:: images/function_general.png
|
||||
:alt: Function dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify a function:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the function. The name will be displayed in the *pgAdmin* tree control.
|
||||
* Use the drop-down listbox next to *Owner* to select the name of the role that will own the function.
|
||||
* Use the drop-down listbox next to *Schema* to select the schema in which the function will be created.
|
||||
* Use the *Name* field to add a descriptive name for the function. The name will
|
||||
be displayed in the *pgAdmin* tree control.
|
||||
* Use the drop-down listbox next to *Owner* to select the name of the role that
|
||||
will own the function.
|
||||
* Use the drop-down listbox next to *Schema* to select the schema in which the
|
||||
function will be created.
|
||||
* Store notes about the function in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/function_definition.png
|
||||
:alt: Function dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Definition* tab to define the function:
|
||||
|
||||
* Use the drop-down listbox next to *Return type* to select the data type returned by the function, if any.
|
||||
* Use the drop-down listbox next to *Language* to select the implementation language. The default is *sql*.
|
||||
* Use the *Code* field to write the code that will execute when the function is called.
|
||||
* Use the drop-down listbox next to *Return type* to select the data type
|
||||
returned by the function, if any.
|
||||
* Use the drop-down listbox next to *Language* to select the implementation
|
||||
language. The default is *sql*.
|
||||
* Use the fields in the *Arguments* to define an argument. Click the *Add*
|
||||
icon (+) to set parameters and values for the argument:
|
||||
|
||||
* Use the drop-down listbox in the *Data type* field to select a data type.
|
||||
* Use the drop-down listbox in the *Mode* field to select a mode. Select *IN*
|
||||
for an input parameter; select *OUT* for an output parameter; select *INOUT*
|
||||
for both an input and an output parameter; or, select *VARIADIC* to specify a
|
||||
VARIADIC parameter.
|
||||
* Provide a name for the argument in the *Argument Name* field.
|
||||
* Specify a default value for the argument in the *Default Value* field.
|
||||
|
||||
Click the *Add* icon (+) to define another argument; to discard an argument,
|
||||
click the trash icon to the left of the row and confirm deletion in the *Delete
|
||||
Row* popup.
|
||||
|
||||
Click the *Code* tab to continue.
|
||||
|
||||
.. image:: images/function_code.png
|
||||
:alt: Function dialog code tab
|
||||
:align: center
|
||||
|
||||
* Use the *Code* field to write the code that will execute when the function
|
||||
is called.
|
||||
|
||||
Click the *Options* tab to continue.
|
||||
|
||||
.. image:: images/function_options.png
|
||||
:alt: Function dialog options tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Options* tab to describe or modify the action of the function:
|
||||
Use the fields in the *Options* tab to describe or modify the action of the
|
||||
function:
|
||||
|
||||
* Use the drop-down listbox next to *Volatility* to select one of the following. *VOLATILE* is the default value.
|
||||
* Use the drop-down listbox next to *Volatility* to select one of the following.
|
||||
*VOLATILE* is the default value.
|
||||
|
||||
* *VOLATILE* indicates that the function value can change even within a single table scan, so no optimizations can be made.
|
||||
* *STABLE* indicates that the function cannot modify the database, and that within a single table scan it will consistently return the same result for the same argument values.
|
||||
* *IMMUTABLE* indicates that the function cannot modify the database and always returns the same result when given the same argument values.
|
||||
* *VOLATILE* indicates that the function value can change even within a
|
||||
single table scan, so no optimizations can be made.
|
||||
* *STABLE* indicates that the function cannot modify the database, and that
|
||||
within a single table scan it will consistently return the same result for
|
||||
the same argument values.
|
||||
* *IMMUTABLE* indicates that the function cannot modify the database and
|
||||
always returns the same result when given the same argument values.
|
||||
|
||||
* Move the *Returns a Set?* switch to indicate if the function returns a set that includes multiple rows. The default is *No*.
|
||||
* Move the *Strict?* switch to indicate if the function always returns NULL whenever any of its arguments are NULL. If *Yes*, the function is not executed when there are NULL arguments; instead a NULL result is assumed automatically. The default is *No*.
|
||||
* Move the *Security of definer?* switch to specify that the function is to be executed with the privileges of the user that created it. The default is *No*.
|
||||
* Move the *Window?* switch to indicate that the function is a window function rather than a plain function. The default is *No*. This is currently only useful for functions written in C. The WINDOW attribute cannot be changed when replacing an existing function definition. For more information about the CREATE FUNCTION command, see the PostgreSQL core documentation available at:
|
||||
* Move the *Returns a Set?* switch to indicate if the function returns a set
|
||||
that includes multiple rows. The default is *No*.
|
||||
* Move the *Strict?* switch to indicate if the function always returns NULL
|
||||
whenever any of its arguments are NULL. If *Yes*, the function is not executed
|
||||
when there are NULL arguments; instead a NULL result is assumed
|
||||
automatically. The default is *No*.
|
||||
* Move the *Security of definer?* switch to specify that the function is to be
|
||||
executed with the privileges of the user that created it. The default is *No*.
|
||||
* Move the *Window?* switch to indicate that the function is a window function
|
||||
rather than a plain function. The default is *No*. This is currently only
|
||||
useful for functions written in C. The WINDOW attribute cannot be changed when
|
||||
replacing an existing function definition. For more information about the
|
||||
CREATE FUNCTION command, see the PostgreSQL core documentation available at:
|
||||
|
||||
http://www.postgresql.org/docs/9.5/static/functions-window.html
|
||||
https://www.postgresql.org/docs/current/functions-window.html
|
||||
|
||||
* Use the *Estimated cost* field to specify a positive number representing the estimated execution cost for the function, in units of cpu_operator_cost. If the function returns a set, this is the cost per returned row.
|
||||
* Use the *Estimated rows* field to specify a positive number giving the estimated number of rows that the query planner should expect the function to return. This is only allowed when the function is declared to return a set. The default assumption is 1000 rows.
|
||||
* Move the *Leak proof?* switch to indicate whether the function has side effects. The default is *No*. This option can only be set by the superuser.
|
||||
|
||||
Click the *Arguments* tab to continue.
|
||||
|
||||
.. image:: images/function_arguments.png
|
||||
:alt: Function dialog arguments tab
|
||||
|
||||
Use the fields in the *Arguments* tab to define an argument. Click the *Add* icon (+) to set parameters and values for the argument:
|
||||
|
||||
* Use the drop-down listbox in the *Data type* field to select a data type.
|
||||
* Use the drop-down listbox in the *Mode* field to select a mode. Select *IN* for an input parameter; select *OUT* for an output parameter; select *INOUT* for both an input and an output parameter; or, select *VARIADIC* to specify a VARIADIC parameter.
|
||||
* Provide a name for the argument in the *Argument Name* field.
|
||||
* Specify a default value for the argument in the *Default Value* field.
|
||||
|
||||
Click the *Add* icon (+) to define another argument; to discard an argument, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
* Use the *Estimated cost* field to specify a positive number representing the
|
||||
estimated execution cost for the function, in units of cpu_operator_cost. If
|
||||
the function returns a set, this is the cost per returned row.
|
||||
* Use the *Estimated rows* field to specify a positive number giving the
|
||||
estimated number of rows that the query planner should expect the function to
|
||||
return. This is only allowed when the function is declared to return a set.
|
||||
The default assumption is 1000 rows.
|
||||
* Move the *Leak proof?* switch to indicate whether the function has side
|
||||
effects. The default is *No*. This option can only be set by the superuser.
|
||||
* Use the *Support function* field to specify a planner support function to
|
||||
use for the function.
|
||||
|
||||
Click the *Parameters* tab to continue.
|
||||
|
||||
.. image:: images/function_parameters.png
|
||||
:alt: Function dialog parameters tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Parameters* tab to specify settings that will be applied when the function is invoked. Click the *Add* icon (+) to add a *Name*/*Value* field in the table.
|
||||
Use the fields in the *Parameters* tab to specify settings that will be applied
|
||||
when the function is invoked. Click the *Add* icon (+) to add a *Name*/*Value*
|
||||
field in the table.
|
||||
|
||||
* Use the drop-down listbox in the *Name* column in the *Parameters* panel to select a parameter.
|
||||
* Use the *Value* field to specify the value that will be associated with the selected variable. This field is context-sensitive.
|
||||
* Use the drop-down listbox in the *Name* column in the *Parameters* panel to
|
||||
select a parameter.
|
||||
* Use the *Value* field to specify the value that will be associated with the
|
||||
selected variable. This field is context-sensitive.
|
||||
|
||||
Click the *Security* tab to continue.
|
||||
|
||||
.. image:: images/function_security.png
|
||||
:alt: Function dialog security tab
|
||||
:align: center
|
||||
|
||||
Use the *Security* tab to assign privileges and define security labels.
|
||||
|
||||
Use the *Privileges* panel to assign usage privileges for the function to a role.
|
||||
Use the *Privileges* panel to assign usage privileges for the function to a
|
||||
role.
|
||||
|
||||
* Select the name of the role from the drop-down listbox in the *Grantee* field.
|
||||
* Click inside the *Privileges* field. Check the boxes to the left of one or more privileges to grant the selected privilege to the specified user.
|
||||
* Select the name of the role from the drop-down listbox in the *Grantor* field. The default grantor is the owner of the database.
|
||||
* Click inside the *Privileges* field. Check the boxes to the left of one or
|
||||
more privileges to grant the selected privilege to the specified user.
|
||||
* The current user, who is the default grantor for granting the privilege, is displayed in the *Grantor* field.
|
||||
|
||||
Click the *Add* icon (+) to assign additional privileges; to discard a privilege, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click the *Add* icon (+) to assign additional privileges; to discard a
|
||||
privilege, click the trash icon to the left of the row and confirm deletion in
|
||||
the *Delete Row* popup.
|
||||
|
||||
Use the *Security Labels* panel to define security labels applied to the function. Click the *Add* icon (+) to add each security label selection:
|
||||
Use the *Security Labels* panel to define security labels applied to the
|
||||
function. Click the *Add* icon (+) to add each security label selection:
|
||||
|
||||
* Specify a security label provider in the *Provider* field. The named provider must be loaded and must consent to the proposed labeling operation.
|
||||
* Specify a a security label in the *Security Label* field. The meaning of a given label is at the discretion of the label provider. PostgreSQL places no restrictions on whether or how a label provider must interpret security labels; it merely provides a mechanism for storing them.
|
||||
* Specify a security label provider in the *Provider* field. The named provider
|
||||
must be loaded and must consent to the proposed labeling operation.
|
||||
* Specify a a security label in the *Security Label* field. The meaning of a
|
||||
given label is at the discretion of the label provider. PostgreSQL places no
|
||||
restrictions on whether or how a label provider must interpret security
|
||||
labels; it merely provides a mechanism for storing them.
|
||||
|
||||
Click the *Add* icon (+) to assign additional security labels; to discard a security label, click the trash icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
Click the *Add* icon (+) to assign additional security labels; to discard a
|
||||
security label, click the trash icon to the left of the row and confirm deletion
|
||||
in the *Delete Row* popup.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Function* dialog generate a generate a SQL command (see an example below). Use the *SQL* tab for review; revisit or switch tabs to make any changes to the SQL command.
|
||||
Your entries in the *Function* dialog generate a generate a SQL command (see an
|
||||
example below). Use the *SQL* tab for review; revisit or switch tabs to make any
|
||||
changes to the SQL command.
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by selections made in the *Function* dialog:
|
||||
The following is an example of the sql command generated by selections made in
|
||||
the *Function* dialog:
|
||||
|
||||
.. image:: images/function_sql.png
|
||||
:alt: Function dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example demonstrates creating an *edbspl* function named *emp_comp*. The function adds two columns (p_sal and p_comm), and then uses the result to compute a yearly salary, returning a NUMERIC value.
|
||||
The example demonstrates creating an *plpgsql* function named *hire_salesmen*. The
|
||||
function have three columns (p_ename, p_sal and p_comm).
|
||||
|
||||
* Click the *Info* button (i) to access online help.View context-sensitive help in the *Tabbed browser*, where a new tab displays the PostgreSQL core documentation.
|
||||
* 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.
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ Pre-compiled and configured installation packages for pgAdmin 4 are available
|
||||
for a number of desktop environments; we recommend using an installer
|
||||
whenever possible.
|
||||
|
||||
In a Server Deployment, the pgAdmin application is deployed behind a webserver
|
||||
In a *Server Deployment*, the pgAdmin application is deployed behind a webserver
|
||||
or with the WSGI interface.
|
||||
If you install pgAdmin in server mode, you will be prompted to provide a role
|
||||
name and pgAdmin password when you initially connect to pgAdmin. The first
|
||||
@@ -18,28 +18,25 @@ and manage additional pgAdmin user accounts. When a user authenticates
|
||||
with pgAdmin, the pgAdmin tree control displays the server definitions
|
||||
associated with that login role.
|
||||
|
||||
Contents:
|
||||
|
||||
.. toctree::
|
||||
|
||||
server_deployment
|
||||
pgadmin_login
|
||||
pgadmin_user
|
||||
change_user_password
|
||||
|
||||
In a Desktop Deployment, the pgAdmin application is configured to use the
|
||||
In a *Desktop Deployment*, the pgAdmin application is configured to use the
|
||||
desktop runtime environment to host the program on a supported platform.
|
||||
Typically, users will install a pre-built package to run pgAdmin in desktop
|
||||
mode, but a manual desktop deployment can be installed and though it is more
|
||||
difficult to setup, it may be useful for developers interested in understanding
|
||||
how pgAdmin works.
|
||||
|
||||
Contents:
|
||||
It is also possible to use a *Container Deployment* of pgAdmin, in which Server
|
||||
Mode is pre-configured for security.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
desktop_deployment
|
||||
deployment
|
||||
login
|
||||
user_management
|
||||
change_user_password
|
||||
enabling_ldap_authentication
|
||||
|
||||
|
||||
.. note:: Pre-compiled and configured installation packages are available for
|
||||
a number of platforms. These packages should be used by end-users whereever
|
||||
@@ -68,17 +65,19 @@ display. To open the *Preferences* dialog, select *Preferences* from the *File*
|
||||
for the dialog. You can access additional Postgres help by navigating through
|
||||
the *Help* menu, and selecting the name of the resource that you wish to open.
|
||||
|
||||
Contents:
|
||||
You can search for objects in the database using the :ref:`Search objects <search_objects>`
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
browser
|
||||
pgadmin_menu_bar
|
||||
pgadmin_toolbar
|
||||
pgadmin_tabbed_browser
|
||||
pgadmin_tree_control
|
||||
user_interface
|
||||
menu_bar
|
||||
toolbar
|
||||
tabbed_browser
|
||||
tree_control
|
||||
preferences
|
||||
keyboard_shortcuts
|
||||
search_objects
|
||||
|
||||
Before using pgAdmin to manage objects that reside on a server, you must define a
|
||||
connection to the server; for more information please see *Connecting to a Server*
|
||||
|
||||
@@ -4,51 +4,88 @@
|
||||
`Grant Wizard`:index:
|
||||
*********************
|
||||
|
||||
The *Grant Wizard* tool is a graphical interface that allows you to manage the privileges of one or more database objects in a point-and-click environment. A search box, dropdown lists, and checkboxes facilitate quick selections of database objects, roles and privileges.
|
||||
The *Grant Wizard* tool is a graphical interface that allows you to manage the
|
||||
privileges of one or more database objects in a point-and-click environment. A
|
||||
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 displays the SQL code generated by wizard selections.
|
||||
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
|
||||
displays the SQL code generated by wizard selections.
|
||||
|
||||
To launch the *Grant Wizard* tool, select a database object in the *pgAdmin* tree control, then navigate through *Tools* on the menu bar to click on the *Grant Wizard* option.
|
||||
To launch the *Grant Wizard* tool, select a database object in the *pgAdmin*
|
||||
tree control, then navigate through *Tools* on the menu bar to click on the
|
||||
*Grant Wizard* option.
|
||||
|
||||
.. image:: images/grant_wizard_step1.png
|
||||
:alt: Grant wizard step one page
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Object Selection (step 1 of 3)* 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.
|
||||
Use the fields in the *Object Selection (step 1 of 3)* 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.
|
||||
|
||||
* Each row in the table lists object identifiers; check the checkbox in the left column to include an object as a target of the Grant Wizard. The table displays:
|
||||
* Each row in the table lists object identifiers; check the checkbox in the left
|
||||
column to include an object as a target of the Grant Wizard. The table
|
||||
displays:
|
||||
|
||||
* The object type in the *Object Type* field
|
||||
* 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 without modifying privileges.
|
||||
Click the *Next* button to continue, or the *Cancel* 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 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 Grantee (directly or through a chain of grants) will lose thier privileges on the object.
|
||||
Use the fields in the *Privileges Selection (step 2 of 3)* 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
|
||||
Grantee (directly or through a chain of grants) will lose thier privileges on
|
||||
the object.
|
||||
|
||||
* Click the *Add* icon (+) to assign a set of privileges.
|
||||
* Select the name of the role from the drop-down listbox in the *Grantee* field.
|
||||
* Click inside the *Privileges* field. Check the boxes to the left of one or more privileges to grant the selected privileges to the specified user. If privileges have previously been granted on a database object, unchecking a privilege for a group or user will result in revoking that privilege.
|
||||
* If enabled, select the name of the role from the drop-down listbox in the *Grantor* field. The default grantor is the owner of the database.
|
||||
* Click the *Add* icon (+) to assign a set of privileges to another role; to discard a privilege, click the trash icon to the left of the row and confirm deletion in the *Delete Row* dialog.
|
||||
* Click inside the *Privileges* field. Check the boxes to the left of one or
|
||||
more privileges to grant the selected privileges to the specified user. If
|
||||
privileges have previously been granted on a database object, unchecking a
|
||||
privilege for a group or user will result in revoking that privilege.
|
||||
* The current user, who is the default grantor for granting the privilege, is displayed in the *Grantor* field.
|
||||
* Click the *Add* icon (+) to assign a set of privileges to another role; to
|
||||
discard a privilege, click the trash icon to the left of the row and confirm
|
||||
deletion in the *Delete Row* dialog.
|
||||
|
||||
For more information about granting privileges on database objects, see the `PostgreSQL core documentation <http://www.postgresql.org/docs/9.5/static/sql-grant.html>`_.
|
||||
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 modifying privileges.
|
||||
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
|
||||
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 example below).
|
||||
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
|
||||
example below).
|
||||
|
||||
**Example**
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in the *Grant Wizard* tool:
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Grant Wizard* tool:
|
||||
|
||||
.. image:: images/grant_wizard_step3.png
|
||||
: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.
|
||||
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 *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.
|
||||
* Click the *Finish* button to save selections and exit the wizard.
|
||||
|
Before Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 141 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 449 KiB After Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 495 KiB After Width: | Height: | Size: 1.6 MiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 139 KiB |