Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
901e3ede39 | ||
|
|
e89f205aa6 | ||
|
|
dccd4f0bba | ||
|
|
99c6b171e4 | ||
|
|
0f5d4cd7b7 | ||
|
|
e256f734df | ||
|
|
9ed2506062 | ||
|
|
adf4634459 | ||
|
|
2dbd09530e | ||
|
|
d8ecbcf293 | ||
|
|
3ad0862c59 | ||
|
|
1b7dce124b | ||
|
|
24c0816042 | ||
|
|
9d6098ddf2 | ||
|
|
4d6b019949 | ||
|
|
cee65fbf9a | ||
|
|
f9707a8bf5 | ||
|
|
1af431dcc2 | ||
|
|
4033bf3748 | ||
|
|
0f5a97fa6e | ||
|
|
8eeb12b600 | ||
|
|
69069e9af3 | ||
|
|
83660ec9ed | ||
|
|
6b9ae466c2 | ||
|
|
5ce3c4a5c8 | ||
|
|
f8df935404 | ||
|
|
ffc1c6c3b7 | ||
|
|
dd4849070a | ||
|
|
44b2f49839 | ||
|
|
0cd67b15cb | ||
|
|
448ede53c6 | ||
|
|
cbd29cf45b | ||
|
|
3414de9ab2 | ||
|
|
30dc805cf6 | ||
|
|
ce8e6b47c1 | ||
|
|
aca97d9f57 | ||
|
|
b539637426 | ||
|
|
b1221d5517 | ||
|
|
5a8c916bc0 | ||
|
|
677221cd9c | ||
|
|
d2efee5943 | ||
|
|
0010935707 | ||
|
|
6fb4df67a9 | ||
|
|
0fa4609220 | ||
|
|
1cdbb9a643 | ||
|
|
e90b3dad01 | ||
|
|
e61a1045f5 | ||
|
|
b89e306df0 | ||
|
|
f002b11106 | ||
|
|
bc4e8a3c82 | ||
|
|
76a4dee451 | ||
|
|
f62c20d0b9 | ||
|
|
ccd28101d6 | ||
|
|
4ca60e07b2 | ||
|
|
6d1926bb63 | ||
|
|
1141aeb524 | ||
|
|
9fec812366 | ||
|
|
a811841735 | ||
|
|
a2307c230a | ||
|
|
7b5fd9bfea | ||
|
|
a7ee4e5909 | ||
|
|
9cc2985d13 | ||
|
|
19beb62f81 | ||
|
|
28be10a1b5 | ||
|
|
444a364a8d | ||
|
|
4a195e7ef6 | ||
|
|
ad64491a98 | ||
|
|
7a2716bf77 | ||
|
|
64c419e6f8 | ||
|
|
23aac4f580 | ||
|
|
b4b658c59d | ||
|
|
4d727015fd | ||
|
|
78f0c9c4a5 | ||
|
|
c2d9219add | ||
|
|
fddcbbff67 | ||
|
|
aa5b1d50b9 | ||
|
|
21359c6c74 | ||
|
|
c38bf04f51 | ||
|
|
5f9ea22941 | ||
|
|
00e13b0811 | ||
|
|
b9e533e31a | ||
|
|
bc0b25d995 | ||
|
|
1a89c1f85f | ||
|
|
37d82d457c | ||
|
|
8f7b30075e | ||
|
|
47479e5e5c | ||
|
|
8fd3ddc4ae | ||
|
|
deab1bfaba | ||
|
|
04729f63b8 | ||
|
|
0ce3434631 | ||
|
|
094129e2be | ||
|
|
3e86ed5d21 | ||
|
|
41bcce09ce | ||
|
|
343c3ee49c | ||
|
|
12d6271b13 | ||
|
|
c65f60771a | ||
|
|
c983aae881 | ||
|
|
1013d7ccdd | ||
|
|
d945c6f843 | ||
|
|
dabe64a8df | ||
|
|
fbc3b1a318 | ||
|
|
6adc1bfd42 | ||
|
|
e7e4d5cf0a | ||
|
|
9f836f5433 | ||
|
|
e3807ec3d6 | ||
|
|
40fa1aff6b | ||
|
|
4787de6968 | ||
|
|
3f7e921cce | ||
|
|
4e414f57e6 | ||
|
|
c98fb887cc | ||
|
|
d2457f2a1d | ||
|
|
e38c38cd58 | ||
|
|
374c5e952f | ||
|
|
38e5ded821 | ||
|
|
85a1855928 | ||
|
|
44a5a3f2fc | ||
|
|
7fe1d89891 | ||
|
|
e43a87da09 | ||
|
|
55dc06de15 | ||
|
|
f61d22d58d | ||
|
|
fd92974902 | ||
|
|
ec64910e0c | ||
|
|
4ecd05e33b | ||
|
|
af6ff20020 | ||
|
|
ad862f4084 | ||
|
|
65a6c18263 | ||
|
|
7cc76c7d2d | ||
|
|
6528d086ba | ||
|
|
f56b4030f1 | ||
|
|
8b13f158ab | ||
|
|
920c27bb31 | ||
|
|
964eddf952 | ||
|
|
2786f7ac5a | ||
|
|
9dd957a2aa | ||
|
|
c1ad7d81f4 | ||
|
|
a4ef5ea48b | ||
|
|
44ab4648a8 | ||
|
|
19016c3733 | ||
|
|
e18ce2c9e3 | ||
|
|
0ceb2e2767 | ||
|
|
191e2b6242 | ||
|
|
603d91be0e | ||
|
|
262dcdcf54 | ||
|
|
74be3a9f52 | ||
|
|
5c65766ece | ||
|
|
bae8a2bd5d | ||
|
|
6d0ed91d31 | ||
|
|
45179ccb8c | ||
|
|
ebee7a5b72 | ||
|
|
ae73f13812 | ||
|
|
e302a6199a | ||
|
|
e5e9981836 | ||
|
|
461c0abce1 | ||
|
|
02b83146be | ||
|
|
9754b0fe14 | ||
|
|
92a997b16a | ||
|
|
8cfdfd898d | ||
|
|
448b4c07c1 | ||
|
|
6d026b3e28 | ||
|
|
3a9a635419 | ||
|
|
6875d00e44 | ||
|
|
83e646c7d4 | ||
|
|
d0d194b60d | ||
|
|
c8109beaa7 | ||
|
|
42d2a18b91 | ||
|
|
1e59ec74e1 | ||
|
|
701e6f86f5 | ||
|
|
da5545ff57 | ||
|
|
fea44c07c7 | ||
|
|
e539bc2ae7 | ||
|
|
9bdca4b409 | ||
|
|
40027dd502 | ||
|
|
bd545fd5b2 | ||
|
|
441a3d4533 | ||
|
|
3f939dfc11 | ||
|
|
837925a47c | ||
|
|
4dc7f24b5f | ||
|
|
9ec8d05a64 | ||
|
|
4ee9a95360 | ||
|
|
3a87e05f80 | ||
|
|
f24348b2b0 | ||
|
|
91a288c2bb | ||
|
|
fd53e4f5f9 | ||
|
|
e327066523 | ||
|
|
2121adb7fb | ||
|
|
18c2faf7a9 | ||
|
|
48dc4bacc4 | ||
|
|
950809ee55 | ||
|
|
c7a49490a2 | ||
|
|
f8cb62180e | ||
|
|
dfdaf7f6d1 | ||
|
|
9c0c046a38 | ||
|
|
5ae1036a24 | ||
|
|
36c9eb3dfd | ||
|
|
fe096116be | ||
|
|
e30cbe2579 | ||
|
|
c6424e3897 | ||
|
|
0f9b9b9dcf | ||
|
|
6b613fdf36 | ||
|
|
9d804d2857 | ||
|
|
b14285cdbf | ||
|
|
1438eb6364 | ||
|
|
976faa5e2f | ||
|
|
2c02e6fc23 | ||
|
|
61b440261f | ||
|
|
fbd10ef4b6 | ||
|
|
abe5303448 | ||
|
|
bef692d431 | ||
|
|
7c18ddfe7d | ||
|
|
9a0d92469b | ||
|
|
bce7e8346d | ||
|
|
3dcee71a92 | ||
|
|
d644b4f94e | ||
|
|
3a30f27153 | ||
|
|
19984d6563 | ||
|
|
43176a8c6f | ||
|
|
849a1b1a89 | ||
|
|
b921a55c46 | ||
|
|
b0abc4048e | ||
|
|
a55ac2fdd1 | ||
|
|
3afeb8ca46 | ||
|
|
a701e8c766 | ||
|
|
246bb01736 | ||
|
|
cc91e5da94 | ||
|
|
5b99646798 | ||
|
|
a5b79564ff | ||
|
|
3d5d507f4b | ||
|
|
e1020aefdd | ||
|
|
cc38bc132e | ||
|
|
053519aef6 | ||
|
|
1408bad8ba | ||
|
|
33cc2a7514 | ||
|
|
d6a754e850 | ||
|
|
fc05ef49ce | ||
|
|
b36a290b54 | ||
|
|
0ca7dbccf6 | ||
|
|
e67bad3461 | ||
|
|
e2e5a8208c | ||
|
|
a47cbbe26c | ||
|
|
59707fc8af | ||
|
|
25ace94d10 | ||
|
|
ca4d5d0ca4 | ||
|
|
600690a789 | ||
|
|
77931d2315 | ||
|
|
8bf178b0a3 | ||
|
|
d4bf7164f9 | ||
|
|
7468ca36ae | ||
|
|
572b5a126a | ||
|
|
36e5708464 | ||
|
|
d4697e8f1c | ||
|
|
9479f0e632 | ||
|
|
aff84103d9 | ||
|
|
a61a9e5b8f | ||
|
|
eb8168285e | ||
|
|
1ed4d0f95e | ||
|
|
31849ea95f | ||
|
|
d7f5e13cdd | ||
|
|
33aeacd8d1 | ||
|
|
f3bf068066 | ||
|
|
719f8c8fd2 | ||
|
|
fa8b3edda5 | ||
|
|
f71e2e8040 | ||
|
|
39992a817d | ||
|
|
7b85253465 | ||
|
|
35b1e1d0d2 | ||
|
|
711ea3bfa1 | ||
|
|
8eb6f8061d | ||
|
|
2c4ed4d115 | ||
|
|
fc233ed993 | ||
|
|
1d8810775c | ||
|
|
d28e249673 | ||
|
|
c7cd57db91 | ||
|
|
d2a7f7fffe | ||
|
|
27b6e07e21 | ||
|
|
a2f5e6ad8f | ||
|
|
ea0d3eb812 | ||
|
|
9de1489322 | ||
|
|
9e3165c0ff | ||
|
|
0f92f54452 | ||
|
|
b8072bd630 | ||
|
|
c13b1b60e3 | ||
|
|
a908ef7c61 | ||
|
|
5b411caabe | ||
|
|
7f3c3fa6f9 | ||
|
|
476d7c5fc9 | ||
|
|
1377244e52 | ||
|
|
173cb60691 | ||
|
|
2aac87569b | ||
|
|
fa21e25cb2 | ||
|
|
8a21d9b500 | ||
|
|
8b7b63868f | ||
|
|
96ce298789 | ||
|
|
6c692df118 | ||
|
|
9ace229152 | ||
|
|
5b9383c880 | ||
|
|
9fd9ca2673 | ||
|
|
72e5d4b426 | ||
|
|
ac6c6fbf97 | ||
|
|
a726635290 | ||
|
|
ca40add29b | ||
|
|
2ced82c7b3 | ||
|
|
d81960a6eb | ||
|
|
f23b0702f2 | ||
|
|
a92c1b43a2 | ||
|
|
9796f50362 | ||
|
|
d65930a8a6 | ||
|
|
a92bad7909 | ||
|
|
5467b5e085 | ||
|
|
ca32828281 | ||
|
|
7787def660 | ||
|
|
dce5038ffd | ||
|
|
1ed6272e7b | ||
|
|
ab424b27d1 | ||
|
|
a693014371 | ||
|
|
bfb65e82aa | ||
|
|
4bbc811aed | ||
|
|
d2d819529d | ||
|
|
ea706be7fc | ||
|
|
400896c563 | ||
|
|
d4280c896d | ||
|
|
02edea9bd7 | ||
|
|
2932ef770d | ||
|
|
7eaa3179ad | ||
|
|
40b8da8223 | ||
|
|
17ad46fe9d | ||
|
|
8faec3e0e9 | ||
|
|
7d5668141d | ||
|
|
e77f933fe7 | ||
|
|
69109a19db | ||
|
|
1ec1db1ecb | ||
|
|
038fd6ce21 | ||
|
|
65af8bcc5a | ||
|
|
1dfc5f4c0c | ||
|
|
c05a8663cc | ||
|
|
235b6d285c | ||
|
|
44e1a405f0 | ||
|
|
aaa8ab3856 | ||
|
|
5f9bb1c160 | ||
|
|
357a020828 | ||
|
|
5e0c113c7b | ||
|
|
8056e7e3e3 | ||
|
|
1a25fdffbb | ||
|
|
1632e5287a | ||
|
|
381f5edbd5 | ||
|
|
031167fbea | ||
|
|
3da85f415d | ||
|
|
8ac38a076b | ||
|
|
c80ea7ae89 | ||
|
|
1b6ab6b3bb | ||
|
|
aa8854db53 | ||
|
|
c57fc74e18 | ||
|
|
28892bb07f | ||
|
|
82935ad3be | ||
|
|
332351efaf | ||
|
|
d753719891 | ||
|
|
77d0409c5b | ||
|
|
7d07770244 | ||
|
|
24399daefe | ||
|
|
08706ba6b2 | ||
|
|
787a441343 | ||
|
|
c4db223a64 | ||
|
|
31c7f3eaba | ||
|
|
be69470d55 | ||
|
|
7b6101bc6d | ||
|
|
1569be7866 | ||
|
|
2265ffc0a7 | ||
|
|
d616cb88aa | ||
|
|
15ecf5d821 | ||
|
|
dc8ab7cd2a | ||
|
|
48a5143485 | ||
|
|
f6a9af0aa4 | ||
|
|
483e2ca8d0 | ||
|
|
d983225683 | ||
|
|
d8d88b948a | ||
|
|
31339737a6 | ||
|
|
2494c7d3ed | ||
|
|
2320370fd2 | ||
|
|
9d2f3b5ee9 | ||
|
|
294bf27985 | ||
|
|
3d8754cd3c | ||
|
|
0228d16990 | ||
|
|
c32a325c11 | ||
|
|
d28f8bc7ee | ||
|
|
a6dce27ffa | ||
|
|
6d08d9aa9f | ||
|
|
8125320093 | ||
|
|
ecaaa8a1b5 | ||
|
|
b9bc628189 | ||
|
|
0e6794f2f5 | ||
|
|
9179b7464b | ||
|
|
15a494c189 | ||
|
|
19f0181756 | ||
|
|
8d681d68d7 | ||
|
|
25c98f8054 | ||
|
|
78c8fbbe00 | ||
|
|
f192be3667 | ||
|
|
05ce3445b5 | ||
|
|
a1aa080956 | ||
|
|
a8c8ea69e3 | ||
|
|
fc86faf51e | ||
|
|
f538546c4d | ||
|
|
71d7b14320 | ||
|
|
7330b3520f | ||
|
|
6b100b60f8 | ||
|
|
08009f8edc | ||
|
|
b60bd73f88 | ||
|
|
af230c812b | ||
|
|
5f104b0e0e | ||
|
|
9bf0d0ace0 | ||
|
|
56a17f7c8e | ||
|
|
522a92586a | ||
|
|
c142296f3f | ||
|
|
d27b4831d6 | ||
|
|
7aa213a5ce | ||
|
|
44e770aa0b | ||
|
|
99c99a9ce9 | ||
|
|
346ee6ba5f | ||
|
|
32e97b6422 | ||
|
|
f1c04096e5 | ||
|
|
89d40d38d9 | ||
|
|
460c66ab3f | ||
|
|
15c99ec9e7 | ||
|
|
4a0a4941af | ||
|
|
dbf78bf214 | ||
|
|
02ed2289e6 | ||
|
|
55e7e481d4 | ||
|
|
f874276d0f | ||
|
|
1585e6b424 | ||
|
|
103393fee6 | ||
|
|
eeff75ba20 | ||
|
|
f7b8969c72 | ||
|
|
74cec6594e | ||
|
|
af27af8d42 | ||
|
|
73e1cbc0b9 | ||
|
|
d62fba024b | ||
|
|
ae49b556ce | ||
|
|
2a76027cce | ||
|
|
c8026873b4 | ||
|
|
7ffe71d12f | ||
|
|
c02705c53c | ||
|
|
2074534b72 | ||
|
|
27e446a0b0 | ||
|
|
c35c72c551 | ||
|
|
4bfffa3806 | ||
|
|
42eac6f846 | ||
|
|
261cec1d20 | ||
|
|
725d9b4bbf | ||
|
|
b7105093e2 | ||
|
|
9274df0f11 | ||
|
|
351cb3e6ca | ||
|
|
bb5e2b98e9 | ||
|
|
e3992527fb | ||
|
|
1b7a77f5cb | ||
|
|
1ce6c2aee1 | ||
|
|
314fcabbeb | ||
|
|
f742c5eb8a | ||
|
|
0ddd053e88 | ||
|
|
169d8fa480 | ||
|
|
9bfef1f6e5 | ||
|
|
08f2121544 | ||
|
|
40879a5784 | ||
|
|
977d148c40 | ||
|
|
1f430227aa | ||
|
|
8dac933a66 | ||
|
|
1e07ef13cf | ||
|
|
af0a24a5bc | ||
|
|
56ef085412 | ||
|
|
bcab0e3754 | ||
|
|
10d8135dcc | ||
|
|
6021e07761 | ||
|
|
f6ac0d5877 | ||
|
|
1810d810d8 | ||
|
|
0998ddefa2 | ||
|
|
82ca5145c2 | ||
|
|
377fe80046 | ||
|
|
eb48765a5a | ||
|
|
09db3ddd5c | ||
|
|
39765903d4 | ||
|
|
d9cfbf592e | ||
|
|
6d18842dd3 | ||
|
|
438d591d5b | ||
|
|
c474ca2c5f | ||
|
|
be04bea2b6 | ||
|
|
5db72a6916 | ||
|
|
453f26817a | ||
|
|
51c11a21fa | ||
|
|
cd9e37bac5 | ||
|
|
3d7450b308 | ||
|
|
48176ea986 | ||
|
|
621426ac55 | ||
|
|
5d8eeba0dd | ||
|
|
6fe83d1f06 | ||
|
|
a06f78b2d5 | ||
|
|
5c1ce23780 | ||
|
|
47855eae0b | ||
|
|
5dd1ada8dd | ||
|
|
c94fc73c11 | ||
|
|
d846ae64ea | ||
|
|
f16b18371e | ||
|
|
4b8e655948 | ||
|
|
79e1b0c5d8 | ||
|
|
de3f3e6e61 | ||
|
|
793dbc6e7f | ||
|
|
d1e823bf39 | ||
|
|
873deaa92d | ||
|
|
78ac1ee69c | ||
|
|
5a27961102 | ||
|
|
3786954a65 | ||
|
|
bd5536dbf9 | ||
|
|
6b9e8c3039 | ||
|
|
9d33b03be9 | ||
|
|
351928a1e0 | ||
|
|
b20558cb99 | ||
|
|
764677431f | ||
|
|
a10b0c7786 | ||
|
|
a72bae9e2f | ||
|
|
f91908f627 | ||
|
|
c5ad2c03a2 | ||
|
|
6decb4cb4a | ||
|
|
1ad59057d8 | ||
|
|
cfb20048bb | ||
|
|
92539589d8 | ||
|
|
b8739baef4 | ||
|
|
fcfe7fae54 | ||
|
|
a2c1aa2c4c | ||
|
|
a9ff5c799e | ||
|
|
173517985e | ||
|
|
87c86beb38 | ||
|
|
d13d2c6dda | ||
|
|
620e3a803d | ||
|
|
4e0bd557d9 | ||
|
|
7deda52bd9 | ||
|
|
22f20a38ec | ||
|
|
b764046587 | ||
|
|
d38f520805 | ||
|
|
56e2af9efc | ||
|
|
51d73b1672 | ||
|
|
092f830c3c | ||
|
|
b30a42ab9e | ||
|
|
c543930ac4 | ||
|
|
c6f9d447f7 | ||
|
|
737bc6a965 | ||
|
|
e39838455e | ||
|
|
94b40775a1 | ||
|
|
7efef73ff7 | ||
|
|
8bf1c96065 | ||
|
|
c7fd1ae535 | ||
|
|
008a458fe9 | ||
|
|
fbc6c30b62 | ||
|
|
c64eb3507c | ||
|
|
1b33c52eac | ||
|
|
accc941818 | ||
|
|
0c20466f2c | ||
|
|
c4cf6372e3 | ||
|
|
3e4b5fd0d7 | ||
|
|
3f3416c13e | ||
|
|
7798584e1c | ||
|
|
d59063d79f | ||
|
|
a6edfb498f | ||
|
|
ab04b30726 | ||
|
|
dc4f59e664 | ||
|
|
8738f6dd98 | ||
|
|
039766b492 | ||
|
|
2da970a26c | ||
|
|
86e1f33231 | ||
|
|
702fbac1c0 | ||
|
|
7483ddf2b2 | ||
|
|
78b041465e | ||
|
|
5e3aa305fd | ||
|
|
703478c13d | ||
|
|
8d53c10643 | ||
|
|
025c98ced8 | ||
|
|
8e214ca8fb | ||
|
|
23265061b2 | ||
|
|
9d985d3d8f | ||
|
|
03477d407e | ||
|
|
2dd88e5a4e | ||
|
|
2452d90300 | ||
|
|
508f97b08e | ||
|
|
3f67f512ec | ||
|
|
fdc3028124 | ||
|
|
3a3eea0320 | ||
|
|
d95a6f2af7 | ||
|
|
a3d3c74e67 | ||
|
|
c2db647379 | ||
|
|
6cc3423cbe | ||
|
|
eb658a75ab | ||
|
|
b2205fc6e1 | ||
|
|
5768ade198 | ||
|
|
b0727cc532 | ||
|
|
9e8af67202 | ||
|
|
69d0fbe419 | ||
|
|
7b050a4c31 | ||
|
|
96085213fe | ||
|
|
2ce2b457bf | ||
|
|
a2171aa27b | ||
|
|
ea3d71c0df | ||
|
|
b154be24ec | ||
|
|
3590c9172c | ||
|
|
e981868246 | ||
|
|
5ee8045916 | ||
|
|
36086722b3 | ||
|
|
8edd5946e5 | ||
|
|
a0b2a28ee2 | ||
|
|
39a845ad31 | ||
|
|
669bdc7e38 | ||
|
|
5d4c073730 | ||
|
|
48ca83f31d | ||
|
|
fff4060b31 | ||
|
|
9fdda038a9 | ||
|
|
ef67409d61 | ||
|
|
d90472014d | ||
|
|
a2b67b933e | ||
|
|
b98e881d84 | ||
|
|
e978621597 | ||
|
|
5fe52b9cfe | ||
|
|
5c6d00d545 | ||
|
|
6429a5b31a | ||
|
|
e68c8305a2 | ||
|
|
e095d382b3 | ||
|
|
25ada15546 | ||
|
|
5581f0909a | ||
|
|
462b86df8d | ||
|
|
6645625e6b | ||
|
|
cfb68d73a0 | ||
|
|
9574f43f87 | ||
|
|
a53be65ab0 | ||
|
|
cc989c5c08 | ||
|
|
313224e6f5 | ||
|
|
2adb29ffc0 | ||
|
|
80ccd62d38 | ||
|
|
b81ff45d34 | ||
|
|
81b78dd2b2 | ||
|
|
e2302a6c9b | ||
|
|
2486b79450 | ||
|
|
0b52ef6eb0 | ||
|
|
a533620684 | ||
|
|
09d8d0f362 | ||
|
|
4e067835c3 | ||
|
|
37278f2cd3 | ||
|
|
16d2a3096a | ||
|
|
083509eb97 | ||
|
|
0c154deeec | ||
|
|
082c9707c0 | ||
|
|
15798ee168 | ||
|
|
e37b7eae3f | ||
|
|
ae2d588f46 | ||
|
|
12d93d0805 | ||
|
|
2549688bdf | ||
|
|
c2ed799113 | ||
|
|
71526ac79f | ||
|
|
3d685ef96c | ||
|
|
2fdde6218a | ||
|
|
09693d14d1 | ||
|
|
dcaeb20e29 | ||
|
|
d93ec3bb91 | ||
|
|
f29852f6f0 | ||
|
|
7d5fc84747 | ||
|
|
4a3a5174b2 | ||
|
|
e0d094b2aa | ||
|
|
e3190b86ab | ||
|
|
b9b0a573e5 | ||
|
|
0dbfbd8dfc | ||
|
|
6e42d9113b | ||
|
|
460fb7ec29 | ||
|
|
c86a2b643a | ||
|
|
b2042f48cd | ||
|
|
d276f37e87 | ||
|
|
7c88ee7cff | ||
|
|
93ddc4a5ba | ||
|
|
9f12747d9b | ||
|
|
5a086a9173 | ||
|
|
e1067ffe67 | ||
|
|
d5f537aae4 | ||
|
|
5b12483416 | ||
|
|
07eb541806 | ||
|
|
065a3aa2f5 | ||
|
|
2aa2d79de2 | ||
|
|
a0deab901d | ||
|
|
4bc4ca1ba9 | ||
|
|
ac8e8961ce | ||
|
|
2c51925638 | ||
|
|
e0eac875b6 | ||
|
|
9ac08c263b | ||
|
|
658a2de619 | ||
|
|
a487a51135 | ||
|
|
2d58f60a53 | ||
|
|
faa49687be | ||
|
|
3ddf941cd7 | ||
|
|
37dece2cd8 | ||
|
|
1ead82f9b8 | ||
|
|
48dbf5a3dc | ||
|
|
0a95550fc0 | ||
|
|
1c2b312d49 | ||
|
|
62e08d2b7e | ||
|
|
f34adaca41 | ||
|
|
aaf5d64fe0 | ||
|
|
3f5fb4b61c | ||
|
|
f9254126e5 | ||
|
|
4676d7ef02 | ||
|
|
42b8dbb58f | ||
|
|
b7c0914f33 | ||
|
|
c8a2057410 | ||
|
|
64e42bebe2 | ||
|
|
7275ce906e | ||
|
|
7ed97eeec4 | ||
|
|
0bb40de1c4 | ||
|
|
bd7808a104 | ||
|
|
4842d589a6 | ||
|
|
11c541adc6 | ||
|
|
c746cfddfe | ||
|
|
2b7f8d8298 | ||
|
|
fe6f9aae61 | ||
|
|
8bc07c45f5 | ||
|
|
058afad9eb | ||
|
|
1e6eca1787 | ||
|
|
89b0028684 | ||
|
|
d80087f6d5 | ||
|
|
b0df4d3604 | ||
|
|
c32ff3a7ee | ||
|
|
4c55044440 | ||
|
|
b13627398b | ||
|
|
b30ec71098 | ||
|
|
649ca2eeac | ||
|
|
98546e1876 | ||
|
|
7e79814cb0 | ||
|
|
ac403d0dfa | ||
|
|
72f3730c34 | ||
|
|
aa9a4c30d3 | ||
|
|
3a2145e5fa | ||
|
|
333a22496c | ||
|
|
488dc1849d | ||
|
|
e718be72e3 | ||
|
|
9dd1bae3c7 | ||
|
|
718ac02806 | ||
|
|
7bab200e4d | ||
|
|
f5ef022ef5 | ||
|
|
5a302684f7 | ||
|
|
7d6f077cf8 | ||
|
|
b853bda2a2 | ||
|
|
abdd3190fe | ||
|
|
5894001eb2 | ||
|
|
8ae8fea6d2 | ||
|
|
81e077da5e | ||
|
|
dc65cbb08c | ||
|
|
8596f15ae7 | ||
|
|
a302269bb4 | ||
|
|
d7491ca14d | ||
|
|
700a2e8df1 | ||
|
|
e5b2ec7e2f | ||
|
|
2b1910c1c1 | ||
|
|
d046a2800d | ||
|
|
b4d44541bb | ||
|
|
cb7bcaf939 | ||
|
|
4ee40e348c | ||
|
|
f07463024c | ||
|
|
9853d8bfd6 | ||
|
|
0ed47fcd2b | ||
|
|
098ab9e428 | ||
|
|
49095ccba6 | ||
|
|
1f4affcb1e | ||
|
|
437f0df0f3 | ||
|
|
14dcb70b95 | ||
|
|
c88a63edf8 | ||
|
|
ffdd58ffb4 | ||
|
|
3a797b1efa | ||
|
|
8aea86613e | ||
|
|
7f59463e3b | ||
|
|
585ba81492 | ||
|
|
c1ba645dce | ||
|
|
811ac6eb6c | ||
|
|
53f5562468 | ||
|
|
c84df9cc0f | ||
|
|
e5d97e72e4 | ||
|
|
fe236316de | ||
|
|
27bb7d8c7a | ||
|
|
566f03beca | ||
|
|
07f2df7e66 | ||
|
|
fb0d8c348a | ||
|
|
f0c86741a4 | ||
|
|
a29890368c | ||
|
|
9c69c1a277 | ||
|
|
be31fb08f1 | ||
|
|
1321a623bd | ||
|
|
fde8d17e8d | ||
|
|
c43185ce3f | ||
|
|
3d80ec1f47 | ||
|
|
86ba622455 | ||
|
|
2872b5c5d3 | ||
|
|
723d97971d | ||
|
|
7d758d401e | ||
|
|
15b8d4711e | ||
|
|
3f63f65674 | ||
|
|
24dc7f4a91 | ||
|
|
f5cc1d1c7e | ||
|
|
b973d6055d | ||
|
|
ded65340fe | ||
|
|
4bb71c56ad | ||
|
|
ff06a18155 | ||
|
|
9395ce3fda | ||
|
|
60dbb81883 | ||
|
|
d4348bd726 | ||
|
|
3d7ecd16aa | ||
|
|
49a59f8929 | ||
|
|
bf6ee28dae | ||
|
|
80032e9658 | ||
|
|
7780cbfb83 | ||
|
|
47e9ef070e | ||
|
|
ec199e5e49 | ||
|
|
8031961205 | ||
|
|
7bad4ca535 | ||
|
|
68132e2a8f | ||
|
|
408df750be | ||
|
|
03d3b8c03c | ||
|
|
9d8360641f | ||
|
|
d6ee715d83 | ||
|
|
351d86e149 | ||
|
|
0f62fecca2 | ||
|
|
6ffb82fb6d | ||
|
|
a2be30d257 | ||
|
|
8cf7c41ad9 | ||
|
|
5e40f9904d | ||
|
|
059dad747d | ||
|
|
7d3903463c | ||
|
|
04a24680a6 | ||
|
|
d70dea5072 | ||
|
|
778e0cd402 | ||
|
|
9317fe21b2 | ||
|
|
8be3517c6d | ||
|
|
ed6ddbb8de | ||
|
|
77949ac4f7 | ||
|
|
8c7417b735 | ||
|
|
008bc6da28 | ||
|
|
faa66f1636 | ||
|
|
cb5d7190c4 | ||
|
|
6cf3913c8e | ||
|
|
9225493a93 | ||
|
|
4267207c7f | ||
|
|
cafd2af96d | ||
|
|
544483ae1f | ||
|
|
e8114b5dc6 | ||
|
|
87b9549ff4 | ||
|
|
5a5a9314f3 | ||
|
|
4fc36a9053 | ||
|
|
8279e7e01c | ||
|
|
f77fceb1b2 | ||
|
|
4ea2246333 | ||
|
|
832b8fc038 | ||
|
|
2d537b6909 | ||
|
|
ea33ab308e | ||
|
|
e0639602e6 | ||
|
|
296c23784f | ||
|
|
3132fa175a | ||
|
|
20637bcacc | ||
|
|
a01ee87749 | ||
|
|
4c86079654 | ||
|
|
291e645d77 | ||
|
|
8e467788a3 | ||
|
|
71e40a7299 | ||
|
|
d9847ed1f3 | ||
|
|
db95414cf1 | ||
|
|
df7de2ef71 | ||
|
|
731ba32e81 | ||
|
|
32197a8405 | ||
|
|
2570f7d75c | ||
|
|
f65eb546b7 | ||
|
|
aeb42b1059 | ||
|
|
0d3cd2d466 | ||
|
|
76217ffa8f | ||
|
|
b27a884bda | ||
|
|
85d1459372 | ||
|
|
e5a91d30bf | ||
|
|
3fc0cc3e92 | ||
|
|
44cc7a308a | ||
|
|
c1e80ac38a | ||
|
|
be090552f8 | ||
|
|
e54ccb1302 | ||
|
|
2036e9d9a8 | ||
|
|
1b850ff616 | ||
|
|
a5a83da045 | ||
|
|
751b6c28b5 | ||
|
|
4c660f2155 | ||
|
|
701f21186b | ||
|
|
1317e4254b | ||
|
|
589663d7d9 | ||
|
|
884d9db54b | ||
|
|
617440e1db | ||
|
|
5372467569 | ||
|
|
9089750e21 | ||
|
|
2f9a29f663 | ||
|
|
447a1c9dd7 | ||
|
|
530eb3972b | ||
|
|
5d098fe4b0 | ||
|
|
3a50c17110 | ||
|
|
85b40ee4f0 | ||
|
|
9e85fb3de3 | ||
|
|
181bec62ce | ||
|
|
9c7691c891 | ||
|
|
14036b7aeb | ||
|
|
02c3863e8c | ||
|
|
6683522491 | ||
|
|
ee679e39e5 | ||
|
|
db1eb75298 | ||
|
|
cb3801a5e8 | ||
|
|
73b6b95fbc | ||
|
|
18f055fa5e | ||
|
|
9e90350e44 | ||
|
|
65d9f88c63 | ||
|
|
eca8e706dd | ||
|
|
b41557b54b | ||
|
|
0ccf2dad22 | ||
|
|
2097d37f76 | ||
|
|
0ca4426dd0 | ||
|
|
bc3c857b35 | ||
|
|
b948f43dda | ||
|
|
f7214b7cfe | ||
|
|
75f887f5dc | ||
|
|
e10dd6a80f | ||
|
|
960433dd90 | ||
|
|
32e3da7857 | ||
|
|
2a4ba132ad | ||
|
|
6e7ca8c4b0 | ||
|
|
7dc6181d1e | ||
|
|
921c0ac71a | ||
|
|
ad656a9d41 | ||
|
|
56cc1f0aaf | ||
|
|
bf56a6723b | ||
|
|
179bac3fd0 | ||
|
|
08df09af96 | ||
|
|
3c1dc18656 | ||
|
|
12276b6033 | ||
|
|
a12a02cc14 | ||
|
|
740d411524 | ||
|
|
2e68c6ff75 | ||
|
|
102ffd141c | ||
|
|
a0271c7656 | ||
|
|
358af42c50 | ||
|
|
48e257e5af | ||
|
|
36f76f5e2c | ||
|
|
ab642344d4 | ||
|
|
e230787f21 | ||
|
|
b563040cf3 | ||
|
|
addcf2c6e2 | ||
|
|
3f563d8cbf | ||
|
|
88c0968cab | ||
|
|
e5407ab2bd | ||
|
|
13db981445 | ||
|
|
446c2a19a5 | ||
|
|
0e03712a85 | ||
|
|
b18001ce57 | ||
|
|
f46cab6862 | ||
|
|
20c9082b8d | ||
|
|
e20f26c500 | ||
|
|
048c90a695 | ||
|
|
dca9745e97 | ||
|
|
45fa74ae46 | ||
|
|
f92b0961ee | ||
|
|
57ed02a9aa | ||
|
|
3e09f1bf40 | ||
|
|
91ca746c27 | ||
|
|
a2f626046a | ||
|
|
32cdfa2969 | ||
|
|
c71315f8cd | ||
|
|
57a2559f11 | ||
|
|
850afd7402 | ||
|
|
ddf7f04c94 | ||
|
|
9bee91b6f6 | ||
|
|
b3ca172f3a | ||
|
|
9fa29457a4 | ||
|
|
459c6ab796 | ||
|
|
da9f9017a9 | ||
|
|
94d2ad9584 | ||
|
|
9229156cf6 | ||
|
|
02f9b72d3e | ||
|
|
c0ef0a893d | ||
|
|
a60cfd3cc3 | ||
|
|
d4a3e4d92c | ||
|
|
5afa4f1995 | ||
|
|
0c8226ff39 | ||
|
|
065bda37b4 | ||
|
|
a2edf317a9 | ||
|
|
f86f58dc56 | ||
|
|
f0debdd513 | ||
|
|
6ead597b43 | ||
|
|
9a47e574e3 | ||
|
|
0bd77937de | ||
|
|
6a43c3d90b | ||
|
|
9dd357a9ee | ||
|
|
1a756efe82 | ||
|
|
18e4b30634 | ||
|
|
6589f82e77 | ||
|
|
3f089f31a3 | ||
|
|
0fcfe63092 | ||
|
|
d55555c544 | ||
|
|
90004119af | ||
|
|
f8497d4e7a | ||
|
|
eb3cd689a1 | ||
|
|
3687472201 | ||
|
|
b372f08a59 | ||
|
|
5198a881b7 | ||
|
|
233736897d | ||
|
|
cd5243ac6d | ||
|
|
d1f5511566 | ||
|
|
6fce58f2ad | ||
|
|
26bbc0e877 | ||
|
|
98b7603ebd | ||
|
|
f9087475d4 | ||
|
|
dbb4a46d46 | ||
|
|
3012778def | ||
|
|
4c9853f10d | ||
|
|
5448de2d3f | ||
|
|
a92595012f | ||
|
|
c933771016 | ||
|
|
ed5fc20ee2 | ||
|
|
a0ff0e30fb | ||
|
|
3def9792be | ||
|
|
a7b8d77ed7 | ||
|
|
cb0a914099 | ||
|
|
21333490ef | ||
|
|
5f5818ba78 | ||
|
|
c4d9ef9210 | ||
|
|
52780079f3 | ||
|
|
6475a70514 | ||
|
|
296d22ad83 | ||
|
|
c79614786f | ||
|
|
c7ae5024d5 | ||
|
|
f403e61b66 | ||
|
|
86fb879a0e | ||
|
|
ab5632d5eb | ||
|
|
eee23aa642 | ||
|
|
bb25e85834 | ||
|
|
375e2e0d13 | ||
|
|
9450065850 | ||
|
|
98ce8a298a | ||
|
|
7286d13d19 | ||
|
|
530cc19f58 | ||
|
|
bfa26be7f0 | ||
|
|
ca4db8871e | ||
|
|
146da066b0 | ||
|
|
12dc2c418d | ||
|
|
1c5cb63aff | ||
|
|
794bd50ed1 | ||
|
|
26b3bc3f74 | ||
|
|
64e6570f00 | ||
|
|
783b7516a7 | ||
|
|
abd0748a77 | ||
|
|
fb51ef569e | ||
|
|
b54cf2edca | ||
|
|
55e50144f3 | ||
|
|
a2f4628590 | ||
|
|
ce14696165 | ||
|
|
29c3c0cf7f | ||
|
|
3e2a1c4eca | ||
|
|
17ce84dd0a | ||
|
|
5839e7cda8 | ||
|
|
ebf5e871e0 | ||
|
|
5370bb4515 | ||
|
|
be386e77f2 | ||
|
|
a026f339c3 |
No files matched your search
@@ -0,0 +1,14 @@
|
||||
.git
|
||||
web/node_modules
|
||||
web/*.log
|
||||
web/regression
|
||||
web/**/tests/
|
||||
web/**/*.pyc
|
||||
web/**/__pycache__
|
||||
.DS_Store
|
||||
web/pgadmin/messages.pot
|
||||
web/pgadmin/translations/??/LC_MESSAGES/messages.po
|
||||
Dockerfile
|
||||
docs/en_US/_build/**/*
|
||||
src-build/**/*
|
||||
dist/**/*
|
||||
@@ -19,11 +19,12 @@
|
||||
/redhat-build
|
||||
/src-build
|
||||
/win-build
|
||||
/win-temp
|
||||
_build
|
||||
/build-*
|
||||
pgadmin4.log
|
||||
pkg/win32/installer.iss
|
||||
pkg/mac/codesign.conf
|
||||
pkg/mac/codesign.confx
|
||||
pkg/mac/framework.conf
|
||||
runtime/.qmake.cache
|
||||
runtime/.qmake.stash
|
||||
@@ -51,4 +52,8 @@ auditjs.html
|
||||
auditpy.txt
|
||||
/venv/
|
||||
.scannerwork/
|
||||
web/coverage/
|
||||
web/coverage/
|
||||
web/.coverage
|
||||
web/regression/.coverage
|
||||
web/regression/covhtml/
|
||||
web/regression/htmlcov/
|
||||
@@ -12,19 +12,22 @@
|
||||
# and clean up the web/ source code
|
||||
#########################################################################
|
||||
|
||||
FROM node:12-alpine3.11 AS app-builder
|
||||
FROM alpine:3.15 AS app-builder
|
||||
|
||||
RUN apk add --no-cache \
|
||||
autoconf \
|
||||
automake \
|
||||
bash \
|
||||
g++ \
|
||||
git \
|
||||
libc6-compat \
|
||||
libjpeg-turbo-dev \
|
||||
libpng-dev \
|
||||
libtool \
|
||||
make \
|
||||
nasm \
|
||||
git \
|
||||
nodejs \
|
||||
yarn \
|
||||
zlib-dev
|
||||
|
||||
# Create the /pgadmin4 directory and copy the source into it. Explicitly
|
||||
@@ -41,15 +44,8 @@ RUN rm -rf /pgadmin4/web/*.log \
|
||||
WORKDIR /pgadmin4/web
|
||||
|
||||
# Build the JS vendor code in the app-builder, and then remove the vendor source.
|
||||
RUN npm install && \
|
||||
npm audit fix && \
|
||||
rm -f yarn.lock && \
|
||||
yarn import && \
|
||||
# Commented the below line to avoid vulnerability in lodash package.
|
||||
# Refer https://www.npmjs.com/advisories/1523.
|
||||
# Once fixed we will uncomment it.
|
||||
# yarn audit && \
|
||||
rm -f package-lock.json && \
|
||||
RUN export CPPFLAGS="-DPNG_ARM_NEON_OPT=0" && \
|
||||
yarn install && \
|
||||
yarn run bundle && \
|
||||
rm -rf node_modules \
|
||||
yarn.lock \
|
||||
@@ -60,28 +56,42 @@ RUN npm install && \
|
||||
karma.conf.js \
|
||||
./pgadmin/static/js/generated/.cache
|
||||
|
||||
#########################################################################
|
||||
# Next, create the base environment for Python
|
||||
#########################################################################
|
||||
|
||||
FROM alpine:3.15 as env-builder
|
||||
|
||||
# Install dependencies
|
||||
COPY requirements.txt /
|
||||
RUN apk add --no-cache \
|
||||
make \
|
||||
python3 \
|
||||
py3-pip && \
|
||||
apk add --no-cache --virtual build-deps \
|
||||
build-base \
|
||||
openssl-dev \
|
||||
libffi-dev \
|
||||
postgresql-dev \
|
||||
krb5-dev \
|
||||
rust \
|
||||
cargo \
|
||||
zlib-dev \
|
||||
libjpeg-turbo-dev \
|
||||
libpng-dev \
|
||||
python3-dev && \
|
||||
python3 -m venv --system-site-packages --without-pip /venv && \
|
||||
/venv/bin/python3 -m pip install --no-cache-dir -r requirements.txt && \
|
||||
apk del --no-cache build-deps
|
||||
|
||||
#########################################################################
|
||||
# Now, create a documentation build container for the Sphinx docs
|
||||
#########################################################################
|
||||
|
||||
FROM python:3.8-alpine3.11 as docs-builder
|
||||
FROM env-builder as docs-builder
|
||||
|
||||
# Install only dependencies absolutely required for documentation building
|
||||
RUN apk add --no-cache \
|
||||
make \
|
||||
build-base \
|
||||
openssl-dev \
|
||||
libffi-dev && \
|
||||
pip install --no-cache-dir \
|
||||
sphinx \
|
||||
flask_security_too \
|
||||
flask_paranoid \
|
||||
python-dateutil \
|
||||
flask_sqlalchemy \
|
||||
flask_gravatar \
|
||||
flask_migrate \
|
||||
simplejson \
|
||||
cryptography
|
||||
# Install Sphinx
|
||||
RUN /venv/bin/python3 -m pip install --no-cache-dir sphinx
|
||||
|
||||
# Copy the docs from the local tree. Explicitly remove any existing builds that
|
||||
# may be present
|
||||
@@ -90,31 +100,26 @@ COPY web /pgadmin4/web
|
||||
RUN rm -rf /pgadmin4/docs/en_US/_build
|
||||
|
||||
# Build the docs
|
||||
RUN LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 make -C /pgadmin4/docs/en_US -f Makefile.sphinx html
|
||||
RUN LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 /venv/bin/sphinx-build /pgadmin4/docs/en_US /pgadmin4/docs/en_US/_build/html
|
||||
|
||||
# Cleanup unwanted files
|
||||
RUN rm -rf /pgadmin4/docs/en_US/_build/html/.doctrees
|
||||
RUN rm -rf /pgadmin4/docs/en_US/_build/html/_sources
|
||||
RUN rm -rf /pgadmin4/docs/en_US/_build/html/_static/*.png
|
||||
|
||||
#########################################################################
|
||||
# Create additional builders to get all of the PostgreSQL utilities
|
||||
#########################################################################
|
||||
|
||||
FROM postgres:9.5-alpine as pg95-builder
|
||||
FROM postgres:9.6-alpine as pg96-builder
|
||||
FROM postgres:10-alpine as pg10-builder
|
||||
FROM postgres:11-alpine as pg11-builder
|
||||
FROM postgres:12-alpine as pg12-builder
|
||||
FROM postgres:13-alpine as pg13-builder
|
||||
FROM postgres:14-alpine as pg14-builder
|
||||
|
||||
FROM alpine:3.11 as tool-builder
|
||||
FROM alpine:3.15 as tool-builder
|
||||
|
||||
# Copy the PG binaries
|
||||
COPY --from=pg95-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-9.5/
|
||||
COPY --from=pg95-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-9.5/
|
||||
COPY --from=pg95-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-9.5/
|
||||
COPY --from=pg95-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-9.5/
|
||||
|
||||
COPY --from=pg96-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-9.6/
|
||||
COPY --from=pg96-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-9.6/
|
||||
COPY --from=pg96-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-9.6/
|
||||
COPY --from=pg96-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-9.6/
|
||||
|
||||
COPY --from=pg10-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-10/
|
||||
COPY --from=pg10-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-10/
|
||||
COPY --from=pg10-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-10/
|
||||
@@ -130,13 +135,30 @@ COPY --from=pg12-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-12/
|
||||
COPY --from=pg12-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-12/
|
||||
COPY --from=pg12-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-12/
|
||||
|
||||
COPY --from=pg13-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-13/
|
||||
COPY --from=pg13-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-13/
|
||||
COPY --from=pg13-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-13/
|
||||
COPY --from=pg13-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-13/
|
||||
|
||||
COPY --from=pg14-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-14/
|
||||
COPY --from=pg14-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-14/
|
||||
COPY --from=pg14-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-14/
|
||||
COPY --from=pg14-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-14/
|
||||
|
||||
#########################################################################
|
||||
# Assemble everything into the final container.
|
||||
#########################################################################
|
||||
|
||||
FROM python:3.8-alpine3.11
|
||||
FROM alpine:3.15
|
||||
|
||||
# Copy in the Python packages
|
||||
COPY --from=env-builder /venv /venv
|
||||
|
||||
# Copy in the tools
|
||||
COPY --from=tool-builder /usr/local/pgsql /usr/local/
|
||||
COPY --from=pg14-builder /usr/local/lib/libpq.so.5.14 /usr/lib/
|
||||
RUN ln -s libpq.so.5.14 /usr/lib/libpq.so.5 && \
|
||||
ln -s libpq.so.5.14 /usr/lib/libpq.so
|
||||
|
||||
WORKDIR /pgadmin4
|
||||
ENV PYTHONPATH=/pgadmin4
|
||||
@@ -144,54 +166,37 @@ ENV PYTHONPATH=/pgadmin4
|
||||
# Copy in the code and docs
|
||||
COPY --from=app-builder /pgadmin4/web /pgadmin4
|
||||
COPY --from=docs-builder /pgadmin4/docs/en_US/_build/html/ /pgadmin4/docs
|
||||
COPY requirements.txt /pgadmin4/requirements.txt
|
||||
COPY pkg/docker/run_pgadmin.py /pgadmin4
|
||||
COPY pkg/docker/gunicorn_config.py /pgadmin4
|
||||
COPY pkg/docker/entrypoint.sh /entrypoint.sh
|
||||
|
||||
# License files
|
||||
COPY LICENSE /pgadmin4/LICENSE
|
||||
COPY DEPENDENCIES /pgadmin4/DEPENDENCIES
|
||||
|
||||
# Install build-dependencies, build & install C extensions and purge deps in
|
||||
# one RUN step
|
||||
RUN apk add --no-cache --virtual \
|
||||
build-deps \
|
||||
build-base \
|
||||
postgresql-dev \
|
||||
libffi-dev \
|
||||
linux-headers && \
|
||||
apk add \
|
||||
# Install runtime dependencies and configure everything in one RUN step
|
||||
RUN apk add \
|
||||
python3 \
|
||||
py3-pip \
|
||||
postfix \
|
||||
postgresql-client \
|
||||
postgresql-libs \
|
||||
krb5-libs \
|
||||
libjpeg-turbo \
|
||||
shadow \
|
||||
sudo \
|
||||
libedit \
|
||||
libldap \
|
||||
libcap && \
|
||||
pip install --upgrade pip && \
|
||||
pip install --no-cache-dir -r requirements.txt && \
|
||||
pip install --no-cache-dir gunicorn==19.9.0 && \
|
||||
apk del --no-cache build-deps && \
|
||||
echo "pgadmin ALL = NOPASSWD: /usr/sbin/postfix start" > /etc/sudoers.d/postfix
|
||||
|
||||
# We need the v12 libpq, which is only in the 'edge' build of Alpine at present
|
||||
COPY --from=pg12-builder /usr/local/lib/libpq.so.5.12 /usr/lib/
|
||||
RUN ln -sf /usr/lib/libpq.so.5.12 /usr/lib/libpq.so.5
|
||||
|
||||
# Copy the runner script
|
||||
COPY pkg/docker/run_pgadmin.py /pgadmin4
|
||||
COPY pkg/docker/gunicorn_config.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 && \
|
||||
/venv/bin/python3 -m pip install --no-cache-dir gunicorn && \
|
||||
find / -type d -name '__pycache__' -exec rm -rf {} + && \
|
||||
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
|
||||
setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/python3.9 && \
|
||||
echo "pgadmin ALL = NOPASSWD: /usr/sbin/postfix start" > /etc/sudoers.d/postfix
|
||||
|
||||
USER pgadmin
|
||||
|
||||
# Finish up
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
pgAdmin 4
|
||||
|
||||
Copyright (C) 2013 - 2020, The pgAdmin Development Team
|
||||
Copyright (C) 2013 - 2022, The pgAdmin Development Team
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose, without fee, and without a written agreement is
|
||||
|
||||
@@ -3,6 +3,7 @@ SETLOCAL
|
||||
|
||||
SET WD=%CD%
|
||||
SET "BUILDROOT=%WD%\win-build"
|
||||
SET "TMPDIR=%WD%\win-temp"
|
||||
SET "DISTROOT=%WD%\dist"
|
||||
|
||||
SET CMDOPTIONS=""
|
||||
@@ -18,19 +19,13 @@ IF "%1" == "clean" (
|
||||
EXIT /B %ERRORLEVEL%
|
||||
)
|
||||
|
||||
set "ARCHITECTURE=x64"
|
||||
if "%Platform%" == "X86" (
|
||||
set "ARCHITECTURE=x86"
|
||||
)
|
||||
|
||||
REM Main build sequence
|
||||
CALL :SET_ENVIRONMENT
|
||||
CALL :VALIDATE_ENVIRONMENT || EXIT /B 1
|
||||
CALL :CLEAN || EXIT /B 1
|
||||
CALL :CREATE_VIRTUAL_ENV || EXIT /B 1
|
||||
CALL :CREATE_RUNTIME_ENV || EXIT /B 1
|
||||
CALL :CREATE_PYTHON_ENV || EXIT /B 1
|
||||
CALL :CLEANUP_ENV || EXIT /B 1
|
||||
CALL :CREATE_RUNTIME_ENV || EXIT /B 1
|
||||
CALL :CREATE_INSTALLER || EXIT /B 1
|
||||
CALL :SIGN_INSTALLER || EXIT /B 1
|
||||
|
||||
@@ -42,7 +37,10 @@ REM Main build sequence Ends
|
||||
ECHO Removing build directory...
|
||||
IF EXIST "%BUILDROOT%" RD "%BUILDROOT%" /S /Q > nul || EXIT /B 1
|
||||
|
||||
ECHO Removing temp build directory...
|
||||
ECHO Removing tmp directory...
|
||||
IF EXIST "%TMPDIR%" RD "%TMPDIR%" /S /Q > nul || EXIT /B 1
|
||||
|
||||
ECHO Removing installer build directory...
|
||||
IF EXIST "%WD%\pkg\win32\Output" rd "%WD%\pkg\win32\Output" /S /Q > nul || EXIT /B 1
|
||||
|
||||
ECHO Removing installer configuration script...
|
||||
@@ -54,14 +52,14 @@ REM Main build sequence Ends
|
||||
:SET_ENVIRONMENT
|
||||
ECHO Configuring the environment...
|
||||
IF "%PGADMIN_PYTHON_DIR%" == "" SET "PGADMIN_PYTHON_DIR=C:\Python38"
|
||||
IF "%PGADMIN_QT_DIR%" == "" SET "PGADMIN_QT_DIR=C:\Qt\5.14.2\msvc2017_64"
|
||||
IF "%PGADMIN_KRB5_DIR%" == "" SET "PGADMIN_KRB5_DIR=C:\Program Files\MIT\Kerberos"
|
||||
IF "%PGADMIN_POSTGRES_DIR%" == "" SET "PGADMIN_POSTGRES_DIR=C:\Program Files (x86)\PostgreSQL\12"
|
||||
IF "%PGADMIN_INNOTOOL_DIR%" == "" SET "PGADMIN_INNOTOOL_DIR=C:\Program Files (x86)\Inno Setup 6"
|
||||
IF "%PGADMIN_VCREDIST_DIR%" == "" SET "PGADMIN_VCREDIST_DIR=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Redist\MSVC\14.16.27012"
|
||||
IF "%PGADMIN_SIGNTOOL_DIR%" == "" SET "PGADMIN_SIGNTOOL_DIR=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64"
|
||||
|
||||
REM Set REDIST_NAME (the filename)
|
||||
set "VCREDIST_FILE=vcredist_%ARCHITECTURE%.exe"
|
||||
set "VCREDIST_FILE=vcredist_x64.exe"
|
||||
|
||||
REM Set additional variables we need
|
||||
FOR /F "tokens=3" %%a IN ('findstr /C:"APP_RELEASE =" %WD%\web\config.py') DO SET APP_MAJOR=%%a
|
||||
@@ -73,13 +71,13 @@ REM Main build sequence Ends
|
||||
FOR /F "tokens=2* DELims='" %%a IN ('findstr /C:"APP_NAME =" web\config.py') DO SET APP_NAME=%%a
|
||||
FOR /f "tokens=1 DELims=." %%G IN ('%PGADMIN_PYTHON_DIR%/python.exe -c "print('%APP_NAME%'.lower().replace(' ', ''))"') DO SET APP_SHORTNAME=%%G
|
||||
SET APP_VERSION=%APP_MAJOR%.%APP_MINOR%
|
||||
SET INSTALLERNAME=%APP_SHORTNAME%-%APP_MAJOR%.%APP_MINOR%-%APP_VERSION_SUFFIX%-%ARCHITECTURE%.exe
|
||||
IF "%APP_VERSION_SUFFIX%" == "" SET INSTALLERNAME=%APP_SHORTNAME%-%APP_MAJOR%.%APP_MINOR%-%ARCHITECTURE%.exe
|
||||
SET INSTALLERNAME=%APP_SHORTNAME%-%APP_MAJOR%.%APP_MINOR%-%APP_VERSION_SUFFIX%-x64.exe
|
||||
IF "%APP_VERSION_SUFFIX%" == "" SET INSTALLERNAME=%APP_SHORTNAME%-%APP_MAJOR%.%APP_MINOR%-x64.exe
|
||||
|
||||
REM get Python version for the runtime build ex. 2.7.1 will be 27
|
||||
REM get Python version for the runtime build ex. 3.9.2 will be 39
|
||||
FOR /f "tokens=1 DELims=." %%G IN ('%PGADMIN_PYTHON_DIR%/python.exe -c "import sys; print(sys.version.split(' ')[0])"') DO SET PYTHON_MAJOR=%%G
|
||||
FOR /f "tokens=2 DELims=." %%G IN ('%PGADMIN_PYTHON_DIR%/python.exe -c "import sys; print(sys.version.split(' ')[0])"') DO SET PYTHON_MINOR=%%G
|
||||
SET "PYTHON_VERSION=%PYTHON_MAJOR%%PYTHON_MINOR%"
|
||||
FOR /f "tokens=3 DELims=." %%G IN ('%PGADMIN_PYTHON_DIR%/python.exe -c "import sys; print(sys.version.split(' ')[0])"') DO SET PYTHON_REVISION=%%G
|
||||
|
||||
EXIT /B 0
|
||||
|
||||
@@ -93,10 +91,9 @@ REM Main build sequence Ends
|
||||
ECHO Installer name: %INSTALLERNAME%
|
||||
ECHO.
|
||||
ECHO Python directory: %PGADMIN_PYTHON_DIR%
|
||||
ECHO Python DLL: %PGADMIN_PYTHON_DIR%\Python%PYTHON_VERSION%.dll
|
||||
ECHO Python version: %PYTHON_MAJOR%.%PYTHON_MINOR%
|
||||
ECHO Python version: %PYTHON_MAJOR%.%PYTHON_MINOR%.%PYTHON_REVISION%
|
||||
ECHO.
|
||||
ECHO Qt directory: %PGADMIN_QT_DIR%
|
||||
ECHO KRB5 directory: %PGADMIN_KRB5_DIR%
|
||||
ECHO PostgreSQL directory: %PGADMIN_POSTGRES_DIR%
|
||||
ECHO.
|
||||
ECHO VC++ redist directory: %PGADMIN_VCREDIST_DIR%
|
||||
@@ -123,15 +120,9 @@ REM Main build sequence Ends
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
IF NOT EXIST "%PGADMIN_QT_DIR%" (
|
||||
ECHO !PGADMIN_QT_DIR! does not exist.
|
||||
ECHO Please install Qt and set the PGADMIN_QT_DIR environment variable.
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
IF NOT EXIST "%PGADMIN_QT_DIR%\bin\qmake.exe" (
|
||||
ECHO !QMAKE! does not exist.
|
||||
ECHO Please install Qt and set the PGADMIN_QT_DIR environment variable.
|
||||
IF NOT EXIST "%PGADMIN_KRB5_DIR%" (
|
||||
ECHO !PGADMIN_KRB5_DIR! does not exist.
|
||||
ECHO Please install MIT Kerberos for Windows and set the PGADMIN_KRB5_DIR environment variable.
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
@@ -141,12 +132,6 @@ REM Main build sequence Ends
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
IF NOT EXIST "%PGADMIN_PYTHON_DIR%\Python%PYTHON_VERSION%.dll" (
|
||||
ECHO !PGADMIN_PYTHON_DIR!\Python!PYTHON_VERSION!.dll does not exist.
|
||||
ECHO Please check your Python installation is complete.
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
IF NOT EXIST "%PGADMIN_POSTGRES_DIR%" (
|
||||
ECHO !PGADMIN_POSTGRES_DIR! does not exist.
|
||||
ECHO Please install PostgreSQL and set the PGADMIN_POSTGRES_DIR environment variable.
|
||||
@@ -166,46 +151,75 @@ REM Main build sequence Ends
|
||||
|
||||
:CREATE_VIRTUAL_ENV
|
||||
ECHO Creating virtual environment...
|
||||
IF NOT EXIST "%BUILDROOT%" MKDIR "%BUILDROOT%"
|
||||
|
||||
CD "%BUILDROOT%"
|
||||
IF NOT EXIST "%TMPDIR%" MKDIR "%TMPDIR%"
|
||||
|
||||
CD "%TMPDIR%"
|
||||
|
||||
REM Note that we must use virtualenv.exe here, as the venv module doesn't allow python.exe to relocate.
|
||||
"%PGADMIN_PYTHON_DIR%\Scripts\virtualenv.exe" venv
|
||||
|
||||
XCOPY /S /I /E /H /Y "%PGADMIN_PYTHON_DIR%\DLLs" "%BUILDROOT%\venv\DLLs" > nul || EXIT /B 1
|
||||
XCOPY /S /I /E /H /Y "%PGADMIN_PYTHON_DIR%\Lib" "%BUILDROOT%\venv\Lib" > nul || EXIT /B 1
|
||||
XCOPY /S /I /E /H /Y "%PGADMIN_PYTHON_DIR%\DLLs" "%TMPDIR%\venv\DLLs" > nul || EXIT /B 1
|
||||
XCOPY /S /I /E /H /Y "%PGADMIN_PYTHON_DIR%\Lib" "%TMPDIR%\venv\Lib" > nul || EXIT /B 1
|
||||
|
||||
ECHO Activating virtual environment - %BUILDROOT%\venv...
|
||||
CALL "%BUILDROOT%\venv\Scripts\activate" || EXIT /B 1
|
||||
ECHO Activating virtual environment - %TMPDIR%\venv...
|
||||
CALL "%TMPDIR%\venv\Scripts\activate" || EXIT /B 1
|
||||
|
||||
ECHO Installing dependencies...
|
||||
CALL pip install -r "%WD%\requirements.txt" || EXIT /B 1
|
||||
CALL pip install sphinx || EXIT /B 1
|
||||
|
||||
REM If this is Python 3.6+, we need to remove the hack above or it will break qmake. Sigh.
|
||||
IF %PYTHON_VERSION% GEQ 36 SET CL=
|
||||
CALL python -m pip install --upgrade pip || EXIT /B 1
|
||||
CALL pip install --only-binary=cryptography -r "%WD%\requirements.txt" || EXIT /B 1
|
||||
|
||||
CD %WD%
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:CREATE_PYTHON_ENV
|
||||
ECHO Staging Python...
|
||||
MKDIR "%BUILDROOT%\python\Lib" || EXIT /B 1
|
||||
|
||||
ECHO Downloading embedded Python...
|
||||
REM Get the python embeddable and extract it to %BUILDROOT%\python
|
||||
CD "%TMPDIR%
|
||||
%PGADMIN_PYTHON_DIR%\python -c "import sys; from urllib.request import urlretrieve; urlretrieve('https://www.python.org/ftp/python/' + sys.version.split(' ')[0] + '/python-' + sys.version.split(' ')[0] + '-embed-amd64.zip', 'python-embedded.zip')" || EXIT /B 1
|
||||
%PGADMIN_PYTHON_DIR%\python -c "import zipfile; z = zipfile.ZipFile('python-embedded.zip', 'r'); z.extractall('../win-build/python/')" || EXIT /B 1
|
||||
|
||||
ECHO Copying site-packages...
|
||||
XCOPY /S /I /E /H /Y "%TMPDIR%\venv\Lib\site-packages" "%BUILDROOT%\python\Lib\site-packages" > nul || EXIT /B 1
|
||||
|
||||
REM NOTE: There is intentionally no space after "site" in the line below, to prevent Python barfing if there's one in the file
|
||||
ECHO import site>> "%BUILDROOT%\python\python%PYTHON_MAJOR%%PYTHON_MINOR%._pth"
|
||||
|
||||
ECHO Staging Kerberos components...
|
||||
COPY "%PGADMIN_KRB5_DIR%\bin\kinit.exe" "%BUILDROOT%\python" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_KRB5_DIR%\bin\krb5_64.dll" "%BUILDROOT%\python" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_KRB5_DIR%\bin\comerr64.dll" "%BUILDROOT%\python" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_KRB5_DIR%\bin\k5sprt64.dll" "%BUILDROOT%\python" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_KRB5_DIR%\bin\gssapi64.dll" "%BUILDROOT%\python" > nul || EXIT /B 1
|
||||
|
||||
ECHO Cleaning up unnecessary .pyc and .pyo files...
|
||||
FOR /R "%BUILDROOT%\python" %%f in (*.pyc *.pyo) do DEL /q "%%f" 1> nul 2>&1
|
||||
ECHO Removing tests...
|
||||
FOR /R "%BUILDROOT%\python\Lib" %%f in (test tests) do RD /Q /S "%%f" 1> nul 2>&1
|
||||
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:CREATE_RUNTIME_ENV
|
||||
IF NOT EXIST "%BUILDROOT%" MKDIR "%BUILDROOT%"
|
||||
MKDIR "%BUILDROOT%\runtime"
|
||||
|
||||
CD "%WD%\web"
|
||||
|
||||
ECHO Installing javascript dependencies...
|
||||
CALL yarn install || EXIT /B 1
|
||||
|
||||
ECHO Bundling javascript...
|
||||
CALL yarn run bundle || EXIT /B 1
|
||||
|
||||
ECHO Removing webpack caches...
|
||||
RD /Q /S "%WD%\web\pgadmin\static\js\generated\.cache" 1> nul 2>&1
|
||||
|
||||
ECHO Copying web directory...
|
||||
XCOPY /S /I /E /H /Y "%WD%\web" "%BUILDROOT%\web" > nul || EXIT /B 1
|
||||
ROBOCOPY /S "%WD%\web" "%BUILDROOT%\web" > nul
|
||||
CALL :CHECK_ROBOCOPY_ERROR
|
||||
|
||||
ECHO Installing javascript dependencies...
|
||||
CD "%BUILDROOT%\web"
|
||||
CALL yarn install || EXIT /B 1
|
||||
|
||||
ECHO Bundling javascript...
|
||||
CALL yarn run bundle || EXIT /B 1
|
||||
|
||||
ECHO Cleaning up unnecessary .pyc and .pyo files...
|
||||
FOR /R "%BUILDROOT%\web" %%f in (*.pyc *.pyo) do DEL /q "%%f" 1> nul 2>&1
|
||||
@@ -232,51 +246,64 @@ REM Main build sequence Ends
|
||||
ECHO } >> "%BUILDROOT%\web\config_distro.py"
|
||||
|
||||
ECHO Building docs...
|
||||
CALL pip install sphinx || EXIT /B 1
|
||||
MKDIR "%BUILDROOT%\docs\en_US\html"
|
||||
CD "%WD%\docs\en_US"
|
||||
CALL "%BUILDROOT%\venv\Scripts\python.exe" build_code_snippet.py || EXIT /B 1
|
||||
CALL "%BUILDROOT%\venv\Scripts\sphinx-build.exe" "%WD%\docs\en_US" "%BUILDROOT%\docs\en_US\html" || EXIT /B 1
|
||||
CALL "%TMPDIR%\venv\Scripts\python.exe" build_code_snippet.py || EXIT /B 1
|
||||
CALL "%TMPDIR%\venv\Scripts\sphinx-build.exe" "%WD%\docs\en_US" "%BUILDROOT%\docs\en_US\html" || EXIT /B 1
|
||||
|
||||
ECHO Removing Sphinx
|
||||
CALL pip uninstall -y sphinx Pygments alabaster colorama docutils imagesize requests snowballstemmer
|
||||
REM Remove unnecessary doc files
|
||||
DEL /q "%BUILDROOT%\docs\en_US\html\_static\*.png" 1> nul 2>&1
|
||||
RD /Q /S "%BUILDROOT%\docs\en_US\html\_sources" 1> nul 2>&1
|
||||
|
||||
ECHO Assembling runtime environment...
|
||||
CD "%WD%\runtime"
|
||||
ECHO Staging runtime components...
|
||||
XCOPY /S /I /E /H /Y "%WD%\runtime\assets" "%BUILDROOT%\runtime\assets" > nul || EXIT /B 1
|
||||
XCOPY /S /I /E /H /Y "%WD%\runtime\src" "%BUILDROOT%\runtime\src" > nul || EXIT /B 1
|
||||
|
||||
ECHO Running qmake...
|
||||
CALL set "PGADMIN_PYTHON_DIR=%PGADMIN_PYTHON_DIR%" && "%PGADMIN_QT_DIR%\bin\qmake.exe" || EXIT /B 1
|
||||
COPY "%WD%\runtime\package.json" "%BUILDROOT%\runtime\" > nul || EXIT /B 1
|
||||
CD "%BUILDROOT%\runtime\"
|
||||
CALL yarn install --production=true || EXIT /B 1
|
||||
|
||||
ECHO Cleaning the build directory...
|
||||
CALL nmake clean || EXIT /B 1
|
||||
ECHO Downloading NWjs to %TMPDIR%...
|
||||
REM Get a fresh copy of nwjs.
|
||||
REM NOTE: The nw download servers seem to be very unreliable, so at the moment we're using wget which retries
|
||||
|
||||
ECHO Running make...
|
||||
CALL nmake || EXIT /B 1
|
||||
REM YARN
|
||||
REM CALL yarn --cwd "%TMPDIR%" add nw || EXIT /B
|
||||
REM YARN END
|
||||
|
||||
ECHO Staging pgAdmin4.exe...
|
||||
COPY "%WD%\runtime\release\pgAdmin4.exe" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
REM WGET
|
||||
REM Comment out the below for loop as the latest version (0.62.0) having
|
||||
REM some problem, so for the time being hardcoded the version to 0.61.0
|
||||
REM FOR /f "tokens=2 delims='" %%i IN ('yarn info nw ^| findstr "latest: "') DO SET "NW_VERSION=%%i"
|
||||
REM :GET_NW
|
||||
REM wget https://dl.nwjs.io/v%NW_VERSION%/nwjs-v%NW_VERSION%-win-x64.zip -O "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip"
|
||||
REM IF %ERRORLEVEL% NEQ 0 GOTO GET_NW
|
||||
|
||||
ECHO Staging Qt components...
|
||||
COPY "%PGADMIN_QT_DIR%\bin\Qt5Core.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_QT_DIR%\bin\Qt5Gui.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_QT_DIR%\bin\Qt5Widgets.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_QT_DIR%\bin\Qt5Network.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_QT_DIR%\bin\Qt5Svg.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
MKDIR "%BUILDROOT%\runtime\platforms" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_QT_DIR%\plugins\platforms\qwindows.dll" "%BUILDROOT%\runtime\platforms" > nul || EXIT /B 1
|
||||
MKDIR "%BUILDROOT%\runtime\imageformats" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_QT_DIR%\plugins\imageformats\qsvg.dll" "%BUILDROOT%\runtime\imageformats" > nul || EXIT /B 1
|
||||
ECHO [Paths] > "%BUILDROOT%\runtime\qt.conf"
|
||||
ECHO Plugins=plugins >> "%BUILDROOT%\runtime\qt.conf"
|
||||
SET "NW_VERSION=0.61.0"
|
||||
wget https://dl.nwjs.io/v%NW_VERSION%/nwjs-v%NW_VERSION%-win-x64.zip -O "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip"
|
||||
|
||||
tar -C "%TMPDIR%" -xvf "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip" || EXIT /B 1
|
||||
REM WGET END
|
||||
|
||||
REM YARN
|
||||
REM XCOPY /S /I /E /H /Y "%TMPDIR%\node_modules\nw\nwjs\*" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
REM YARN END
|
||||
|
||||
REM WGET
|
||||
XCOPY /S /I /E /H /Y "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64\*" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
REM WGET END
|
||||
|
||||
MOVE "%BUILDROOT%\runtime\nw.exe" "%BUILDROOT%\runtime\pgAdmin4.exe"
|
||||
|
||||
ECHO Replacing executable icon...
|
||||
CALL yarn --cwd "%TMPDIR%" add winresourcer || EXIT /B
|
||||
"%TMPDIR%\node_modules\winresourcer\bin\Resourcer.exe" -op:upd -src:"%BUILDROOT%\runtime\pgAdmin4.exe" -type:Icongroup -name:IDR_MAINFRAME -file:"%WD%\pkg\win32\Resources\pgAdmin4.ico"
|
||||
|
||||
ECHO Staging PostgreSQL components...
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libpq.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
IF "%ARCHITECTURE%" == "x64" (
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libcrypto-1_1-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libssl-1_1-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
) ELSE (
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libcrypto-1_1.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libssl-1_1.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
)
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libcrypto-1_1-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libssl-1_1-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%PGADMIN_POSTGRES_DIR%\bin\libintl-*.dll" COPY "%PGADMIN_POSTGRES_DIR%\bin\libintl-*.dll" "%BUILDROOT%\runtime" > nul
|
||||
IF EXIST "%PGADMIN_POSTGRES_DIR%\bin\libiconv-*.dll" COPY "%PGADMIN_POSTGRES_DIR%\bin\libiconv-*.dll" "%BUILDROOT%\runtime" > nul
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\zlib.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
@@ -291,22 +318,6 @@ REM Main build sequence Ends
|
||||
|
||||
CD %WD%
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:CREATE_PYTHON_ENV
|
||||
ECHO Staging Python...
|
||||
COPY %PGADMIN_PYTHON_DIR%\python%PYTHON_VERSION%.dll "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY %PGADMIN_PYTHON_DIR%\python.exe "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY %PGADMIN_PYTHON_DIR%\pythonw.exe "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
|
||||
ECHO Cleaning up unnecessary .pyc and .pyo files...
|
||||
FOR /R "%BUILDROOT%\venv" %%f in (*.pyc *.pyo) do DEL /q "%%f" 1> nul 2>&1
|
||||
ECHO Removing tests...
|
||||
FOR /R "%BUILDROOT%\venv\Lib" %%f in (test tests) do RD /Q /S "%%f" 1> nul 2>&1
|
||||
ECHO Removing TCL...
|
||||
RD /Q /S "%BUILDROOT%\venv\tcl" 1> nul 2>&1
|
||||
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:CREATE_INSTALLER
|
||||
@@ -319,16 +330,9 @@ REM Main build sequence Ends
|
||||
CD "%WD%\pkg\win32"
|
||||
|
||||
ECHO Processing installer configuration script...
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in" "-o" "%WD%\pkg\win32\installer.iss.in_stage1" "-s" MYAPP_NAME -r """%APP_NAME%"""
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage1" "-o" "%WD%\pkg\win32\installer.iss.in_stage2" "-s" MYAPP_FULLVERSION -r """%APP_VERSION%"""
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage2" "-o" "%WD%\pkg\win32\installer.iss.in_stage3" "-s" MYAPP_VERSION -r """v%APP_MAJOR%"""
|
||||
|
||||
SET ARCMODE=
|
||||
IF "%ARCHITECTURE%" == "x64" (
|
||||
set ARCMODE="x64"
|
||||
)
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage3" "-o" "%WD%\pkg\win32\installer.iss.in_stage4" "-s" MYAPP_ARCHITECTURESMODE -r """%ARCMODE%"""
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage4" "-o" "%WD%\pkg\win32\installer.iss" "-s" MYAPP_VCDIST -r """%PGADMIN_VCREDIST_DIRNAME%\%VCREDIST_FILE%"""
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in" "-o" "%WD%\pkg\win32\installer.iss.in_stage1" "-s" MYAPP_FULLVERSION -r """%APP_VERSION%"""
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage1" "-o" "%WD%\pkg\win32\installer.iss.in_stage2" "-s" MYAPP_VERSION -r """v%APP_MAJOR%"""
|
||||
CALL "%PGADMIN_PYTHON_DIR%\python" "%WD%\pkg\win32\replace.py" "-i" "%WD%\pkg\win32\installer.iss.in_stage2" "-o" "%WD%\pkg\win32\installer.iss" "-s" MYAPP_VCDIST -r """%PGADMIN_VCREDIST_DIRNAME%\%VCREDIST_FILE%"""
|
||||
|
||||
ECHO Cleaning up...
|
||||
DEL /s "%WD%\pkg\win32\installer.iss.in_stage*" > nul
|
||||
@@ -337,7 +341,7 @@ REM Main build sequence Ends
|
||||
CALL "%PGADMIN_INNOTOOL_DIR%\ISCC.exe" /q "%WD%\pkg\win32\installer.iss" || EXIT /B 1
|
||||
|
||||
ECHO Renaming installer...
|
||||
MOVE "%WD%\pkg\win32\Output\Setup.exe" "%DISTROOT%\%INSTALLERNAME%" > nul || EXIT /B 1
|
||||
MOVE "%WD%\pkg\win32\Output\pgadmin4-setup.exe" "%DISTROOT%\%INSTALLERNAME%" > nul || EXIT /B 1
|
||||
|
||||
ECHO Location - %DISTROOT%\%INSTALLERNAME%
|
||||
ECHO Installer generated successfully.
|
||||
@@ -348,7 +352,7 @@ REM Main build sequence Ends
|
||||
|
||||
:SIGN_INSTALLER
|
||||
ECHO Attempting to sign the installer...
|
||||
CALL "%PGADMIN_SIGNTOOL_DIR%\signtool.exe" sign /t http://timestamp.verisign.com/scripts/timstamp.dll "%DISTROOT%\%INSTALLERNAME%"
|
||||
CALL "%PGADMIN_SIGNTOOL_DIR%\signtool.exe" sign /t http://time.certum.pl "%DISTROOT%\%INSTALLERNAME%"
|
||||
IF %ERRORLEVEL% NEQ 0 (
|
||||
ECHO.
|
||||
ECHO ************************************************************
|
||||
@@ -360,14 +364,6 @@ REM Main build sequence Ends
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:CLEANUP_ENV
|
||||
ECHO Cleaning the build environment...
|
||||
RD "%BUILDROOT%\venv\Include" /S /Q 1> nul 2>&1
|
||||
DEL /s "%BUILDROOT%\venv\pip-selfcheck.json" 1> nul 2>&1
|
||||
|
||||
EXIT /B 0
|
||||
|
||||
|
||||
:USAGE
|
||||
ECHO Invalid command line options.
|
||||
ECHO Usage: "Make.bat [clean]"
|
||||
@@ -375,3 +371,6 @@ REM Main build sequence Ends
|
||||
|
||||
EXIT /B 1
|
||||
|
||||
:CHECK_ROBOCOPY_ERROR
|
||||
IF %ERRORLEVEL% GEQ 8 EXIT /B %ERRORLEVEL%
|
||||
EXIT /B 0
|
||||
@@ -20,20 +20,11 @@ APP_REVISION := $(shell grep ^APP_REVISION web/config.py | awk -F"=" '{print $$N
|
||||
# Include only platform-independent builds in all
|
||||
all: docs pip src runtime
|
||||
|
||||
appbundle: docs
|
||||
appbundle:
|
||||
./pkg/mac/build.sh
|
||||
|
||||
install-node:
|
||||
cd web && npm install
|
||||
cd web && npm audit fix
|
||||
rm -f web/yarn.lock
|
||||
cd web && yarn import
|
||||
# Commented the below line to avoid vulnerability in lodash package.
|
||||
# Refer https://www.npmjs.com/advisories/1523.
|
||||
# Once fixed we will uncomment it.
|
||||
# cd web && yarn audit
|
||||
rm -f package-lock.json
|
||||
rm -f web/package-lock.json
|
||||
cd web && yarn install
|
||||
|
||||
bundle:
|
||||
cd web && yarn run bundle
|
||||
@@ -151,7 +142,7 @@ msg-extract:
|
||||
cd web && pybabel extract -F babel.cfg -o pgadmin/messages.pot pgadmin
|
||||
|
||||
msg-update:
|
||||
cd web && pybabel update -i pgadmin/messages.pot -d pgadmin/translations
|
||||
cd web && pybabel update --no-fuzzy-matching -i pgadmin/messages.pot -d pgadmin/translations
|
||||
|
||||
.PHONY: docs
|
||||
|
||||
|
||||
@@ -1,321 +0,0 @@
|
||||
pgAdmin 4
|
||||
=========
|
||||
|
||||
pgAdmin 4 is a rewrite of the popular pgAdmin3 management tool for the
|
||||
PostgreSQL (http://www.postgresql.org) database.
|
||||
|
||||
In the following documentation and examples, "$PGADMIN4_SRC/" is used to denote
|
||||
the top-level directory of a copy of the pgAdmin source tree, either from a
|
||||
tarball or a git checkout.
|
||||
|
||||
Architecture
|
||||
------------
|
||||
|
||||
pgAdmin 4 is written as a web application in Python, using jQuery and Bootstrap
|
||||
for the client side processing and UI. On the server side, Flask is being
|
||||
utilised.
|
||||
|
||||
Although developed using web technologies, pgAdmin 4 can be deployed either on
|
||||
a web server using a browser, or standalone on a workstation. The runtime/
|
||||
subdirectory contains a QT based runtime application intended to allow this -
|
||||
it is essentially a Python application server that runs in the system tray
|
||||
and allows the user to connect to the application using their web browser.
|
||||
|
||||
Building the Runtime
|
||||
--------------------
|
||||
|
||||
To build the runtime, the following packages must be installed:
|
||||
|
||||
- QT 5 (Use the VC++ build on Windows, not MinGW).
|
||||
- Python 3.4+
|
||||
|
||||
An environment variable named PGADMIN_PYTHON_DIR must be set to the directory
|
||||
in which Python has been installed, for example:
|
||||
|
||||
- /usr
|
||||
- /usr/local/python-3.8
|
||||
- C:\Python38
|
||||
|
||||
Assuming both qmake is in the path:
|
||||
|
||||
dpage@hal:~/git/pgadmin4$ cd runtime
|
||||
dpage@hal:~/git/pgadmin4/runtime$ export PGADMIN_PYTHON_DIR=/opt/local
|
||||
dpage@hal:~/git/pgadmin4/runtime$ qmake
|
||||
Project MESSAGE: ==================================
|
||||
Project MESSAGE: Configuring the pgAdmin 4 runtime.
|
||||
Project MESSAGE: ==================================
|
||||
Project MESSAGE: Qt version: 5
|
||||
Project MESSAGE: Platform: macOS
|
||||
Project MESSAGE: Python executable: /opt/local/bin/python3
|
||||
Project MESSAGE: Python version: 3.8 (38)
|
||||
Project MESSAGE: Python config: /opt/local/bin/python3-config
|
||||
Project MESSAGE: CXXFLAGS: -pipe -stdlib=libc++ -I/opt/local/Library/Frameworks/Python.framework/Versions/3.8/include/python3.8 -I/opt/local/Library/Frameworks/Python.framework/Versions/3.8/include/python3.8
|
||||
Project MESSAGE: LDFLAGS: -stdlib=libc++ -L/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/config-3.8-darwin -ldl -framework CoreFoundation
|
||||
Project MESSAGE: LIBS: -lpython3.8 -ldl -framework CoreFoundation
|
||||
dpage@hal:~/git/pgadmin4/runtime$ make
|
||||
...
|
||||
|
||||
To build the runtime in debug mode, use the option below with qmake:
|
||||
$ qmake CONFIG+=debug
|
||||
|
||||
To build the runtime in release mode, use the option below with qmake:
|
||||
$ qmake CONFIG+=release
|
||||
|
||||
By default, the runtime application will be built in release mode.
|
||||
|
||||
On Linux, an executable called 'pgAdmin4' will be built, on Windows,
|
||||
'pgAdmin4.exe', and on Mac OS X, an app bundle called pgAdmin4.app will be
|
||||
created.
|
||||
|
||||
You can also use Qt Creator to build, develop and debug the runtime. Simply
|
||||
open the $PGADMIN4_SRC/runtime/pgAdmin4.pro project file in Qt Creator and
|
||||
configure the project with a supported version of Qt when prompted.
|
||||
|
||||
Create Database Migrations
|
||||
--------------------------
|
||||
|
||||
In order to make changes to the SQLite DB, navigate to the 'web' directory:
|
||||
|
||||
(pgadmin4) $ cd $PGADMIN4_SRC/web
|
||||
|
||||
Create a migration file with the following command:
|
||||
|
||||
(pgadmin4) $ FLASK_APP=pgAdmin4.py flask db revision
|
||||
|
||||
This will create a file in: $PGADMIN4_SRC/web/migrations/versions/ .
|
||||
Add any changes to the 'upgrade' function.
|
||||
Increment the SCHEMA_VERSION in $PGADMIN4_SRC/web/pgadmin/model/__init__.py file.
|
||||
|
||||
There is no need to increment the SETTINGS_SCHEMA_VERSION.
|
||||
|
||||
Configuring the Python Environment
|
||||
----------------------------------
|
||||
|
||||
In order to run the Python code, a suitable runtime environment is required.
|
||||
Python version 3.4 and later are currently supported. It is recommended that a
|
||||
Python Virtual Environment is setup for this purpose, rather than using the
|
||||
system Python environment. On Linux and Mac systems, the process is fairly
|
||||
simple - adapt as required for your distribution:
|
||||
|
||||
1) Install the virtualenv packages into the system Python environment
|
||||
|
||||
$ sudo pip install virtualenv virtualenvwrapper
|
||||
|
||||
2) Source the virtualenv wrapper tools script. You may want to add this command
|
||||
to your ~/.bash_profile file for future convenience:
|
||||
|
||||
$ source /usr/local/bin/virtualenvwrapper.sh
|
||||
|
||||
3) Create a virtual environment:
|
||||
|
||||
$ mkvirtualenv pgadmin4
|
||||
|
||||
To make use of the virtual environment in the future, use the following
|
||||
command to re-activate it:
|
||||
|
||||
$ workon pgadmin4
|
||||
|
||||
4) Ensure that a PostgreSQL installation's bin/ directory is in the path (so
|
||||
pg_config can be found for building psycopg2), and install the required
|
||||
packages:
|
||||
|
||||
(pgadmin4) $ PATH=$PATH:/usr/local/pgsql/bin pip install -r $PGADMIN4_SRC/requirements.txt
|
||||
|
||||
If you are planning to run the regression tests, you also need to install
|
||||
additional requirements from web/regression/requirements.txt:
|
||||
|
||||
(pgadmin4) $ pip install -r $PGADMIN4_SRC/web/regression/requirements.txt
|
||||
|
||||
5) Create a local configuration file for pgAdmin. Edit
|
||||
$PGADMIN4_SRC/web/config_local.py and add any desired configuration options
|
||||
(use the config.py file as a reference - any settings duplicated in
|
||||
config_local.py will override those in config.py). A typical development
|
||||
configuration may look like:
|
||||
|
||||
from config import *
|
||||
|
||||
# Debug mode
|
||||
DEBUG = True
|
||||
|
||||
# App mode
|
||||
SERVER_MODE = True
|
||||
|
||||
# Enable the test module
|
||||
MODULE_BLACKLIST.remove('test')
|
||||
|
||||
# Log
|
||||
CONSOLE_LOG_LEVEL = DEBUG
|
||||
FILE_LOG_LEVEL = DEBUG
|
||||
|
||||
DEFAULT_SERVER = '127.0.0.1'
|
||||
|
||||
UPGRADE_CHECK_ENABLED = True
|
||||
|
||||
# Use a different config DB for each server mode.
|
||||
if SERVER_MODE == False:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-desktop.db'
|
||||
)
|
||||
else:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-server.db'
|
||||
)
|
||||
|
||||
This configuration allows easy switching between server and desktop modes
|
||||
for testing.
|
||||
|
||||
6) The initial setup of the configuration database is interactive in server
|
||||
mode, and non-interactive in desktop mode. You can run it either by
|
||||
running:
|
||||
|
||||
(pgadmin4) $ python $PGADMIN4_SRC/web/setup.py
|
||||
|
||||
or by starting pgAdmin 4:
|
||||
|
||||
(pgadmin4) $ python $PGADMIN4_SRC/web/pgAdmin4.py
|
||||
|
||||
Whilst it is possible to automatically run setup in desktop mode by running
|
||||
the runtime, that will not work in server mode as the runtime doesn't allow
|
||||
command line interaction with the setup program.
|
||||
|
||||
At this point you will be able to run pgAdmin 4 from the command line in either
|
||||
server or desktop mode, and access it from a web browser using the URL shown in
|
||||
the terminal once pgAdmin has started up.
|
||||
|
||||
Setup of an environment on Windows is somewhat more complicated unfortunately,
|
||||
please see pkg/win32/README.txt for complete details.
|
||||
|
||||
Once a virtual environment has been created and enabled, setup can continue
|
||||
from step 4 above.
|
||||
|
||||
Building the Web Assets
|
||||
-----------------------
|
||||
|
||||
pgAdmin is dependent on a number of third party Javascript libraries. These,
|
||||
along with it's own Javascript code, SCSS/CSS code and images must be
|
||||
compiled into a "bundle" which is transferred to the browser for execution
|
||||
and rendering. This is far more efficient than simply requesting each
|
||||
asset as it's needed by the client.
|
||||
|
||||
To create the bundle, you will need the 'yarn' package management tool to be
|
||||
installed. Then, you can run the following commands on a *nix system to
|
||||
download the required packages and build the bundle:
|
||||
|
||||
(pgadmin4) $ cd $PGADMIN4_SRC
|
||||
(pgadmin4) $ make install-node
|
||||
(pgadmin4) $ make bundle
|
||||
|
||||
On Windows systems (where "make" is not available, the following commands
|
||||
can be used:
|
||||
|
||||
C:\> cd $PGADMIN4_SRC\web
|
||||
C:\$PGADMIN4_SRC\web> yarn install
|
||||
C:\$PGADMIN4_SRC\web> yarn run bundle
|
||||
|
||||
Creating pgAdmin themes
|
||||
-----------------------
|
||||
|
||||
To create a pgAdmin theme, you need to create a directory under
|
||||
web/pgadmin/static/scss/resources.
|
||||
Copy the sample file _theme.variables.scss.sample to the new directory and
|
||||
rename it to _theme.variables.scss. Change the desired hexadecimal values of
|
||||
the colors and bundle pgAdmin. You can also add a preview image in the theme
|
||||
directory with the name as <dir name>_preview.png. It is recommended that the
|
||||
preview image should not be larger in size as it may take time to load on slow
|
||||
networks. Run the yarn run bundle and you're good to go. No other changes are
|
||||
required, pgAdmin bundle will read the directory and create other required
|
||||
entries to make them available in preferences.
|
||||
|
||||
The name of the theme is derived from the directory name. Underscores (_) and
|
||||
hyphens (-) will be replaced with spaces and the result will be camel cased.
|
||||
|
||||
Configuring the Runtime
|
||||
-----------------------
|
||||
|
||||
The pgAdmin 4 Runtime maintains it's own Python Path to avoid conflicts with
|
||||
packages or other issues in the system Python installation. It will also search
|
||||
a number of known locations for the pgAdmin4.py file needed to run pgAdmin
|
||||
(including relative locations in a source code tree), however you can specify
|
||||
an alternate path if needed.
|
||||
|
||||
If either a working environment or pgAdmin4.py cannot be found at startup, the
|
||||
runtime will prompt for the locations. Alternatively, you can click the try
|
||||
icon and select the Configuration option to open the configuration dialogue.
|
||||
|
||||
On a Linux/Mac system, the Python Path will typically consist of a single path
|
||||
to the virtual environment's site-packages directory, e.g.
|
||||
|
||||
/Users/<USERNAME>/.virtualenvs/pgadmin4/lib/python3.8/site-packages
|
||||
|
||||
On Windows, multiple paths are likely to be required, e.g.
|
||||
|
||||
C:\Users\dpage\.virtualenvs\pgadmin4\Lib\site-packages;C:\Users\dpage\.virtualenvs\pgadmin4\Lib;C:\Users\dpage\.virtualenvs\pgadmin4\Lib\lib-tk;C:\Users\dpage\.virtualenvs\pgadmin4\DLLs
|
||||
|
||||
If you wish to specify a specific copy of the Python code to run, you can set
|
||||
the Application Path to a directory containing pgAdmin4.py, e.g.
|
||||
|
||||
/Users/<USERNAME>/git/pgadmin4-test/web/
|
||||
|
||||
Building the documentation
|
||||
--------------------------
|
||||
|
||||
In order to build the docs, an additional Python package is required in the
|
||||
virtual environment. This can be installed with the pip package manager:
|
||||
|
||||
$ workon pgadmin4
|
||||
(pgadmin4) $ pip install Sphinx
|
||||
|
||||
The docs can then be built using the Makefile in $PGADMIN4_SRC, e.g.
|
||||
|
||||
(pgadmin4) $ make docs
|
||||
|
||||
The output can be found in $PGADMIN4_SRC/docs/en_US/_build/html/index.html
|
||||
|
||||
Building packages
|
||||
-----------------
|
||||
|
||||
Most packages can be built using the Makefile in $PGADMIN4_SRC, provided all
|
||||
the setup and configuration above has been completed.
|
||||
|
||||
To build a source tarball:
|
||||
|
||||
(pgadmin4) $ make src
|
||||
|
||||
To build a PIP Wheel, activate either a Python 2 or Python 3 virtual
|
||||
environment as desired, configured with all the required packages, and then
|
||||
run:
|
||||
|
||||
(pgadmin4) $ make pip
|
||||
|
||||
To build the macOS AppBundle, please see pkg/mac/README.
|
||||
|
||||
To build the Windows installer, please see pkg/win32/README.txt.
|
||||
|
||||
Support
|
||||
-------
|
||||
|
||||
See https://www.pgadmin.org/support/ for support options.
|
||||
|
||||
Project info
|
||||
------------
|
||||
|
||||
The source code repository can be found here:
|
||||
|
||||
http://git.postgresql.org/gitweb/?p=pgadmin4.git;a=summary
|
||||
|
||||
A Redmine project for pgAdmin 4 can be found at the address below. A PostgreSQL
|
||||
community account is required to access this site. Please note that at present
|
||||
only project developers can log bug and feature requests:
|
||||
|
||||
https://redmine.postgresql.org/projects/pgadmin4
|
||||
|
||||
If you wish to discuss pgAdmin 4, or contribute to the project, please use the
|
||||
pgAdmin Hackers mailing list:
|
||||
|
||||
pgadmin-hackers@postgresql.org
|
||||
|
||||
--
|
||||
Dave Page
|
||||
pgAdmin Project Lead
|
||||
@@ -0,0 +1,279 @@
|
||||
# pgAdmin 4
|
||||
|
||||
pgAdmin 4 is a rewrite of the popular pgAdmin3 management tool for the
|
||||
PostgreSQL (http://www.postgresql.org) database.
|
||||
|
||||
In the following documentation and examples, *$PGADMIN4_SRC/* is used to denote
|
||||
the top-level directory of a copy of the pgAdmin source tree, either from a
|
||||
tarball or a git checkout.
|
||||
|
||||
## Architecture
|
||||
|
||||
pgAdmin 4 is written as a web application in Python, using jQuery and Bootstrap
|
||||
for the client side processing and UI. On the server side, Flask is being
|
||||
utilised.
|
||||
|
||||
Although developed using web technologies, pgAdmin 4 can be deployed either on
|
||||
a web server using a browser, or standalone on a workstation. The runtime/
|
||||
subdirectory contains an NWjs based runtime application intended to allow this,
|
||||
which will execute the Python server and display the UI.
|
||||
|
||||
## Building the Runtime
|
||||
|
||||
To build the runtime, the following packages must be installed:
|
||||
|
||||
* NodeJS 12+
|
||||
* Yarn
|
||||
|
||||
Change into the runtime directory, and run *yarn install*. This will install the
|
||||
dependencies required.
|
||||
|
||||
In order to use the runtime in a development environment, you'll need to copy
|
||||
*dev_config.json.in* file to *dev_config.json*, and edit the paths to the Python
|
||||
executable and *pgAdmin.py* file, otherwise the runtime will use the default
|
||||
paths it would expect to find in the standard package for your platform.
|
||||
|
||||
You can then execute the runtime by running something like:
|
||||
|
||||
```bash
|
||||
node_modules/nw/nwjs/nw .
|
||||
```
|
||||
|
||||
or on macOS:
|
||||
|
||||
```bash
|
||||
node_modules/nw/nwjs/nwjs.app/Contents/MacOS/nwjs .
|
||||
```
|
||||
|
||||
# Configuring the Python Environment
|
||||
|
||||
In order to run the Python code, a suitable runtime environment is required.
|
||||
Python version 3.6 and later are currently supported. It is recommended that a
|
||||
Python Virtual Environment is setup for this purpose, rather than using the
|
||||
system Python environment. On Linux and Mac systems, the process is fairly
|
||||
simple - adapt as required for your distribution:
|
||||
|
||||
1. Create a virtual environment in an appropriate directory. The last argument is
|
||||
the name of the environment; that can be changed as desired:
|
||||
|
||||
```bash
|
||||
$ python3 -m venv venv
|
||||
```
|
||||
|
||||
2. Now activate the virtual environment:
|
||||
|
||||
```bash
|
||||
$ source venv/bin/activate
|
||||
```
|
||||
|
||||
3. Some of the components used by pgAdmin require a very recent version of *pip*,
|
||||
so update that to the latest:
|
||||
|
||||
```bash
|
||||
$ pip install --upgrade pip
|
||||
```
|
||||
|
||||
4. Ensure that a PostgreSQL installation's bin/ directory is in the path (so
|
||||
pg_config can be found for building psycopg2), and install the required
|
||||
packages:
|
||||
|
||||
```bash
|
||||
(venv) $ PATH=$PATH:/usr/local/pgsql/bin pip install -r $PGADMIN4_SRC/requirements.txt
|
||||
```
|
||||
|
||||
If you are planning to run the regression tests, you also need to install
|
||||
additional requirements from web/regression/requirements.txt:
|
||||
|
||||
```bash
|
||||
(venv) $ pip install -r $PGADMIN4_SRC/web/regression/requirements.txt
|
||||
```
|
||||
|
||||
5. Create a local configuration file for pgAdmin. Edit
|
||||
$PGADMIN4_SRC/web/config_local.py and add any desired configuration options
|
||||
(use the config.py file as a reference - any settings duplicated in
|
||||
config_local.py will override those in config.py). A typical development
|
||||
configuration may look like:
|
||||
|
||||
```python
|
||||
from config import *
|
||||
|
||||
# Debug mode
|
||||
DEBUG = True
|
||||
|
||||
# App mode
|
||||
SERVER_MODE = True
|
||||
|
||||
# Enable the test module
|
||||
MODULE_BLACKLIST.remove('test')
|
||||
|
||||
# Log
|
||||
CONSOLE_LOG_LEVEL = DEBUG
|
||||
FILE_LOG_LEVEL = DEBUG
|
||||
|
||||
DEFAULT_SERVER = '127.0.0.1'
|
||||
|
||||
UPGRADE_CHECK_ENABLED = True
|
||||
|
||||
# Use a different config DB for each server mode.
|
||||
if SERVER_MODE == False:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-desktop.db'
|
||||
)
|
||||
else:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-server.db'
|
||||
)
|
||||
```
|
||||
|
||||
This configuration allows easy switching between server and desktop modes
|
||||
for testing.
|
||||
|
||||
6. The initial setup of the configuration database is interactive in server
|
||||
mode, and non-interactive in desktop mode. You can run it either by
|
||||
running:
|
||||
|
||||
```bash
|
||||
(venv) $ python3 $PGADMIN4_SRC/web/setup.py
|
||||
```
|
||||
|
||||
or by starting pgAdmin 4:
|
||||
|
||||
```bash
|
||||
(venv) $ python3 $PGADMIN4_SRC/web/pgAdmin4.py
|
||||
```
|
||||
|
||||
Whilst it is possible to automatically run setup in desktop mode by running
|
||||
the runtime, that will not work in server mode as the runtime doesn't allow
|
||||
command line interaction with the setup program.
|
||||
|
||||
At this point you will be able to run pgAdmin 4 from the command line in either
|
||||
server or desktop mode, and access it from a web browser using the URL shown in
|
||||
the terminal once pgAdmin has started up.
|
||||
|
||||
Setup of an environment on Windows is somewhat more complicated unfortunately,
|
||||
please see *pkg/win32/README.txt* for complete details.
|
||||
|
||||
# Building the Web Assets
|
||||
|
||||
pgAdmin is dependent on a number of third party Javascript libraries. These,
|
||||
along with it's own Javascript code, SCSS/CSS code and images must be
|
||||
compiled into a "bundle" which is transferred to the browser for execution
|
||||
and rendering. This is far more efficient than simply requesting each
|
||||
asset as it's needed by the client.
|
||||
|
||||
To create the bundle, you will need the 'yarn' package management tool to be
|
||||
installed. Then, you can run the following commands on a *nix system to
|
||||
download the required packages and build the bundle:
|
||||
|
||||
```bash
|
||||
(venv) $ cd $PGADMIN4_SRC
|
||||
(venv) $ make install-node
|
||||
(venv) $ make bundle
|
||||
```
|
||||
|
||||
On Windows systems (where "make" is not available), the following commands
|
||||
can be used:
|
||||
|
||||
```
|
||||
C:\> cd $PGADMIN4_SRC\web
|
||||
C:\$PGADMIN4_SRC\web> yarn install
|
||||
C:\$PGADMIN4_SRC\web> yarn run bundle
|
||||
```
|
||||
|
||||
# Creating pgAdmin themes
|
||||
|
||||
To create a pgAdmin theme, you need to create a directory under
|
||||
*web/pgadmin/static/scss/resources*.
|
||||
Copy the sample file *_theme.variables.scss.sample* to the new directory and
|
||||
rename it to *_theme.variables.scss*. Change the desired hexadecimal values of
|
||||
the colors and bundle pgAdmin. You can also add a preview image in the theme
|
||||
directory with the name as *\<dir name>_preview.png*. It is recommended that the
|
||||
preview image should not be larger in size as it may take time to load on slow
|
||||
networks. Run the *yarn run bundle* and you're good to go. No other changes are
|
||||
required, pgAdmin bundle will read the directory and create other required
|
||||
entries to make them available in preferences.
|
||||
|
||||
The name of the theme is derived from the directory name. Underscores (_) and
|
||||
hyphens (-) will be replaced with spaces and the result will be camel cased.
|
||||
|
||||
# Building the documentation
|
||||
|
||||
In order to build the docs, an additional Python package is required in the
|
||||
virtual environment. This can be installed with the pip package manager:
|
||||
|
||||
```bash
|
||||
$ source venv/bin/activate
|
||||
(venv) $ pip install Sphinx
|
||||
```
|
||||
|
||||
The docs can then be built using the Makefile in *$PGADMIN4_SRC*, e.g.
|
||||
|
||||
```bash
|
||||
(venv) $ make docs
|
||||
```
|
||||
|
||||
The output can be found in *$PGADMIN4_SRC/docs/en_US/_build/html/index.html*
|
||||
|
||||
# Building packages
|
||||
|
||||
Most packages can be built using the Makefile in $PGADMIN4_SRC, provided all
|
||||
the setup and configuration above has been completed.
|
||||
|
||||
To build a source tarball:
|
||||
|
||||
```bash
|
||||
(venv) $ make src
|
||||
```
|
||||
|
||||
To build a PIP Wheel, activate either a Python 3 virtual environment, configured
|
||||
with all the required packages, and then run:
|
||||
|
||||
```bash
|
||||
(venv) $ make pip
|
||||
```
|
||||
|
||||
To build the macOS AppBundle, please see *pkg/mac/README*.
|
||||
|
||||
To build the Windows installer, please see *pkg/win32/README.txt*.
|
||||
# Create Database Migrations
|
||||
|
||||
In order to make changes to the SQLite DB, navigate to the 'web' directory:
|
||||
|
||||
```bash
|
||||
(venv) $ cd $PGADMIN4_SRC/web
|
||||
```
|
||||
|
||||
Create a migration file with the following command:
|
||||
|
||||
```bash
|
||||
(venv) $ FLASK_APP=pgAdmin4.py flask db revision
|
||||
```
|
||||
|
||||
This will create a file in: $PGADMIN4_SRC/web/migrations/versions/ .
|
||||
Add any changes to the 'upgrade' function.
|
||||
Increment the SCHEMA_VERSION in $PGADMIN4_SRC/web/pgadmin/model/__init__.py file.
|
||||
|
||||
There is no need to increment the SETTINGS_SCHEMA_VERSION.
|
||||
|
||||
# Support
|
||||
|
||||
See https://www.pgadmin.org/support/ for support options.
|
||||
|
||||
# Project info
|
||||
|
||||
The source code repository can be found here:
|
||||
|
||||
http://git.postgresql.org/gitweb/?p=pgadmin4.git;a=summary
|
||||
|
||||
A Redmine project for pgAdmin 4 can be found at the address below. A PostgreSQL
|
||||
community account is required to access this site. Please note that at present
|
||||
only project developers can log bug and feature requests:
|
||||
|
||||
https://redmine.postgresql.org/projects/pgadmin4
|
||||
|
||||
If you wish to discuss pgAdmin 4, or contribute to the project, please use the
|
||||
pgAdmin Hackers mailing list:
|
||||
|
||||
pgadmin-hackers@postgresql.org
|
||||
@@ -6,8 +6,8 @@
|
||||
|
||||
Use the *Add named restore point* dialog to take a named snapshot of the state
|
||||
of the server for use in a recovery file. To create a named restore point, the
|
||||
server's postgresql.conf file must specify a *wal_level* value of *archive*,
|
||||
*hot_standby*, or *logical*. You must be a database superuser to create a
|
||||
server's postgresql.conf file must specify a *wal_level* value of *replica*,
|
||||
*logical*, or *minimal*. You must be a database superuser to create a
|
||||
restore point.
|
||||
|
||||
.. image:: images/add_restore_point.png
|
||||
|
||||
@@ -67,8 +67,8 @@ Use the fields in the *General* tab to specify parameters for the backup:
|
||||
* Use the dropdown listbox next to *Rolename* to specify the role that owns the
|
||||
backup.
|
||||
|
||||
Click the *Dump options* tab to continue. Use the box fields in the *Dump
|
||||
options* tab to provide options for *pg_dump*.
|
||||
Click the *Data/Objects* tab to continue. Use the fields in the *Data/Objects*
|
||||
tab to provide options related to data or pgAdmin objects that correspond to *pg_dump*.
|
||||
|
||||
.. image:: images/backup_sections.png
|
||||
:alt: Sections option on backup dialog
|
||||
@@ -77,13 +77,13 @@ options* tab to provide options for *pg_dump*.
|
||||
* Move switches in the **Sections** field box to select a portion of the object
|
||||
that will be backed up.
|
||||
|
||||
* Move the switch next to *Pre-data* to the *Yes* position to include all
|
||||
* Move the switch next to *Pre-data* towards right position to include all
|
||||
data definition items not included in the data or post-data item lists.
|
||||
|
||||
* Move the switch next to *Data* to the *Yes* position to backup actual table
|
||||
* Move the switch next to *Data* towards right position to backup actual table
|
||||
data, large-object contents, and sequence values.
|
||||
|
||||
* Move the switch next to *Post-data* to the *Yes* position to include
|
||||
* Move the switch next to *Post-data* towards right position to include
|
||||
definitions of indexes, triggers, rules, and constraints other than
|
||||
validated check constraints.
|
||||
|
||||
@@ -94,13 +94,13 @@ options* tab to provide options for *pg_dump*.
|
||||
* Move switches in the **Type of objects** field box to specify details about
|
||||
the type of objects that will be backed up.
|
||||
|
||||
* Move the switch next to *Only data* to the *Yes* position to limit the back
|
||||
* Move the switch next to *Only data* towards right position to limit the back
|
||||
up to data.
|
||||
|
||||
* Move the switch next to *Only schema* to limit the back up to schema-level
|
||||
database objects.
|
||||
|
||||
* Move the switch next to *Blobs* to the *No* position to exclude large
|
||||
* Move the switch next to *Blobs* towards left position to exclude large
|
||||
objects in the backup.
|
||||
|
||||
.. image:: images/backup_do_not_save.png
|
||||
@@ -110,22 +110,26 @@ options* tab to provide options for *pg_dump*.
|
||||
* Move switches in the **Do not save** field box to select the objects that will
|
||||
not be included in the backup.
|
||||
|
||||
* Move the switch next to *Owner* to the *Yes* position to exclude commands
|
||||
* Move the switch next to *Owner* towards right position to exclude commands
|
||||
that set object ownership.
|
||||
|
||||
* Move the switch next to *Privilege* to the *Yes* position to exclude
|
||||
* Move the switch next to *Privilege* towards right position to exclude
|
||||
commands that create access privileges.
|
||||
|
||||
* Move the switch next to *Tablespace* to the *Yes* position to exclude
|
||||
* Move the switch next to *Tablespace* towards right position to exclude
|
||||
tablespaces.
|
||||
|
||||
* Move the switch next to *Unlogged table data* to the *Yes* position to
|
||||
* Move the switch next to *Unlogged table data* towards right position to
|
||||
exclude the contents of unlogged tables.
|
||||
|
||||
* Move the switch next to *Comments* to the *Yes* position to exclude
|
||||
* Move the switch next to *Comments* towards right position to exclude
|
||||
commands that set the comments. **Note:** This option is visible only for
|
||||
database server greater than or equal to 11.
|
||||
|
||||
Click the *Options* tab to continue. Use these additional fields to specify
|
||||
options like including ddl statements, verbose message or using set session
|
||||
authorization corresponding to *pg_dump* options.
|
||||
|
||||
.. image:: images/backup_queries.png
|
||||
:alt: Queries option on backup dialog
|
||||
:align: center
|
||||
@@ -133,24 +137,24 @@ options* tab to provide options for *pg_dump*.
|
||||
* Move switches in the **Queries** field box to specify the type of statements
|
||||
that should be included in the backup.
|
||||
|
||||
* Move the switch next to *Use Column Inserts* to the *Yes* position to dump
|
||||
* Move the switch next to *Use Column Inserts* towards right position to dump
|
||||
the data in the form of INSERT statements and include explicit column
|
||||
names. Please note: this may make restoration from backup slow.
|
||||
|
||||
* Move the switch next to *Use Insert commands* to the *Yes* position to
|
||||
* Move the switch next to *Use Insert commands* towards right position to
|
||||
dump the data in the form of INSERT statements rather than using a COPY
|
||||
command. Please note: this may make restoration from backup slow.
|
||||
|
||||
* Move the switch next to *Include CREATE DATABASE statement* to the *Yes*
|
||||
* Move the switch next to *Include CREATE DATABASE statement* towards right
|
||||
position to include a command in the backup that creates a new database
|
||||
when restoring the backup.
|
||||
|
||||
* Move the switch next to *Include DROP DATABASE statement* to the *Yes*
|
||||
* Move the switch next to *Include DROP DATABASE statement* towards right
|
||||
position to include a command in the backup that will drop any existing
|
||||
database object with the same name before recreating the object during a
|
||||
backup.
|
||||
|
||||
* Move the switch next to *Load Via Partition Root* to the *Yes* position,
|
||||
* Move the switch next to *Load Via Partition Root* towards right position,
|
||||
so when dumping a COPY or INSERT statement for a partitioned table, target
|
||||
the root of the partitioning hierarchy which contains it rather than the
|
||||
partition itself. **Note:** This option is visible only for database server
|
||||
@@ -164,10 +168,10 @@ options* tab to provide options for *pg_dump*.
|
||||
that should be excluded from the backup.
|
||||
|
||||
* Move the switch next to *Trigger* (active when creating a data-only backup)
|
||||
to the *Yes* position to include commands that will disable triggers on the
|
||||
towards right position to include commands that will disable triggers on the
|
||||
target table while the data is being loaded.
|
||||
|
||||
* Move the switch next to *$ quoting* to the *Yes* position to enable dollar
|
||||
* Move the switch next to *$ quoting* towards right position to enable dollar
|
||||
quoting within function bodies; if disabled, the function body will be
|
||||
quoted using SQL standard string syntax.
|
||||
|
||||
@@ -178,16 +182,16 @@ options* tab to provide options for *pg_dump*.
|
||||
* Move switches in the **Miscellaneous** field box to specify miscellaneous
|
||||
backup options.
|
||||
|
||||
* Move the switch next to *With OIDs* to the *Yes* position to include object
|
||||
* Move the switch next to *With OIDs* towards right position to include object
|
||||
identifiers as part of the table data for each table.
|
||||
|
||||
* Move the switch next to *Verbose messages* to the *No* position to instruct
|
||||
* Move the switch next to *Verbose messages* towards left position to instruct
|
||||
*pg_dump* to exclude verbose messages.
|
||||
|
||||
* Move the switch next to *Force double quotes on identifiers* to the *Yes*
|
||||
* Move the switch next to *Force double quotes on identifiers* towards right
|
||||
position to force the quoting of all identifiers.
|
||||
|
||||
* Move the switch next to *Use SET SESSION AUTHORIZATION* to the *Yes*
|
||||
* Move the switch next to *Use SET SESSION AUTHORIZATION* towards right
|
||||
position to include a statement that will use a SET SESSION AUTHORIZATION
|
||||
command to determine object ownership (instead of an ALTER OWNER command).
|
||||
|
||||
|
||||
@@ -28,10 +28,13 @@ Use the fields in the *General* tab to specify the following:
|
||||
:alt: Type of objects option on backup server dialog
|
||||
:align: center
|
||||
|
||||
Click the *Data/Objects* tab to continue. Use the fields in the *Data/Objects*
|
||||
tab to provide options related to data or pgAdmin objects that correspond to *pg_dump*.
|
||||
|
||||
* Move switches in the **Type of objects** field box to specify details about
|
||||
the type of objects that will be backed up.
|
||||
|
||||
* Move the switch next to *Only data* to the *Yes* position to limit the back
|
||||
* Move the switch next to *Only data* towards right position to limit the back
|
||||
up to data.
|
||||
|
||||
* Move the switch next to *Only schema* to limit the back up to schema-level
|
||||
@@ -44,19 +47,19 @@ Use the fields in the *General* tab to specify the following:
|
||||
* Move switches in the **Do not save** field box to select the objects that will
|
||||
not be included in the backup.
|
||||
|
||||
* Move the switch next to *Owner* to the *Yes* position to exclude commands
|
||||
* Move the switch next to *Owner* towards right position to exclude commands
|
||||
that set object ownership.
|
||||
|
||||
* Move the switch next to *Privilege* to the *Yes* position to exclude
|
||||
* Move the switch next to *Privilege* towards right position to exclude
|
||||
commands that create access privileges.
|
||||
|
||||
* Move the switch next to *Tablespace* to the *Yes* position to exclude
|
||||
* Move the switch next to *Tablespace* towards right position to exclude
|
||||
tablespaces.
|
||||
|
||||
* Move the switch next to *Unlogged table data* to the *Yes* position to
|
||||
* Move the switch next to *Unlogged table data* towards right position to
|
||||
exclude the contents of unlogged tables.
|
||||
|
||||
* Move the switch next to *Comments* to the *Yes* position to exclude
|
||||
* Move the switch next to *Comments* towards right position to exclude
|
||||
commands that set the comments. **Note:** This option is visible only for
|
||||
database server greater than or equal to 11.
|
||||
|
||||
@@ -67,15 +70,15 @@ Use the fields in the *General* tab to specify the following:
|
||||
* Move switches in the **Queries** field box to specify the type of statements
|
||||
that should be included in the backup.
|
||||
|
||||
* Move the switch next to *Use Column Inserts* to the *Yes* position to dump
|
||||
* Move the switch next to *Use Column Inserts* towards right position to dump
|
||||
the data in the form of INSERT statements and include explicit column
|
||||
names. Please note: this may make restoration from backup slow.
|
||||
|
||||
* Move the switch next to *Use Insert commands* to the *Yes* position to dump
|
||||
* Move the switch next to *Use Insert commands* towards right position to dump
|
||||
the data in the form of INSERT statements rather than using a COPY command.
|
||||
Please note: this may make restoration from backup slow.
|
||||
|
||||
* Move the switch next to *Include DROP DATABASE statement* to the *Yes*
|
||||
* Move the switch next to *Include DROP DATABASE statement* towards right
|
||||
position to include a command in the backup that will drop any existing
|
||||
database object with the same name before recreating the object during a
|
||||
backup.
|
||||
@@ -89,10 +92,10 @@ Use the fields in the *General* tab to specify the following:
|
||||
that should be excluded from the backup.
|
||||
|
||||
* Move the switch next to *Trigger* (active when creating a data-only backup)
|
||||
to the *Yes* position to include commands that will disable triggers on the
|
||||
towards right position to include commands that will disable triggers on the
|
||||
target table while the data is being loaded.
|
||||
|
||||
* Move the switch next to *$ quoting* to the *Yes* position to enable dollar
|
||||
* Move the switch next to *$ quoting* towards right position to enable dollar
|
||||
quoting within function bodies; if disabled, the function body will be
|
||||
quoted using SQL standard string syntax.
|
||||
|
||||
@@ -103,16 +106,16 @@ Use the fields in the *General* tab to specify the following:
|
||||
* Move switches in the **Miscellaneous** field box to specify miscellaneous
|
||||
backup options.
|
||||
|
||||
* Move the switch next to *With OIDs* to the *Yes* position to include object
|
||||
* Move the switch next to *With OIDs* towards right position to include object
|
||||
identifiers as part of the table data for each table.
|
||||
|
||||
* Move the switch next to *Verbose messages* to the *No* position to instruct
|
||||
* Move the switch next to *Verbose messages* towards left position to instruct
|
||||
*pg_dump* to exclude verbose messages.
|
||||
|
||||
* Move the switch next to *Force double quotes on identifiers* to the *Yes*
|
||||
* Move the switch next to *Force double quotes on identifiers* towards right
|
||||
position to force the quoting of all identifiers.
|
||||
|
||||
* Move the switch next to *Use SET SESSION AUTHORIZATION* to the *Yes*
|
||||
* Move the switch next to *Use SET SESSION AUTHORIZATION* towards right
|
||||
position to include a statement that will use a SET SESSION AUTHORIZATION
|
||||
command to determine object ownership (instead of an ALTER OWNER command).
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ Use the fields in the *Definition* tab to define parameters:
|
||||
* Use the drop-down listbox next to *Function* to select the function used to
|
||||
perform the cast. The function's result data type must match the target type
|
||||
of the cast.
|
||||
* Move the *Context* switch to the *Implicit* position if the cast is implicit.
|
||||
* Select *Context* toggle to *Implicit* if the cast is implicit.
|
||||
By default, a cast can be invoked only by an explicit cast request. If the
|
||||
cast is marked *Implicit* then it can be invoked implicitly in any context,
|
||||
whether by assignment or internally in an expression.
|
||||
@@ -58,10 +58,7 @@ the *Cast* dialog:
|
||||
:alt: Cast dialog sql tab
|
||||
:align: center
|
||||
|
||||
The cast uses a function named *int4(bigint)* to convert a biginteger data type
|
||||
to an integer.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -55,12 +55,11 @@ the *Check* dialog:
|
||||
:alt: Check dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a check constraint named *check_price*
|
||||
on the *price* column of the *products* table. The constraint confirms that
|
||||
any values added to the column are greater than 0.
|
||||
The example shown demonstrates creating a check constraint named *jobhist_date_chk*
|
||||
on the *startdate* column of the *jobhist* table.
|
||||
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -0,0 +1,87 @@
|
||||
.. _cloud_deployment:
|
||||
|
||||
******************************
|
||||
`Cloud Deployment`:index:
|
||||
******************************
|
||||
|
||||
The PostgreSQL server can be deployed on the Amazon AWS cloud using this module.
|
||||
Currently only RDS is available, but in the future more cloud options will be available.
|
||||
|
||||
To launch the *Cloud Deployment...* tool, right click on the *Server Group* or *Server* of the tree control, and select
|
||||
*Deploy a Cloud Instance* from the *Register* menu.
|
||||
|
||||
.. image:: images/cloud_deployment_provider.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Once you launch the tool, the Amazon RDS is already selected as this is the only option currently available.
|
||||
Click on the *Next* button to proceed further.
|
||||
|
||||
.. image:: images/cloud_deployment_credentials.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
In the Credentials dialog, provide the region in which you want to deploy the instance along with
|
||||
*AWS access key* and *AWS secret access key*.
|
||||
Provide *AWS session token* only if your AWS session is temporary.
|
||||
|
||||
To proceed further, click on the next button. Before going further, pgAdmin will validate your credentials.
|
||||
|
||||
.. image:: images/cloud_deployment_instance.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Use the fields from the Instance Specification tab to specify the Instance details.
|
||||
|
||||
* Use the *Instance name* field to add an instance name for the PostgreSQL server; the name
|
||||
specified will be displayed in the *Browser* tree control too.
|
||||
|
||||
* Use the *Public IP* field to specify the IP Address range for permitting the inbound traffic.
|
||||
|
||||
* Use the *Database version* field to specify the PostgreSQL version to deploy.
|
||||
|
||||
* Use the *Instance class* field to allocate the computational, network, and memory capacity required by planned workload of this DB instance.
|
||||
|
||||
* Use the *Instance type* field to select the instance type.
|
||||
|
||||
* Use the *Storage type* field to select the instance storage type. Three options are available. General Purpose (SSD) storage, Provisioned IOPS (SSD) and Magnetic storage.
|
||||
|
||||
* Use the *Allocated storage* field to specify the storage capacity in GiB.
|
||||
|
||||
* Use the *Provisioned IOPS* in case of Provisioned IOPS (SSD) storage type.
|
||||
|
||||
.. image:: images/cloud_deployment_database.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Use the fields from the Database Details tab to specify the Instance details.
|
||||
|
||||
* Use the drop-down list box in the *Server group* field to select the parent
|
||||
node for the server; the server will be displayed in the *Browser* tree
|
||||
control within the specified group.
|
||||
|
||||
* Use the *Database name* field to add the database name for the PostgreSQL server.
|
||||
|
||||
* Use the *Username* field to specify the name of a role that will be used when
|
||||
authenticating with the server.
|
||||
|
||||
* Use the *Password* field to provide a password that will be supplied when
|
||||
authenticating with the server.
|
||||
|
||||
* Use the *Confirm password* field to repeat the password.
|
||||
|
||||
* Enter the listener port number of the server host in the *Port* field.
|
||||
|
||||
.. image:: images/cloud_deployment_review.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
At the end, review the Instance details that you provided. Click on Finish button to deploy the instance on Amazon RDS.
|
||||
|
||||
.. image:: images/cloud_deployment_tree.png
|
||||
:alt: Cloud Deployment Provider
|
||||
:align: center
|
||||
|
||||
Once you click on the finish, one background process will start which will deploy the instance in the cloud
|
||||
and monitor the progress of the deployment. The Server will be added to the tree with the cloud uploading icon.
|
||||
Once the deployment is done, the necessary server details will be updated.
|
||||
@@ -7,14 +7,14 @@
|
||||
The bulk of pgAdmin is a Python web application written using the Flask framework
|
||||
on the backend, and HTML5 with CSS3, Bootstrap and jQuery on the front end. A
|
||||
desktop runtime is also included for users that prefer a desktop application to
|
||||
a web application, which is written in C++ using the QT framework.
|
||||
a web application, which is written using NWjs (Node Webkit).
|
||||
|
||||
Runtime
|
||||
*******
|
||||
|
||||
The runtime is essentially a Python webserver and browser in a box. Found in the
|
||||
**/runtime** directory in the source tree, it is a relatively simple QT
|
||||
application that is most easily modified using the **QT Creator** application.
|
||||
The runtime is based on NWjs which integrates a browser and the Python server
|
||||
creating a standalone application. The source code can be found in the
|
||||
**/runtime** directory in the source tree.
|
||||
|
||||
Web Application
|
||||
***************
|
||||
@@ -212,5 +212,5 @@ 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 completely.) Please
|
||||
look at the the javascript files node.js, browser.js, menu.js, panel.js, etc for
|
||||
better understanding of the code.
|
||||
look at the javascript files node.js, browser.js, menu.js, panel.js, etc for
|
||||
better understanding of the code.
|
||||
@@ -16,46 +16,46 @@ review process for any patches submitted for inclusion in pgAdmin.
|
||||
bulk updates every year). The start date should always be 2013, and the end year
|
||||
the current year, e.g.
|
||||
|
||||
Copyright (C) 2013 - 2020, The pgAdmin Development Team
|
||||
|
||||
Copyright (C) 2013 - 2022, The pgAdmin Development Team
|
||||
|
||||
* Ensure there's a blank line immediately following any copyright headers.
|
||||
|
||||
* Include PyDoc comments for functions, classes and modules. Node modules should
|
||||
* Include PyDoc comments for functions, classes and modules. Node modules should
|
||||
be """Implements the XXXX node""".
|
||||
|
||||
* Ensure that any generated SQL does not have any leading or trailing blank lines
|
||||
and consistently uses 4 space indents for nice formatting.
|
||||
|
||||
* Don't special-case any Slony objects. pgAdmin 4 will have no direct knowledge
|
||||
* Don't special-case any Slony objects. pgAdmin 4 will have no direct knowledge
|
||||
of Slony, unlike pgAdmin 3.
|
||||
|
||||
* If you copy/paste modules, please ensure any comments are properly updated.
|
||||
* If you copy/paste modules, please ensure any comments are properly updated.
|
||||
|
||||
* Read all comments, and ensure they make sense and provide useful commentary on
|
||||
the code.
|
||||
|
||||
* Ensure that field labels both use PostgreSQL parlance, but also are descriptive.
|
||||
A good example is the "Init" field on an FTS Template - Init is the PG term, but
|
||||
* Ensure that field labels both use PostgreSQL parlance, but also are descriptive.
|
||||
A good example is the "Init" field on an FTS Template - Init is the PG term, but
|
||||
adding the word "Function" after it makes it much more descriptive.
|
||||
|
||||
* Re-use code whereever possible, but factor it out into a suitably central
|
||||
location - don't copy and paste it unless modifications are required!
|
||||
|
||||
* Format code nicely to make it readable. Break up logical chunks of code with
|
||||
blank lines, and comment well to describe what different sections of code are
|
||||
* Format code nicely to make it readable. Break up logical chunks of code with
|
||||
blank lines, and comment well to describe what different sections of code are
|
||||
for or pertain to.
|
||||
|
||||
* Ensure that form validation works correctly and is consistent with other
|
||||
* Ensure that form validation works correctly and is consistent with other
|
||||
dialogues in the way errors are displayed.
|
||||
|
||||
* On dialogues with Schema or Owner fields, pre-set the default values to the
|
||||
current schema/user as appropriate. In general, if there are common or sensible
|
||||
default values available, put them in the fields for the user.
|
||||
* On dialogues with Schema or Owner fields, pre-set the default values to the
|
||||
current schema/user as appropriate. In general, if there are common or sensible
|
||||
default values available, put them in the fields for the user.
|
||||
|
||||
* 1 patch == 1 feature. If you need to fix/update existing infrastructure in
|
||||
* 1 patch == 1 feature. If you need to fix/update existing infrastructure in
|
||||
your patch, it's usually easier if it's in a separate patch. Patches containing
|
||||
multiple new features or unrelated changes are likely to be rejected.
|
||||
|
||||
* Ensure the patch is fully functional, and works! If a patch is being sent as
|
||||
a work in progress, not intended for commit, clearly state that it's a WIP,
|
||||
and note what does or does not yet work.
|
||||
* Ensure the patch is fully functional, and works! If a patch is being sent as
|
||||
a work in progress, not intended for commit, clearly state that it's a WIP,
|
||||
and note what does or does not yet work.
|
||||
@@ -4,7 +4,7 @@
|
||||
`Coding Standards`:index:
|
||||
*************************
|
||||
|
||||
pgAdmin uses multiple technologies and multiple languages, each of which have
|
||||
pgAdmin uses multiple technologies and multiple languages, each of which have
|
||||
their own coding standards.
|
||||
|
||||
General
|
||||
@@ -16,24 +16,24 @@ lines wrapped where appropriate to ensure they can be read on smaller displays
|
||||
as it's quite wasteful on modern displays). Typically lines should not be longer
|
||||
than 120 characters.
|
||||
|
||||
Comments should be included in all code where required to explain its
|
||||
Comments should be included in all code where required to explain its
|
||||
purpose or how it works if not obvious from a quick review of the code itself.
|
||||
|
||||
CSS 3
|
||||
*****
|
||||
|
||||
CSS3 is used for styling and layout throughout the application. Extensive use is
|
||||
made of the Bootstrap Framework to aid in that process, however additional
|
||||
made of the Bootstrap Framework to aid in that process, however additional
|
||||
styles must still be created from time to time.
|
||||
|
||||
Most custom styling comes from individual modules which may advertise static
|
||||
stylesheets to be included in the module that is loading them via hooks.
|
||||
|
||||
Styling overrides (for example, to alter the Bootstrap look and feel) will
|
||||
Styling overrides (for example, to alter the Bootstrap look and feel) will
|
||||
typically be found in the **overrides.css** file in the main static file
|
||||
directory for the application.
|
||||
|
||||
Styling should never be applied inline in HTML, always through an external
|
||||
Styling should never be applied inline in HTML, always through an external
|
||||
stylesheet, which should contain comments as appropriate to explain the usage
|
||||
or purpose for the style.
|
||||
|
||||
@@ -48,16 +48,16 @@ Styles should be specified clearly, one per line. For example:
|
||||
|
||||
/* Ensure the codemirror editor displays full height gutters when resized */
|
||||
.CodeMirror, .CodeMirror-gutters {
|
||||
height: 100% !important;
|
||||
}
|
||||
height: 100% !important;
|
||||
}
|
||||
|
||||
All stylesheets must be CSS3 compliant.
|
||||
|
||||
HTML 5
|
||||
******
|
||||
|
||||
HTML 5 is used for page structure throughout the application, in most cases
|
||||
being rendered from templates by the Jinja2 template engine in Flask.
|
||||
HTML 5 is used for page structure throughout the application, in most cases
|
||||
being rendered from templates by the Jinja2 template engine in Flask.
|
||||
|
||||
All HTML must be HTML 5 compliant.
|
||||
|
||||
@@ -109,68 +109,20 @@ names.
|
||||
.. note:: From version 3.0 onwards, new or refactored code should be written using
|
||||
ES6 features and conventions.
|
||||
|
||||
C++
|
||||
***
|
||||
|
||||
C++ code is used in the desktop runtime for the application, primarily with the
|
||||
QT framework and an embedded Python interpreter. Note the use of hanging braces,
|
||||
which may be omitted if on a single statement is present:
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
// Ping the application server to see if it's alive
|
||||
bool PingServer(QUrl url)
|
||||
{
|
||||
QNetworkAccessManager manager;
|
||||
QEventLoop loop;
|
||||
QNetworkReply *reply;
|
||||
QVariant redirectUrl;
|
||||
|
||||
url.setPath("/utils/ping");
|
||||
|
||||
do
|
||||
{
|
||||
reply = manager.get(QNetworkRequest(url));
|
||||
|
||||
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
|
||||
loop.exec();
|
||||
|
||||
redirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
|
||||
url = redirectUrl.toUrl();
|
||||
|
||||
if (!redirectUrl.isNull())
|
||||
delete reply;
|
||||
|
||||
} while (!redirectUrl.isNull());
|
||||
|
||||
if (reply->error() != QNetworkReply::NoError)
|
||||
return false;
|
||||
|
||||
QString response = reply->readAll();
|
||||
|
||||
if (response != "PING")
|
||||
{
|
||||
qDebug() << "Failed to connect, server response: " << response;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Python
|
||||
******
|
||||
|
||||
Python is used for the backend web server. All code must be compatible with
|
||||
Python is used for the backend web server. All code must be compatible with
|
||||
Python 2.7 and should include PyDoc comments whilst following the official
|
||||
Python coding standards defined in
|
||||
`PEP 8 <https://www.python.org/dev/peps/pep-0008/>`_. An example function along
|
||||
Python coding standards defined in
|
||||
`PEP 8 <https://www.python.org/dev/peps/pep-0008/>`_. An example function along
|
||||
with the required file header is shown below::
|
||||
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2020, The pgAdmin Development Team
|
||||
# Copyright (C) 2013 - 2022, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
@@ -185,12 +137,12 @@ with the required file header is shown below::
|
||||
def get_nodes():
|
||||
"""Return a JSON document listing the server groups for the user"""
|
||||
groups = ServerGroup.query.filter_by(user_id=current_user.id)
|
||||
|
||||
|
||||
value = ''
|
||||
for group in groups:
|
||||
value += '{"id":%d,"label":"%s","icon":"icon-server-group","inode":true},' \
|
||||
% (group.id, group.name)
|
||||
|
||||
|
||||
value = value[:-1]
|
||||
|
||||
return value
|
||||
|
||||
return value
|
||||
@@ -79,7 +79,7 @@ rules specified for the locale, *fr-BI-x-icu. The collation is owned by
|
||||
https://www.postgresql.org/docs/current/locale.html
|
||||
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ Click the *Variables* tab to continue.
|
||||
:alt: Column dialog variables tab
|
||||
:align: center
|
||||
|
||||
Use the *Variables* tab to to specify the number of distinct values that may be
|
||||
Use the *Variables* tab to specify the number of distinct values that may be
|
||||
present in the column; this value overrides estimates made by the ANALYZE
|
||||
command. Click the *Add* icon (+) to add a *Name*/*Value* pair:
|
||||
|
||||
@@ -163,10 +163,10 @@ the *Column* dialog:
|
||||
:alt: Column dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a column named *territory* in the table
|
||||
named *distributors*.
|
||||
The example shown demonstrates creating a column named *sal* in the table
|
||||
named *jobhist*.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -79,5 +79,5 @@ The example demonstrates creating a compound trigger named *test_ct*.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -5,7 +5,16 @@
|
||||
***************************
|
||||
|
||||
There are multiple configuration files that are read at startup by pgAdmin. These
|
||||
are as follows:
|
||||
files are used for configuration options that:
|
||||
|
||||
* may be required to be set prior to startup of pgAdmin as they control how
|
||||
the application will operate.
|
||||
* system administrators may wish to control across an organisation to enforce
|
||||
security policies.
|
||||
* are so rarely or unlikely to be changed that it doesn't
|
||||
make sense to allow them to be changed through the user interface.
|
||||
|
||||
The configuration files are as follows:
|
||||
|
||||
* ``config.py``: This is the main configuration file, and should not be modified.
|
||||
It can be used as a reference for configuration settings, that may be overridden
|
||||
@@ -27,11 +36,14 @@ are as follows:
|
||||
intended for system administrators to include settings that are configured
|
||||
system-wide from a secure location that users cannot normally modify and that
|
||||
is outside of the pgAdmin installation. The location for this file varies
|
||||
based on the platform, and only needs to be created if desired:
|
||||
based on the platform, and only needs to be created if desired.
|
||||
|
||||
* Linux: ``/etc/pgadmin/config_system.py``
|
||||
* macOS: ``/Library/Preferences/pgadmin/config_system.py``
|
||||
* Windows: ``%CommonProgramFiles%\pgadmin\config_system.py``
|
||||
.. csv-table::
|
||||
:header: "**Platform**", "**File Location**"
|
||||
|
||||
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
|
||||
|
||||
@@ -18,7 +18,7 @@ control, and select *Server Group* from the *Create* menu.
|
||||
Use the fields on the *Server* dialog to define the connection properties for
|
||||
each new server that you wish to manage with pgAdmin. To open the *Server*
|
||||
dialog, right-click on the *Servers* node of the tree control, and select
|
||||
*Server* from the *Create* menu.
|
||||
*Server* from the *Register* menu.
|
||||
|
||||
.. toctree::
|
||||
|
||||
|
||||
@@ -17,14 +17,25 @@ maintenance functions to be executed. Multiple versions are included in the
|
||||
following directories to allow use with different versions of the database
|
||||
server:
|
||||
|
||||
* PostgreSQL 9.5: */usr/local/pgsql-9.5*
|
||||
* PostgreSQL 9.6: */usr/local/pgsql-9.6*
|
||||
* PostgreSQL 10: */usr/local/pgsql-10*
|
||||
* PostgreSQL 11: */usr/local/pgsql-11*
|
||||
* PostgreSQL 12: */usr/local/pgsql-12*
|
||||
* PostgreSQL 13: */usr/local/pgsql-13*
|
||||
* PostgreSQL 14: */usr/local/pgsql-14*
|
||||
|
||||
The most recent version of the utilities is used by default; this may be
|
||||
changed in the :ref:`preferences`.
|
||||
The default binary paths set in the container are as follows:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
DEFAULT_BINARY_PATHS = {
|
||||
'pg-14': '/usr/local/pgsql-14',
|
||||
'pg-13': '/usr/local/pgsql-13',
|
||||
'pg-12': '/usr/local/pgsql-12',
|
||||
'pg-11': '/usr/local/pgsql-11',
|
||||
'pg-10': '/usr/local/pgsql-10'
|
||||
}
|
||||
|
||||
this may be changed in the :ref:`preferences`.
|
||||
|
||||
Environment Variables
|
||||
*********************
|
||||
@@ -41,6 +52,20 @@ to login to pgAdmin. This variable is required and must be set at launch time.
|
||||
This is the password used when setting up the initial administrator account to
|
||||
login to pgAdmin. This variable is required and must be set at launch time.
|
||||
|
||||
**PGADMIN_DISABLE_POSTFIX**
|
||||
|
||||
*Default: <null>*
|
||||
|
||||
If left unset, a Postfix server will be started to deliver password reset
|
||||
emails.
|
||||
|
||||
If set to any value, the Postfix server will not be started, and pgAdmin will
|
||||
need to be configured to use an external mail server using the *PGADMIN_CONFIG_*
|
||||
options below.
|
||||
|
||||
This option is useful if you're running in an environment that prevents the use
|
||||
of sudo to start Postfix, or if you wish to use an external mail server.
|
||||
|
||||
**PGADMIN_ENABLE_TLS**
|
||||
|
||||
*Default: <null>*
|
||||
@@ -90,7 +115,7 @@ Adjust the number of threads the Gunicorn server uses to handle incoming
|
||||
requests. This should typically be left as-is, except in highly loaded systems
|
||||
where it may be increased.
|
||||
|
||||
**PGADMIN_CONFIG_**
|
||||
**PGADMIN_CONFIG_***
|
||||
|
||||
This is a variable prefix that can be used to override any of the configuration
|
||||
options in pgAdmin's *config.py* file. Add the *PGADMIN_CONFIG_* prefix to any
|
||||
@@ -103,6 +128,12 @@ is read after */pgadmin4/config.py* and before */pgadmin4/config_local.py*.
|
||||
Any settings given will therefore override anything in config.py, but can be
|
||||
overridden by settings in config_local.py.
|
||||
|
||||
Settings are only written to */pgadmin4/config_distro.py* once, typically on
|
||||
first launch of the container. If */pgadmin4/config_distro.py* contains one or
|
||||
more lines, then no changes are made; for example, if the container instance is
|
||||
restarted, or */pgadmin4/config_distro.py* is mapped to a file on persistent
|
||||
storage (not recommended - use */pgadmin4/config_local.py* instead)!
|
||||
|
||||
See :ref:`config_py` for more information on the available configuration settings.
|
||||
|
||||
Mapped Files and Directories
|
||||
|
||||
@@ -131,5 +131,5 @@ allows unlimited connections, and is available to all authenticated users.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -15,7 +15,7 @@ installation, and is distributed as part of Advanced Server. You must have
|
||||
superuser privileges to use the debugger.
|
||||
|
||||
Before using the debugger, you must modify the *postgresql.conf* file, adding
|
||||
the server-side debugger components to the the value of the
|
||||
the server-side debugger components to the value of the
|
||||
*shared_preload_libraries* parameter, for example:
|
||||
|
||||
shared_preload_libraries = '$libdir/plugin_debugger'
|
||||
|
||||
@@ -17,3 +17,4 @@ will provide detailed information about creating a custom deployment.
|
||||
desktop_deployment
|
||||
server_deployment
|
||||
container_deployment
|
||||
cloud_deployment
|
||||
@@ -8,13 +8,8 @@ pgAdmin may be deployed as a desktop application by configuring the application
|
||||
to run in desktop mode and then utilising the desktop runtime to host the
|
||||
program on a supported Windows, Mac OS X or Linux installation.
|
||||
|
||||
The desktop runtime is a system-tray application that when launched, runs the
|
||||
pgAdmin server and launches a web browser to render the user interface. If
|
||||
additional instances of pgAdmin are launched, a new browser tab will be opened
|
||||
and be served by the existing instance of the server in order to minimise system
|
||||
resource utilisation. Clicking the icon in the system tray will present a menu
|
||||
offering options to open a new pgAdmin window, configure the runtime, view the
|
||||
server log and shut down the server.
|
||||
The desktop runtime is a standalone application that when launched, runs the
|
||||
pgAdmin server and opens a window to render the user interface.
|
||||
|
||||
.. note:: Pre-compiled and configured installation packages are available for
|
||||
a number of platforms. These packages should be used by end-users whereever
|
||||
@@ -24,7 +19,7 @@ server log and shut down the server.
|
||||
.. seealso:: For detailed instructions on building and configuring pgAdmin from
|
||||
scratch, please see the README file in the top level directory of the source code.
|
||||
For convenience, you can find the latest version of the file
|
||||
`here <https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=blob_plain;f=README>`_,
|
||||
`here <https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=blob;f=README.md>`_,
|
||||
but be aware that this may differ from the version included with the source code
|
||||
for a specific version of pgAdmin.
|
||||
|
||||
@@ -38,45 +33,107 @@ settings.
|
||||
|
||||
See :ref:`config_py` for more information on configuration settings.
|
||||
|
||||
Runtime
|
||||
*******
|
||||
Desktop Runtime Standalone Application
|
||||
======================================
|
||||
|
||||
When executed, the runtime will automatically try to execute the pgAdmin Python
|
||||
application. If execution fails, it will prompt you to adjust the Python Path
|
||||
to include the directories containing the pgAdmin code as well as any additional
|
||||
Python dependencies. You can enter a list of paths by separating them with a
|
||||
semi-colon character, for example:
|
||||
The Desktop Runtime is based on `NWjs <https://nwjs.io/>`_ which integrates a
|
||||
browser and the Python server creating a standalone application.
|
||||
|
||||
.. code-block:: bash
|
||||
.. image:: images/runtime_standalone.png
|
||||
:alt: Runtime Standalone
|
||||
:align: center
|
||||
|
||||
/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/;/Users/dpage/python-libs/
|
||||
Runtime Menu
|
||||
------------
|
||||
|
||||
The configuration settings are stored using the QSettings class in Qt, which
|
||||
will use an INI file on Unix systems (~/.config/pgadmin/pgadmin4.conf),
|
||||
a plist file on Mac OS X (~/Library/Preferences/org.pgadmin.pgadmin4.plist),
|
||||
and the registry on Windows (HKEY_CURRENT_USER\\Software\\pgadmin\\pgadmin4).
|
||||
.. image:: images/runtime_menu.png
|
||||
:alt: Runtime Menu
|
||||
:align: center
|
||||
|
||||
The configuration settings:
|
||||
Use the *File Menu* to access the *Runtime Menu*:
|
||||
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| Option | Action |
|
||||
+=========================+=========================================================================================================+
|
||||
| *Configure...* | Click to open configuration dialog to configure fixed port, port number and connection timeout. |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *View log...* | Click to open the view log dialog to view the pgAdmin 4 logs. |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *Enter Full Screen* | Click to enter/exit the full screen mode. Keyboard Shortcuts: OSX (Cmd + Ctrl + F), Other OS (F10). |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *Actual Size* | Click to change the window size to it original size. Keyboard Shortcuts: OSX (Cmd + 0), |
|
||||
| | Other OS (Ctrl + 0). |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *Zoom In* | Click to increase the zoom level. Keyboard Shortcuts: OSX (Cmd + +), Other OS (Ctrl + +). |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *Zoom Out* | Click to decrease the zoom level. Keyboard Shortcuts: OSX (Cmd + -), Other OS (Ctrl + -). |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Configuration Dialog
|
||||
--------------------
|
||||
|
||||
Use the *Runtime Menu* to access the *Configuration* dialog:
|
||||
|
||||
.. image:: images/runtime_configuration.png
|
||||
:alt: Runtime Configuration
|
||||
:align: center
|
||||
|
||||
Following are the details of the *Fixed port number?*, *Port Number*, *Connection
|
||||
Timeout*, and 'Open Documentation in Default Browser?' configuration parameters:
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 2 1 4
|
||||
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| Key | Type | Purpose |
|
||||
+==========================+====================+===============================================================+
|
||||
| ApplicationPath | String | The directory containing pgAdmin4.py |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| BrowserCommand | String | An alternate command to run instead of the default browser. |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| ConnectionTimeout | Integer | The number of seconds to wait for application server startup. |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| FixedPort | Boolean | Use a fixed network port number rather than a random one. |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| OpenTabAtStartup | Boolean | Open a browser tab at startup. |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| PortNumber | Integer | The port number to use, if using a fixed port. |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| PythonPath | String | The Python module search path |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
+----------------------------------------+--------------------+---------------------------------------------------------------+
|
||||
| Key | Type | Purpose |
|
||||
+========================================+====================+===============================================================+
|
||||
| FixedPort | Boolean | Use a fixed network port number rather than a random one. |
|
||||
+----------------------------------------+--------------------+---------------------------------------------------------------+
|
||||
| PortNumber | Integer | The port number to use, if using a fixed port. |
|
||||
+----------------------------------------+--------------------+---------------------------------------------------------------+
|
||||
| ConnectionTimeout | Integer | The number of seconds to wait for application server startup. |
|
||||
+----------------------------------------+--------------------+---------------------------------------------------------------+
|
||||
| Open Documentation in Default Browser | Boolean | By checking this option, all documentation links will open in |
|
||||
| | | the default browser instead of in a new window. |
|
||||
+----------------------------------------+--------------------+---------------------------------------------------------------+
|
||||
|
||||
Log dialog
|
||||
----------
|
||||
|
||||
Use the *Runtime Menu* to access the *Log* dialog:
|
||||
|
||||
.. image:: images/runtime_view_log.png
|
||||
:alt: Runtime View Log
|
||||
:align: center
|
||||
|
||||
Click on the *Reload* button at the bottom to view the latest logs of pgAdmin 4
|
||||
Server.
|
||||
|
||||
When executed, the runtime will automatically try to execute the pgAdmin Python
|
||||
application. If execution fails, it will prompt you with error message
|
||||
displaying a *Configure* button at the bottom. You can configure a fixed port
|
||||
number to avoid clashes of the default random port number with other
|
||||
applications and a connection timeout if desired.
|
||||
|
||||
.. image:: images/runtime_error.png
|
||||
:alt: Runtime Error
|
||||
:align: center
|
||||
|
||||
If the error is related to Python Path or pgAdmin Python file then you need to
|
||||
create a file named 'dev_config.json' and specify the following entries:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"pythonPath": "/path/to/python.exe",
|
||||
"pgadminFile": "/path/to/pgAdmin4.py"
|
||||
}
|
||||
|
||||
Note that the *dev_config.py* file should only be required by developers who are
|
||||
working outside of a standard installation.
|
||||
|
||||
The configuration settings are stored in *runtime_config.json* file, which
|
||||
will be available on Unix systems (~/.local/share/pgadmin/),
|
||||
on Mac OS X (~/Library/Preferences/pgadmin),
|
||||
and on Windows (%APPDATA%/pgadmin).
|
||||
@@ -15,3 +15,5 @@ PL/SQL code.
|
||||
query_tool
|
||||
editgrid
|
||||
schema_diff
|
||||
erd_tool
|
||||
psql_tool
|
||||
@@ -59,11 +59,11 @@ the *Domain Constraints* dialog:
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a domain constraint on the domain
|
||||
*timesheets* named *weekday*. It constrains a value to equal *Friday*.
|
||||
*timesheets* named *weekday*. It constrains a value equal to *Friday*.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
|
||||
@@ -114,12 +114,12 @@ the *Domain* dialog:
|
||||
:alt: Domain dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a domain named *minimum-wage* that
|
||||
confirms that the value entered is greater than or equal to *7.25*.
|
||||
The example shown demonstrates creating a domain named *postal_code* that
|
||||
confirms that the value entered is in proper format.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
|
||||
@@ -107,6 +107,86 @@ properties of the geometries directly in map, just click the specific geometry:
|
||||
- *Internet access:* An internet connection is required for the Geometry Viewer
|
||||
to function correctly.
|
||||
|
||||
|
||||
**JSON Data Editor**
|
||||
|
||||
A built in json editor is provided for *JSON/JSONB Data*.Double clicking on json/jsonb
|
||||
data type cell in data grid will open JSON Editor.Editor provides different mode to
|
||||
view and edit json data.
|
||||
|
||||
|
||||
.. image:: images/json_editor_modes.png
|
||||
:alt: Json Editor
|
||||
:align: center
|
||||
|
||||
*Code Mode*:
|
||||
Provides way to format & compact json data.Also provides ability to repair json data
|
||||
by fixing quotes and escape characters, removing comments and JSONP notation and
|
||||
turn JavaScript objects into JSON.
|
||||
|
||||
*Tree Mode*:
|
||||
Enabled to change, add, move, remove, and duplicate fields and values.Provides ability
|
||||
to searh & hilight data.
|
||||
|
||||
*Form Mode*:
|
||||
Allows only to edit values in json data there by providing ability to keep data structure
|
||||
unchanged while editing.
|
||||
|
||||
*Preview Mode*:
|
||||
Provides ability to check data before saving and also shows size of current json data.
|
||||
Format and compact json data as well.
|
||||
|
||||
|
||||
*Editor Toolbar*
|
||||
|
||||
Different options are provided to manipulate json data.
|
||||
|
||||
Code/Preview mode:
|
||||
|
||||
.. image:: images/json_editor_code_preview_tool_bar.png
|
||||
:alt: Json Editor Code/Preview mode Tool Bar
|
||||
:align: center
|
||||
|
||||
|
||||
Tree/Form mode:
|
||||
|
||||
.. image:: images/json_editor_tree_form_mode_tool_bar.png
|
||||
:alt: Json Editor Tree/Form mode Tool Bar
|
||||
:align: center
|
||||
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 3 2
|
||||
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| Icon | Behavior | Available in mode |
|
||||
+======================+========================================================================================+===========================+
|
||||
| *Format Json* | Click to *Format Json* format json data with proper indentation. | Code, Preview |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Compact Json* | Click to *Compact Json* get compacted json data. | Code, Preview |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Sort* | Click to *Sort* icon to set sorting criteria for the data using file values. | Code, Preview, Tree |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Transform* | Click to *Transform* to filter data using JSME query language. | Code, Preview, Tree |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Undo* | Click to *Undo* to undo last action performed on data . | Code, Preview, Tree, From |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Redo* | Click to *Redo* to repat last action performed on data . | Code, Preview, Tree, From |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Mode* | Click to *Mode* dropdown to change dipaly mode of editor.Different modes avaialble | Code, Tree, From, Preview |
|
||||
| | are Code, Preview, Tree, From. | |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Expand All* | Click to *Expand All* to expand json data. | Tree, From |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Collapse All* | Click to *Redo* to collapse json data. | Tree, From |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
| *Search Box* | Enter partial/complete string to search in data. | Tree, From |
|
||||
+----------------------+----------------------------------------------------------------------------------------+---------------------------+
|
||||
|
||||
|
||||
|
||||
|
||||
Sort/Filter options dialog
|
||||
**************************
|
||||
|
||||
|
||||
@@ -0,0 +1,236 @@
|
||||
.. _erd_tool:
|
||||
|
||||
*****************
|
||||
`ERD Tool`:index:
|
||||
*****************
|
||||
|
||||
The Entity-Relationship Diagram (ERD) tool is a database design tool that provides a graphical representation of database tables, columns, and inter-relationships. ERD can give sufficient information for the database administrator to follow when developing and maintaining the database. The ERD Tool allows you to:
|
||||
|
||||
* Design and visualize the database tables and their relationships.
|
||||
* Add notes to the diagram.
|
||||
* Auto-align the tables and links for cleaner visualization.
|
||||
* Save the diagram and open it later to continue working on it.
|
||||
* Generate ready to run SQL from the database design.
|
||||
* Generate the database diagram for an existing database.
|
||||
* Drag and drop tables from browser tree to the diagram.
|
||||
|
||||
.. image:: images/erd_tool.png
|
||||
:alt: ERD tool window
|
||||
:align: center
|
||||
|
||||
You can open multiple copies of the ERD tool in individual tabs simultaneously. To close a copy of the ERD tool, click the *X* in the upper-right hand corner of the tab bar.
|
||||
|
||||
Toolbar
|
||||
*******
|
||||
|
||||
The *ERD Tool* toolbar uses context-sensitive icons that provide shortcuts to frequently performed tasks. The option is enabled for the highlighted icon and is disabled for the grayed-out icon.
|
||||
|
||||
.. image:: images/erd_tool_toolbar.png
|
||||
:alt: ERD tool toolbar
|
||||
:align: center
|
||||
|
||||
Hover over an icon on Toolbar to display a tooltip that describes the icon's functionality.
|
||||
|
||||
File Options
|
||||
************
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4 1
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+================+
|
||||
| *Open File* | Click the *Open File* icon to load a previously saved diagram. | Ctrl + O |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Save* | Click the *Save* icon to perform a quick-save of a previously saved diagram, or to save the | Ctrl + S |
|
||||
| | diagram to a file. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Save as* | Click the *Save As* to open a new browser dialog and specify a new location to save the diagram. | Ctrl + Shift + |
|
||||
| | | S |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Export Options
|
||||
**************
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4 1
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+================+
|
||||
| *Generate SQL* | Click the *Generate SQL* icon to generate the DDL SQL for the diagram and open a query tool | Option + Ctrl +|
|
||||
| | with the generated SQL ready for execution. | S |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Download image* | Click the *Download image* icon to save the ERD diagram in a image formate | Option + Ctrl +|
|
||||
| | | I |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Editing Options
|
||||
***************
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4 1
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+================+
|
||||
| *Add table* | Click this button to add a new table to the diagram. On clicking, this will open a table dialog | Option/Alt + |
|
||||
| | where you can put the table details. | Ctrl + A |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Edit table* | Click this button to edit a table on the diagram. On clicking, this will open a table dialog | Option/Alt + |
|
||||
| | where you can change table details. This will enable when a table is selected. | Ctrl + E |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Clone table* | Click this button to clone the complete table structure, name it with a auto generated name and | Option/Alt + |
|
||||
| | put it in the diagram. | Ctrl + C |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Drop table/link* | You can drop a table or link using this button. You need to select a table or link and click on | Option/Alt + |
|
||||
| | this button to drop it. | Ctrl + D |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Table Relationship Options
|
||||
**************************
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4 1
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+================+
|
||||
| *1M* | Click this button to open a one-to-many relationship dialog to add a relationship between the | Option/Alt + |
|
||||
| | two tables. The selected table becomes the referencing table and will have the *many* endpoint of | Ctrl + O |
|
||||
| | the link. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *MM* | Click this button to open a many-to-many relationship dialog to add a relationship between the | Option/Alt + |
|
||||
| | two tables. This option will create a new table based on the selected columns for the two relating| Ctrl + M |
|
||||
| | tables and link them. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Utility Options
|
||||
***************
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4 1
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+================+
|
||||
| *Add/Edit note* | Click this button to make notes on tables nodes while designing the database. | Option/Alt + |
|
||||
| | | Ctrl + N |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Auto align* | Click this button to auto align all tables and links to make it look more cleaner. | Option/Alt + |
|
||||
| | | Ctrl + L |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Show details* | Click this button to toggle the column details visibility. It allows you to show few or more | Option/Alt + |
|
||||
| | column details. | Shift + D |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Zoom Options
|
||||
************
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 1 4 1
|
||||
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+================+
|
||||
| *Zoom to fit* | Click this button to zoom in/out automatically and fit all the tables to the view. | Option/Alt + |
|
||||
| | | Shift + F |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Zoom in* | Click this button to zoom in the diagram. | Option/Alt + |
|
||||
| | | Shift + "+" |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Zoom out* | Click this button to zoom out the diagram. | Option/Alt + |
|
||||
| | | Shift + "-" |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
Table Dialog
|
||||
************
|
||||
|
||||
.. image:: images/erd_table_dialog.png
|
||||
:alt: ERD tool table dialog
|
||||
:align: center
|
||||
|
||||
The table dialog allows you to:
|
||||
|
||||
* Change the table structure details.
|
||||
* It can be used edit an existing table or add a new one.
|
||||
* Refer :ref:`table dialog <table_dialog>` for information on different fields.
|
||||
|
||||
Table Node
|
||||
**********
|
||||
|
||||
.. image:: images/erd_table_node.png
|
||||
:alt: ERD tool table node
|
||||
:align: center
|
||||
|
||||
The table node shows table details in a graphical representation:
|
||||
|
||||
* The top bar has a *details toggle button* that is used to toggle column details visibility. There is also a *note button* that is visible only if there is some note added. you can click on this button to quickly change the note.
|
||||
* The first row shows the schema name of the table. Eg. *public* in above image.
|
||||
* The second row shows the table name. Eg. *users* in above image.
|
||||
* All other rows below the table name are the columns of the table along with data type. If the column is a primary key then it will have lock key icon eg. id is the primary key in above image. Otherwise, it will have column icon.
|
||||
* you can click on the node and drag to move on the canvas.
|
||||
* Upon double click on the table node or by clicking the edit button from the toolbar, the table dialog opens where you can change the table details. Refer :ref:`table dialog <table_dialog>` for information on different fields.
|
||||
|
||||
The One to Many Link Dialog
|
||||
***************************
|
||||
|
||||
.. image:: images/erd_1m_dialog.png
|
||||
:alt: ERD tool 1M dialog
|
||||
:align: center
|
||||
|
||||
The one to many link dialog allows you to:
|
||||
|
||||
* Add a foreign key relationship between two tables.
|
||||
* *Local Table* is the table that references a table and has the *many* end point.
|
||||
* *Local Column* the column that references.
|
||||
* *Referenced Table* is the table that is being referred and has the *one* end point.
|
||||
* *Referenced Column* the column that is being referred.
|
||||
|
||||
The Many to Many Link Dialog
|
||||
****************************
|
||||
|
||||
.. image:: images/erd_mm_dialog.png
|
||||
:alt: ERD tool MM dialog
|
||||
:align: center
|
||||
|
||||
The many to many link dialog allows you to:
|
||||
|
||||
* Add a many to many relationship between two tables.
|
||||
* It creates a relationship tables having columns derived from the two tables and link them to the tables.
|
||||
* *Left Table* is the first table that is to be linked. It will receive the *one* endpoint of the link with the new relation table.
|
||||
* *Left Column* the column of the first table, that will always be a primary key.
|
||||
* *Right Table* is the second table that is to be linked. It will receive the *one* endpoint of the link with the new relation table.
|
||||
* *Right Column* the column of the second table, that will always be a primary key.
|
||||
|
||||
The Table Link
|
||||
**************
|
||||
|
||||
.. image:: images/erd_table_link.png
|
||||
:alt: ERD tool table link
|
||||
:align: center
|
||||
|
||||
The table link shows relationship between tables:
|
||||
|
||||
* The single line endpoint of the link shows the column that is being referred.
|
||||
* The three line endpoint of the link shows the column that refers.
|
||||
* If one of the columns that is being referred or that refers is removed from the table then the link will get dropped.
|
||||
* you can click on the link and drag to move on the canvas.
|
||||
|
||||
|
||||
The Table Notes
|
||||
***************
|
||||
|
||||
.. image:: images/erd_table_note.png
|
||||
:alt: ERD tool table note
|
||||
:align: center
|
||||
|
||||
* You can use the notes popup to mark some notes while designing the database.
|
||||
* You open the pop-up using the toolbar note button.
|
||||
* If some note is added to a table then it will have notes button on the table node. You can click on the button to check/update notes.
|
||||
@@ -4,14 +4,14 @@
|
||||
`Event Trigger Dialog`:index:
|
||||
*****************************
|
||||
|
||||
Use the *Domain Trigger* dialog to define an event trigger. Unlike regular
|
||||
Use the *Event Trigger* dialog to define an event trigger. Unlike regular
|
||||
triggers, which are attached to a single table and capture only DML events,
|
||||
event triggers are global to a particular database and are capable of capturing
|
||||
DDL events. Like regular triggers, event triggers can be written in any
|
||||
procedural language that includes event trigger support, or in C, but not in
|
||||
SQL.
|
||||
|
||||
The *Domain Trigger* dialog organizes the development of a event trigger through
|
||||
The *Event Trigger* dialog organizes the development of a event trigger through
|
||||
the following dialog tabs: *General*, *Definition*, and *Security Labels*. The
|
||||
*SQL* tab displays the SQL code generated by dialog selections.
|
||||
|
||||
@@ -67,7 +67,7 @@ in the *Delete Row* popup.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Domain Trigger* dialog generate a generate a SQL command.
|
||||
Your entries in the *Event Trigger* dialog generate a generate a SQL command.
|
||||
Use the *SQL* tab for review; revisit or switch tabs to make any changes to the
|
||||
SQL command.
|
||||
|
||||
@@ -75,18 +75,18 @@ Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Domain Trigger* dialog:
|
||||
the *Event Trigger* dialog:
|
||||
|
||||
.. image:: images/event_trigger_sql.png
|
||||
:alt: Event trigger dialog sql tab
|
||||
:align: center
|
||||
|
||||
The command creates an event trigger named *accounts* that invokes the procedure
|
||||
named *acct_due*.
|
||||
named *evt_tri_fun*.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
|
||||
@@ -58,13 +58,15 @@ Click the *Columns* tab to continue.
|
||||
:alt: Exclusion constraint dialog columns tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Columns* tab to to specify the column(s) to which the
|
||||
constraint applies. Use the drop-down listbox next to *Column* to select a
|
||||
column and click the *Add* icon (+) to provide details of the action on the
|
||||
column:
|
||||
Use the fields in the *Columns* tab to specify the column(s) or expression(s)
|
||||
to which the constraint applies. Use the *Is expression ?* switch to enable
|
||||
expression text input. Use the drop-down listbox next to *Column*
|
||||
to select a column. Once the *Column* is selected or the *Expression* is
|
||||
entered then click the *Add* icon (+) to provide details of the action on the
|
||||
column/expression:
|
||||
|
||||
* The *Column* field is populated with the selection made in the *Column*
|
||||
drop-down listbox.
|
||||
* The *Col/Exp* field is populated with the selection made in the *Column*
|
||||
drop-down listbox or the *Expression* entered.
|
||||
* If applicable, use the drop-down listbox in the *Operator class* to specify
|
||||
the operator class that will be used by the index for the column.
|
||||
* Move the *DESC* switch to *DESC* to specify a descending sort order. The
|
||||
@@ -94,11 +96,9 @@ the *Exclusion Constraint* dialog:
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating an exclusion constraint named
|
||||
*exclude_department* that restricts additions to the dept table to those
|
||||
additions that are not equal to the value of the *deptno* column. The
|
||||
constraint uses a btree index.
|
||||
*ex_dept_no*. The constraint uses a btree index.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -54,11 +54,11 @@ the *Extension* dialog:
|
||||
:alt: Extension dialog sql tab
|
||||
:align: center
|
||||
|
||||
The command creates the *chkpass* extension in the *public* schema. It is
|
||||
version *1.0* of *chkpass*.
|
||||
The command creates the *adminpack* extension in the *public* schema. It is
|
||||
version *1.0* of *adminpack*.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
@@ -53,7 +53,7 @@ Click the *Options* tab to continue.
|
||||
|
||||
Use the fields in the *Options* tab to specify options:
|
||||
|
||||
* Click the the *Add* icon (+) button to add an option/value pair for the
|
||||
* Click the *Add* icon (+) button to add an option/value pair for the
|
||||
foreign data wrapper. Supported option/value pairs will be specific to the
|
||||
selected foreign data wrapper.
|
||||
* Specify the option name in the *Option* field and provide a corresponding
|
||||
@@ -97,12 +97,12 @@ the *Foreign Data Wrapper* dialog:
|
||||
:alt: Foreign data wrapper dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example creates a foreign data wrapper named *libpq_debug* that uses
|
||||
The example creates a foreign data wrapper named *lib_qp_debug* that uses
|
||||
pre-existing validator and handler functions, *dblink_fdw_validator* and
|
||||
*libpg_fdw_handler*. Selections on the *Options* tab set *debug* equal to
|
||||
*true*. The foreign data wrapper is owned by *postgres*.
|
||||
|
||||
* Click the *Help* button (?) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -129,10 +129,10 @@ the *Foreign key* dialog:
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a foreign key constraint named
|
||||
*territory_fkey* that matches values in the *distributors* table *territory*
|
||||
column with those of the *sales_territories* table *region* column.
|
||||
*jobhist_ref_dept_fk* that matches values in the *jobhist* table *dept_no*
|
||||
column with those of the *dept* table *deptno* column.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -93,5 +93,5 @@ Options for the foreign server include a host and a port.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -49,7 +49,7 @@ Click the *Columns* tab to continue.
|
||||
:alt: Foreign table dialog columns tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Columns* tab to to add columns and their attributes to
|
||||
Use the fields in the *Columns* tab to add columns and their attributes to
|
||||
the table. Click the *Add* icon (+) to define a column:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the column.
|
||||
@@ -157,10 +157,10 @@ the *Foreign Table* dialog:
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a foreign table *weblogs* with multiple
|
||||
columns and two options.
|
||||
columns.
|
||||
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -49,7 +49,7 @@ Click the *Tokens* tab to continue.
|
||||
Use the fields in the *Tokens* tab to add a token:
|
||||
|
||||
* Use the *Tokens* field to specify the name of a token.
|
||||
* Click the *Add* icon (+) to create a token.
|
||||
* Click the *Add* button to create a token.
|
||||
* Use the *Dictionaries* field to specify a dictionary.
|
||||
|
||||
Repeat these steps to add additional tokens; to discard a token, click the
|
||||
@@ -73,11 +73,11 @@ the *FTS Configuration* dialog:
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a FTS configuration named
|
||||
*meme_phrases*. It uses the *default* parser.
|
||||
*english_phrases*. It uses the *default* parser.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ The example shown demonstrates creating a custom dictionary named
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ command.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
@@ -52,12 +52,12 @@ the *FTS Template* dialog:
|
||||
:alt: FTS template dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a fts template named *ru_template* that
|
||||
The example shown demonstrates creating a fts template named *eng.template* that
|
||||
uses the ispell dictionary.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
|
||||
|
||||
|
||||
@@ -181,5 +181,5 @@ function have three columns (p_ename, p_sal and p_comm).
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -33,9 +33,14 @@ Mode is pre-configured for security.
|
||||
|
||||
deployment
|
||||
login
|
||||
mfa
|
||||
user_management
|
||||
change_user_password
|
||||
enabling_ldap_authentication
|
||||
restore_locked_user
|
||||
ldap
|
||||
kerberos
|
||||
oauth2
|
||||
webserver
|
||||
|
||||
|
||||
.. note:: Pre-compiled and configured installation packages are available for
|
||||
|
||||
@@ -10,8 +10,8 @@ search box, dropdown lists, and checkboxes facilitate quick selections of
|
||||
database objects, roles and privileges.
|
||||
|
||||
The wizard organizes privilege management through a sequence of windows:
|
||||
*Object Selection (step 1 of 3)*, *Privileges Selection (step 2 of 3)* and
|
||||
*Final (Review Selection) (step 3 of 3)*. The *Final (Review Selection)* window
|
||||
*Object Selection*, *Privileges Selection* and
|
||||
*Review Selection*. The *Review Selection* window
|
||||
displays the SQL code generated by wizard selections.
|
||||
|
||||
To launch the *Grant Wizard* tool, select a database object in the *pgAdmin*
|
||||
@@ -22,7 +22,7 @@ tree control, then navigate through *Tools* on the menu bar to click on the
|
||||
:alt: Grant wizard step one page
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Object Selection (step 1 of 3)* window to select the
|
||||
Use the fields in the *Object Selection* window to select the
|
||||
object or objects on which you are modifying privileges. Use the *Search by
|
||||
object type or name* field to locate a database object, or use the scrollbar
|
||||
to scroll through the list of all accessible objects.
|
||||
@@ -35,14 +35,14 @@ to scroll through the list of all accessible objects.
|
||||
* The schema in which the object resides in the *Schema* field
|
||||
* The object name in the *Name* field.
|
||||
|
||||
Click the *Next* button to continue, or the *Cancel* button to close the wizard
|
||||
Click the *Next* button to continue, or the *X* button to close the wizard
|
||||
without modifying privileges.
|
||||
|
||||
.. image:: images/grant_wizard_step2.png
|
||||
:alt: Grant wizard step two page
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Privileges Selection (step 2 of 3)* window to grant
|
||||
Use the fields in the *Privileges Selection* window to grant
|
||||
privileges. If you grant a privilege WITH GRANT OPTION, the Grantee will have
|
||||
the right to grant privileges on the object to others. If WITH GRANT OPTION is
|
||||
subsequently revoked, any role who received access to that object from that
|
||||
@@ -64,11 +64,11 @@ For more information about granting privileges on database objects, see the
|
||||
`PostgreSQL core documentation <https://www.postgresql.org/docs/current/sql-grant.html>`_.
|
||||
|
||||
Click the *Next* button to continue, the *Back* button to select or deselect
|
||||
additional database objects, or the *Cancel* button to close the wizard without
|
||||
additional database objects, or the *X* button to close the wizard without
|
||||
modifying privileges.
|
||||
|
||||
Your entries in the *Grant Wizard* tool generate a SQL command; you can review
|
||||
the command in the *Final (Review Selection) (step 3 of 3)* window (see an
|
||||
the command in the *Review Selection* window (see an
|
||||
example below).
|
||||
|
||||
Example
|
||||
@@ -81,11 +81,6 @@ the *Grant Wizard* tool:
|
||||
:alt: Grant wizard step three page
|
||||
:align: center
|
||||
|
||||
The commands displayed assign a role named *Bob* *INSERT* and *UPDATE*
|
||||
privileges *WITH GRANT OPTION* on the *sales_meetings* and the
|
||||
*sales_territories* tables.
|
||||
|
||||
* Click the *Back* button to select or deselect additional database objects,
|
||||
roles and privileges.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Finish* button to save selections and exit the wizard.
|
||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 299 KiB After Width: | Height: | Size: 218 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 166 KiB After Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 184 KiB After Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 152 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 137 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 75 KiB |