Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e987fe9d37 | ||
|
|
d7b1e2cd9c | ||
|
|
2790689d26 | ||
|
|
7c271d21ae | ||
|
|
75e2167165 | ||
|
|
94170757e8 | ||
|
|
9bdb5ea5e0 | ||
|
|
c3e11bd390 | ||
|
|
d056a94f0c | ||
|
|
f16498a8a7 | ||
|
|
e5638b520d | ||
|
|
6e4923d762 | ||
|
|
1e4fd552ac | ||
|
|
55c6fa0d93 | ||
|
|
7489c372e5 | ||
|
|
893ef4701d | ||
|
|
41ee58e79a | ||
|
|
bf2c001c87 | ||
|
|
245a6e6f57 | ||
|
|
6c662ae672 | ||
|
|
8249e66419 | ||
|
|
6032692de0 | ||
|
|
c580c9d4b3 | ||
|
|
8e974b80ca | ||
|
|
faf8062830 | ||
|
|
56e00d74ad | ||
|
|
051e5038b5 | ||
|
|
c54017eac5 | ||
|
|
73dc130908 | ||
|
|
82aa2d1819 | ||
|
|
1bef98fdfa | ||
|
|
faa6236580 | ||
|
|
a1b0139c9b | ||
|
|
f881542834 | ||
|
|
e64d6edc73 | ||
|
|
b10378fe70 | ||
|
|
80b05973c6 | ||
|
|
426d9d5872 | ||
|
|
110a51c5b2 | ||
|
|
aa668856f7 | ||
|
|
d923dcf98b | ||
|
|
6e7759f1d5 | ||
|
|
2acd2a5615 | ||
|
|
f5a6df4ddb | ||
|
|
da553eec9b | ||
|
|
9a69d27009 | ||
|
|
83170a0e94 | ||
|
|
6d8c53bffd | ||
|
|
7944e75695 | ||
|
|
31653aef70 | ||
|
|
6a931588aa | ||
|
|
b4a754bdc0 | ||
|
|
199844e82c | ||
|
|
db06dd0275 | ||
|
|
72505b27cb | ||
|
|
9f26e7ed20 | ||
|
|
8e4e8b3e5a | ||
|
|
9eff2e9926 | ||
|
|
1c2ba72f02 | ||
|
|
5e54f20578 | ||
|
|
2d4429fa64 | ||
|
|
85baa22ca1 | ||
|
|
4690700a24 | ||
|
|
4745ad56e9 | ||
|
|
04357b7a55 | ||
|
|
a0f6e5272a | ||
|
|
eeeb350ed2 | ||
|
|
a68f0702e2 | ||
|
|
60a6c501fb | ||
|
|
5ff3f40116 | ||
|
|
662266a367 | ||
|
|
bc91a7c7b2 | ||
|
|
0ca65d7cfe | ||
|
|
47f26cc377 | ||
|
|
e0c53e7d1d | ||
|
|
d6da1cf25c | ||
|
|
fc4bef56a0 | ||
|
|
028473eb83 | ||
|
|
ac298b03c0 | ||
|
|
06ad6b8ba8 | ||
|
|
dbbbb2e5ed | ||
|
|
28b741a13a | ||
|
|
1ddc9cc889 | ||
|
|
53ab4d7e8d | ||
|
|
f8f7d5ac6f | ||
|
|
5887fb3815 | ||
|
|
234efc3be7 | ||
|
|
25f85fe123 | ||
|
|
3dadb8989b | ||
|
|
232fe286ee | ||
|
|
6192c48ef9 | ||
|
|
92aabb215f | ||
|
|
c76b30e353 | ||
|
|
1795141aec | ||
|
|
9f455a514e | ||
|
|
7090c02014 | ||
|
|
dc64ce331a | ||
|
|
094e5577e8 | ||
|
|
41e2a674e3 | ||
|
|
bdff046c57 | ||
|
|
5c8aefc01e | ||
|
|
ed76787b76 | ||
|
|
f3e4721a90 | ||
|
|
0d6f07a035 | ||
|
|
624f229ce7 | ||
|
|
3155380621 | ||
|
|
663e8382f3 | ||
|
|
659d0b8436 | ||
|
|
24f9f65b1b | ||
|
|
177def1e58 | ||
|
|
3f541200d9 | ||
|
|
687204771c | ||
|
|
4403f326e9 | ||
|
|
35bbee3023 | ||
|
|
a51de78292 | ||
|
|
a850e7bd5a | ||
|
|
b618dfe286 | ||
|
|
99b51f8f20 | ||
|
|
bfca1e3ac8 | ||
|
|
7f667f5761 | ||
|
|
1281f5cd6c | ||
|
|
350ffcce7c | ||
|
|
8331f62e1c | ||
|
|
c29275011a | ||
|
|
7f53e13aa7 | ||
|
|
d1530015ee | ||
|
|
228d3dde5b | ||
|
|
3a5464b278 | ||
|
|
b9d5e08e8f | ||
|
|
4067d65a30 | ||
|
|
ee2099d9c6 | ||
|
|
bfb05d3f9f | ||
|
|
9cdb3b40ab | ||
|
|
6800b1f723 | ||
|
|
db7a2e3023 | ||
|
|
ee8fec6d7f | ||
|
|
f8afe2ef94 | ||
|
|
efbad77dbe | ||
|
|
b5c8c85c90 | ||
|
|
d7ee4bb932 | ||
|
|
8780462708 | ||
|
|
99a8b70e00 | ||
|
|
0cfd76c279 | ||
|
|
537c27a58e | ||
|
|
aab5fadc01 | ||
|
|
97e39699ea | ||
|
|
76e658ee12 | ||
|
|
7b65507533 | ||
|
|
cbe40176c1 | ||
|
|
bcb1392a1a | ||
|
|
9a8a28e4f9 | ||
|
|
1ff007d1cb | ||
|
|
3cb02bcdc3 | ||
|
|
82d209946f | ||
|
|
2ef3080d0e | ||
|
|
5b322d94e8 | ||
|
|
adb5cd34bf | ||
|
|
108af5c10b | ||
|
|
136bb412a1 | ||
|
|
8cfe39e837 | ||
|
|
ec968dbc14 | ||
|
|
b4d9fea83d | ||
|
|
c019778a47 | ||
|
|
6e49c9c36f | ||
|
|
1813eca1ca | ||
|
|
4a6991d0df | ||
|
|
003ab44a91 | ||
|
|
5a0aae0c1c | ||
|
|
f5b927b925 | ||
|
|
d78dfbd30f | ||
|
|
8168f623c4 | ||
|
|
710d520631 | ||
|
|
beb06a4c76 | ||
|
|
aed6b9e636 | ||
|
|
2c2c738f31 | ||
|
|
ab87035658 | ||
|
|
d3ef1137d9 | ||
|
|
0b82a4ad92 | ||
|
|
f4453e33cc | ||
|
|
809e0682bd | ||
|
|
1831c9e70a | ||
|
|
1dcf46cc5f | ||
|
|
88ab6db976 | ||
|
|
79e6f4c008 | ||
|
|
6b5ca07715 | ||
|
|
3f4d5a687b | ||
|
|
ce8a2bb266 | ||
|
|
3dd1e8e102 | ||
|
|
29fd83dc6c | ||
|
|
ed01274f7b | ||
|
|
20a5899c7d | ||
|
|
1df26cb731 | ||
|
|
379b92729a | ||
|
|
4cbc1f2f59 | ||
|
|
28585110dd | ||
|
|
cdf655f7db | ||
|
|
e6c067025c | ||
|
|
6c7e95a463 | ||
|
|
49503dc73d | ||
|
|
f7d6966d60 | ||
|
|
bf0d53bc2c | ||
|
|
2a56e47c5c | ||
|
|
84b712a008 | ||
|
|
f085460453 | ||
|
|
1a9d8f01aa | ||
|
|
f4ac1e804e | ||
|
|
a17687e27c | ||
|
|
08e6d54184 | ||
|
|
07089785be | ||
|
|
8c39b10d9c | ||
|
|
bd0e4a5a8f | ||
|
|
863f62f4d8 | ||
|
|
7c38c1cb38 | ||
|
|
11a3aa56be | ||
|
|
e4bf52f355 | ||
|
|
ba32c98241 | ||
|
|
954c0d3101 | ||
|
|
6a2ba22f75 | ||
|
|
776884860e | ||
|
|
0aa18fd466 | ||
|
|
15427334af | ||
|
|
3487b3360e | ||
|
|
fabb644230 | ||
|
|
bf1f9a4b07 | ||
|
|
588e3814d1 | ||
|
|
f4bc4475cd | ||
|
|
0340b8fb28 | ||
|
|
15556f9f89 | ||
|
|
b76e0bea83 | ||
|
|
252429df50 | ||
|
|
d6c6b4a15a | ||
|
|
64d31b9d3f | ||
|
|
24ec882f45 | ||
|
|
d397959f6a | ||
|
|
da8cf14047 | ||
|
|
2451db8797 | ||
|
|
173b812b93 | ||
|
|
bdb8f20aed | ||
|
|
0d42f8026c | ||
|
|
c69ffaa91c | ||
|
|
173acd46a5 | ||
|
|
c39d257bf6 | ||
|
|
b3490ba3de | ||
|
|
4e5d8fe8e2 | ||
|
|
c4de5474a4 | ||
|
|
ebb5e3fe65 | ||
|
|
644624eabe | ||
|
|
9dbb74367d | ||
|
|
c07e52b9de | ||
|
|
78d55c7cc0 | ||
|
|
81752bb998 | ||
|
|
fb4afce629 | ||
|
|
6e8ebbd375 | ||
|
|
5c0ea0c012 | ||
|
|
ce7679c4bd | ||
|
|
b36d5d153b | ||
|
|
9e65c971a3 | ||
|
|
71919a4ce9 | ||
|
|
402dfd07db | ||
|
|
bf548dda3f | ||
|
|
2894c6cd14 | ||
|
|
3b69f92d70 | ||
|
|
82bd94e696 | ||
|
|
04328b76ba | ||
|
|
08b78fb6a1 | ||
|
|
23364464c2 | ||
|
|
d774a0ff67 | ||
|
|
5437a8adab | ||
|
|
6d52f2b911 | ||
|
|
2ca11c84e8 | ||
|
|
f561c0cee6 | ||
|
|
321b445a7e | ||
|
|
7ff85903e4 | ||
|
|
8b9c50ee5c | ||
|
|
4b6e9b031c | ||
|
|
e691885881 | ||
|
|
caf181d5e3 | ||
|
|
d90136d93d | ||
|
|
9a00a8a60b | ||
|
|
a588c2994d | ||
|
|
13704a4f34 | ||
|
|
912db8913f | ||
|
|
969a2961fe | ||
|
|
6b80523872 | ||
|
|
c16c593322 | ||
|
|
6a7339bbe4 | ||
|
|
41a20e0252 | ||
|
|
2dd075161d | ||
|
|
91075cc3f5 | ||
|
|
26c7d76d4f | ||
|
|
2185ea302d | ||
|
|
32defc91cc | ||
|
|
37bde4aaf4 | ||
|
|
1f76d207f2 | ||
|
|
8eab534c95 | ||
|
|
0eb3008426 | ||
|
|
dd187b9122 | ||
|
|
15252b0a26 | ||
|
|
aa95ff9f57 | ||
|
|
dad0d690db | ||
|
|
2fa849dc26 | ||
|
|
f340cd044b | ||
|
|
991f667f9f | ||
|
|
307637b969 | ||
|
|
91595593d3 | ||
|
|
12186a0fd6 | ||
|
|
9fdf68d559 | ||
|
|
8851cb0704 | ||
|
|
a936f708de | ||
|
|
dfa892d2a2 | ||
|
|
6f0eafb223 | ||
|
|
90a45557b9 | ||
|
|
2790d01c31 | ||
|
|
4d23bb24a5 | ||
|
|
361f7077fd | ||
|
|
dcd163ac02 | ||
|
|
ee37be56f9 | ||
|
|
f1ef7b0346 | ||
|
|
0ee50ac248 | ||
|
|
ea4dbd31e8 | ||
|
|
155768a2d7 | ||
|
|
da8da7bb49 | ||
|
|
5786c17569 | ||
|
|
941dea99f5 | ||
|
|
ab5f35da8d | ||
|
|
db4bb22cc6 | ||
|
|
2cd58efcdd | ||
|
|
ed8d1cde00 | ||
|
|
b7121bb2d2 | ||
|
|
3364350b01 | ||
|
|
4b421550d3 | ||
|
|
020d9bb018 | ||
|
|
eb189844e7 | ||
|
|
20c42d878b | ||
|
|
036bd66638 | ||
|
|
f02f91cbf1 | ||
|
|
34b59da526 | ||
|
|
277bf85645 | ||
|
|
991fe3d797 | ||
|
|
4009ac3108 | ||
|
|
92e6a47713 | ||
|
|
e53c2b1a5d | ||
|
|
e536408ce2 | ||
|
|
f74448a1b2 | ||
|
|
9b5a6e2bb7 | ||
|
|
3fef078ec8 | ||
|
|
74af8976c9 | ||
|
|
ecded18333 | ||
|
|
5452bff49e | ||
|
|
05ae330030 | ||
|
|
94e1820ccd | ||
|
|
49b318c39e | ||
|
|
4ac064de42 | ||
|
|
2ef71cf749 | ||
|
|
d96f453e7f | ||
|
|
0b47d1dbf6 | ||
|
|
d728ee7436 | ||
|
|
1a192109d6 | ||
|
|
024cfd2fab | ||
|
|
a25bb2b7db | ||
|
|
fd3337024f | ||
|
|
ded446fe8a | ||
|
|
a9d964b5ca | ||
|
|
9c3925e448 | ||
|
|
6016a5ee98 | ||
|
|
490999f528 | ||
|
|
ceb0e39e14 | ||
|
|
3bed332439 | ||
|
|
c21ea3c342 | ||
|
|
84ecffa4d9 | ||
|
|
9bff6c7157 | ||
|
|
5c4c09f237 | ||
|
|
f706f7ed0c | ||
|
|
fb12b2e2fc | ||
|
|
badbbade08 |
No files matched your search
@@ -43,3 +43,5 @@ web/pgAdmin/static/js/generated
|
||||
web/pgadmin/static/js/generated
|
||||
web/yarn-error.log
|
||||
/web/cacert.pem
|
||||
auditjs.html
|
||||
auditpy.txt
|
||||
@@ -0,0 +1,180 @@
|
||||
########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2018, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
#########################################################################
|
||||
|
||||
#########################################################################
|
||||
# Create a Node container which will be used to build the JS components
|
||||
# and clean up the web/ source code
|
||||
#########################################################################
|
||||
|
||||
FROM node:8-alpine AS app-builder
|
||||
|
||||
RUN apk add --no-cache \
|
||||
autoconf \
|
||||
automake \
|
||||
bash \
|
||||
g++ \
|
||||
libc6-compat \
|
||||
libjpeg-turbo-dev \
|
||||
libpng-dev \
|
||||
make \
|
||||
nasm \
|
||||
git \
|
||||
zlib-dev
|
||||
|
||||
# Create the /pgadmin4 directory and copy the source into it. Explicitly
|
||||
# remove the node_modules directory as we'll recreate a clean version, as well
|
||||
# as various other files we don't want
|
||||
COPY web /pgadmin4/web
|
||||
RUN rm -rf /pgadmin4/web/*.log \
|
||||
/pgadmin4/web/config_*.py \
|
||||
/pgadmin4/web/node_modules \
|
||||
/pgadmin4/web/regression \
|
||||
`find /pgadmin4/web -type d -name tests` \
|
||||
`find /pgadmin4/web -type f -name .DS_Store`
|
||||
|
||||
WORKDIR /pgadmin4/web
|
||||
|
||||
# Build the JS vendor code in the app-builder, and then remove the vendor source.
|
||||
RUN npm install && \
|
||||
npm audit fix && \
|
||||
rm -f yarn.lock && \
|
||||
yarn import && \
|
||||
yarn audit && \
|
||||
rm -f package-lock.json && \
|
||||
yarn run bundle && \
|
||||
rm -rf node_modules \
|
||||
yarn.lock \
|
||||
package.json \
|
||||
.[^.]* \
|
||||
babel.cfg \
|
||||
webpack.* \
|
||||
karma.conf.js \
|
||||
./pgadmin/static/js/generated/.cache
|
||||
|
||||
#########################################################################
|
||||
# Now, create a documentation build container for the Sphinx docs
|
||||
#########################################################################
|
||||
|
||||
FROM python:3.7-alpine3.10 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 \
|
||||
flask_paranoid \
|
||||
python-dateutil \
|
||||
flask_sqlalchemy \
|
||||
flask_gravatar \
|
||||
flask_migrate \
|
||||
simplejson \
|
||||
cryptography
|
||||
|
||||
# Copy the docs from the local tree. Explicitly remove any existing builds that
|
||||
# may be present
|
||||
COPY docs /pgadmin4/docs
|
||||
COPY web /pgadmin4/web
|
||||
RUN rm -rf /pgadmin4/docs/en_US/_build
|
||||
|
||||
# Build the docs
|
||||
RUN LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 make -C /pgadmin4/docs/en_US -f Makefile.sphinx html
|
||||
|
||||
#########################################################################
|
||||
# Create additional builders to get all of the PostgreSQL utilities
|
||||
#########################################################################
|
||||
|
||||
FROM postgres:9.4-alpine as pg94-builder
|
||||
FROM postgres:9.5-alpine as pg95-builder
|
||||
FROM postgres:9.6-alpine as pg96-builder
|
||||
FROM postgres:10-alpine as pg10-builder
|
||||
FROM postgres:11-alpine as pg11-builder
|
||||
FROM postgres:12-alpine as pg12-builder
|
||||
|
||||
FROM alpine:3.10 as tool-builder
|
||||
|
||||
# Copy the PG binaries
|
||||
COPY --from=pg94-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-9.4/
|
||||
COPY --from=pg94-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-9.4/
|
||||
COPY --from=pg94-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-9.4/
|
||||
COPY --from=pg94-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-9.4/
|
||||
|
||||
COPY --from=pg95-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-9.5/
|
||||
COPY --from=pg95-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-9.5/
|
||||
COPY --from=pg95-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-9.5/
|
||||
COPY --from=pg95-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-9.5/
|
||||
|
||||
COPY --from=pg96-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-9.6/
|
||||
COPY --from=pg96-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-9.6/
|
||||
COPY --from=pg96-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-9.6/
|
||||
COPY --from=pg96-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-9.6/
|
||||
|
||||
COPY --from=pg10-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-10/
|
||||
COPY --from=pg10-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-10/
|
||||
COPY --from=pg10-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-10/
|
||||
COPY --from=pg10-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-10/
|
||||
|
||||
COPY --from=pg11-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-11/
|
||||
COPY --from=pg11-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-11/
|
||||
COPY --from=pg11-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-11/
|
||||
COPY --from=pg11-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-11/
|
||||
|
||||
COPY --from=pg12-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-12/
|
||||
COPY --from=pg12-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-12/
|
||||
COPY --from=pg12-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-12/
|
||||
COPY --from=pg12-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-12/
|
||||
|
||||
#########################################################################
|
||||
# Assemble everything into the final container.
|
||||
#########################################################################
|
||||
|
||||
FROM python:3.7-alpine3.10
|
||||
|
||||
COPY --from=tool-builder /usr/local/pgsql /usr/local/
|
||||
|
||||
WORKDIR /pgadmin4
|
||||
ENV PYTHONPATH=/pgadmin4
|
||||
|
||||
# Copy in the code and docs
|
||||
COPY --from=app-builder /pgadmin4/web /pgadmin4
|
||||
COPY --from=docs-builder /pgadmin4/docs/en_US/_build/html/ /pgadmin4/docs
|
||||
COPY requirements.txt /pgadmin4/requirements.txt
|
||||
|
||||
# Install build-dependencies, build & install C extensions and purge deps in
|
||||
# one RUN step
|
||||
RUN apk add --no-cache --virtual \
|
||||
build-deps \
|
||||
build-base \
|
||||
postgresql-dev \
|
||||
libffi-dev \
|
||||
linux-headers && \
|
||||
apk add \
|
||||
postfix \
|
||||
postgresql-client \
|
||||
postgresql-libs && \
|
||||
pip install --upgrade pip && \
|
||||
pip install --no-cache-dir -r requirements.txt && \
|
||||
pip install --no-cache-dir gunicorn && \
|
||||
apk del --no-cache build-deps
|
||||
|
||||
# Copy the runner script
|
||||
COPY pkg/docker/run_pgadmin.py /pgadmin4
|
||||
COPY pkg/docker/entrypoint.sh /entrypoint.sh
|
||||
|
||||
# Precompile and optimize python code to save time and space on startup
|
||||
RUN python -O -m compileall -x node_modules /pgadmin4
|
||||
|
||||
# Finish up
|
||||
VOLUME /var/lib/pgadmin
|
||||
EXPOSE 80 443
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
@@ -280,8 +280,15 @@ REM Main build sequence Ends
|
||||
|
||||
ECHO Staging PostgreSQL components...
|
||||
COPY "%PGDIR%\bin\libpq.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGDIR%\bin\ssleay32.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGDIR%\bin\libeay32.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%PGDIR%\bin\libcrypto-1_1.dll" (
|
||||
REM OpenSSL 1.1.1
|
||||
COPY "%PGDIR%\bin\libcrypto-1_1.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGDIR%\bin\libssl-1_1.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
) ELSE (
|
||||
REM OpenSSL 1.0.2
|
||||
COPY "%PGDIR%\bin\ssleay32.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGDIR%\bin\libeay32.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
)
|
||||
IF EXIST "%PGDIR%\bin\libintl-*.dll" COPY "%PGDIR%\bin\libintl-*.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%PGDIR%\bin\libiconv-*.dll" COPY "%PGDIR%\bin\libiconv-*.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%PGDIR%\bin\zlib.dll" COPY "%PGDIR%\bin\zlib.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
APP_NAME := $(shell grep ^APP_NAME web/config.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]' | tr -d "'" | awk '{print tolower($$0)}')
|
||||
APP_RELEASE := $(shell grep ^APP_RELEASE web/config.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
|
||||
APP_REVISION := $(shell grep ^APP_REVISION web/config.py | awk -F"=" '{print $$NF}' | tr -d '[:space:]')
|
||||
|
||||
#########################################################################
|
||||
# High-level targets
|
||||
#########################################################################
|
||||
@@ -20,7 +24,13 @@ appbundle: docs
|
||||
./pkg/mac/build.sh
|
||||
|
||||
install-node:
|
||||
cd web && yarn install
|
||||
cd web && npm install
|
||||
cd web && npm audit fix
|
||||
rm -f web/yarn.lock
|
||||
cd web && yarn import
|
||||
cd web && yarn audit
|
||||
rm -f package-lock.json
|
||||
rm -f web/package-lock.json
|
||||
|
||||
bundle:
|
||||
cd web && yarn run bundle
|
||||
@@ -31,8 +41,20 @@ bundle-dev:
|
||||
linter:
|
||||
cd web && yarn run linter
|
||||
|
||||
check: install-node bundle linter
|
||||
cd web && pycodestyle --config=.pycodestyle . && yarn run karma start --single-run && python regression/runtests.py
|
||||
check: install-node bundle linter check-pep8
|
||||
cd web && yarn run karma start --single-run && python regression/runtests.py
|
||||
|
||||
check-audit:
|
||||
cd web && yarn run audit
|
||||
|
||||
check-auditjs:
|
||||
cd web && yarn run auditjs
|
||||
|
||||
check-auditjs-html:
|
||||
cd web && yarn run auditjs-html
|
||||
|
||||
check-auditpy:
|
||||
cd web && yarn run auditpy
|
||||
|
||||
check-pep8:
|
||||
pycodestyle --config=.pycodestyle docs/
|
||||
@@ -43,6 +65,9 @@ check-pep8:
|
||||
check-python:
|
||||
cd web && python regression/runtests.py --exclude feature_tests
|
||||
|
||||
check-resql:
|
||||
cd web && python regression/runtests.py --pkg resql --exclude feature_tests
|
||||
|
||||
check-feature: install-node bundle
|
||||
cd web && python regression/runtests.py --pkg feature_tests
|
||||
|
||||
@@ -56,7 +81,7 @@ runtime:
|
||||
cd runtime && qmake CONFIG+=release && make
|
||||
|
||||
# Include all clean sub-targets in clean
|
||||
clean: clean-appbundle clean-docker clean-dist clean-docs clean-node clean-pip clean-src clean-runtime
|
||||
clean: clean-appbundle clean-dist clean-docs clean-node clean-pip clean-src clean-runtime
|
||||
rm -rf web/pgadmin/static/js/generated/*
|
||||
rm -rf web/pgadmin/static/js/generated/.cache
|
||||
rm -rf web/pgadmin/static/css/generated/*
|
||||
@@ -69,9 +94,6 @@ clean-runtime:
|
||||
clean-appbundle:
|
||||
rm -rf mac-build/
|
||||
|
||||
clean-docker:
|
||||
rm -rf docker-build/
|
||||
|
||||
clean-dist:
|
||||
rm -rf dist/
|
||||
|
||||
@@ -88,7 +110,8 @@ clean-src:
|
||||
rm -rf src-build/
|
||||
|
||||
docker:
|
||||
./pkg/docker/build.sh
|
||||
echo $(APP_NAME)
|
||||
docker build -t ${APP_NAME} -t $(APP_NAME):latest -t $(APP_NAME):$(APP_RELEASE) -t $(APP_NAME):$(APP_RELEASE).$(APP_REVISION) .
|
||||
|
||||
docs:
|
||||
LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 $(MAKE) -C docs/en_US -f Makefile.sphinx html
|
||||
|
||||
@@ -33,8 +33,9 @@ Click the *Definition* tab to continue.
|
||||
Use the fields in the *Definition* tab to define the check constraint:
|
||||
|
||||
* Provide the expression that a row must satisfy in the *Check* field.
|
||||
* Move the *No Inherit?* switch to the *Yes* position to specify this constraint
|
||||
is automatically inherited by a table's children. The default is *No*.
|
||||
* Move the *No Inherit?* switch to the *Yes* position to specify that this
|
||||
constraint is not automatically inherited by a table's children. The default
|
||||
is *No*, meaning that the constraint will be inherited by any children.
|
||||
* Move the *Don't validate?* switch to the *No* position to skip validation of
|
||||
existing data; the constraint may not hold for all rows in the table. The
|
||||
default is *Yes*.
|
||||
|
||||
@@ -39,9 +39,69 @@ are disabled if inapplicable.)
|
||||
a text value.
|
||||
* Use the drop-down listbox next to *Collation* to apply a collation setting to
|
||||
the column.
|
||||
|
||||
Click the *Constraints* tab to continue.
|
||||
|
||||
.. image:: images/column_constraints.png
|
||||
:alt: Column dialog constraints tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Constraints* tab to specify constraints for the column.
|
||||
(Fields are disabled if inapplicable.)
|
||||
|
||||
* Use the *Default Value* field to specify a default data value.
|
||||
* Move the *Not Null* switch to the *Yes* position to specify the column may not
|
||||
contain null values. The default is *No*.
|
||||
* Use the *Type* field to specify the column type (NONE/IDENTITY/GENERATED).
|
||||
The default is *NONE*.
|
||||
|
||||
Click the *IDENTITY* type to create Identity column.
|
||||
|
||||
.. image:: images/column_constraint_identity.png
|
||||
:alt: Column dialog constraints tab
|
||||
:align: center
|
||||
|
||||
Use the following fields to create *IDENTITY* column. Identity columns are
|
||||
applicable for PG/EPAS version 10 and above.
|
||||
|
||||
* Use the *Identity* field to specify ALWAYS or BY DEFAULT. This clause is
|
||||
used to determine how the sequence value is given precedence over a
|
||||
user-specified value in an INSERT statement.
|
||||
* Use the *Increment* field to specify which value is added to the current
|
||||
sequence value to create a new value.
|
||||
* Provide a value in the *Start* field to specify the beginning value of the
|
||||
sequence. The default starting value is MINVALUE for ascending sequences and
|
||||
MAXVALUE for descending ones.
|
||||
* Provide a value in the *Minimum* field to specify the minimum value a sequence
|
||||
can generate. If this clause is not supplied or NO MINVALUE is specified,
|
||||
then defaults will be used. The defaults are 1 and -263-1 for ascending and
|
||||
descending sequences, respectively.
|
||||
* Provide a value in the *Maximum* field to specify the maximum value for the
|
||||
sequence. If this clause is not supplied or NO MAXVALUE is specified, then
|
||||
default values will be used. The defaults are 263-1 and -1 for ascending and
|
||||
descending sequences, respectively.
|
||||
* Provide a value in the *Cache* field to specify how many sequence numbers are
|
||||
to be preallocated and stored in memory for faster access. The minimum value
|
||||
is 1 (only one value can be generated at a time, i.e., no cache), and this is
|
||||
also the default.
|
||||
* Move the *Cycled* switch to the *Yes* position to allow the sequence to wrap
|
||||
around when the MAXVALUE or the MINVALUE has been reached by an ascending or
|
||||
descending sequence respectively. If the limit is reached, the next number
|
||||
generated will be the MINVALUE or MAXVALUE, respectively. The default is *No*.
|
||||
|
||||
Click the *GENERATED* type to create Generated column.
|
||||
|
||||
.. image:: images/column_constraint_generated.png
|
||||
:alt: Column dialog constraints tab
|
||||
:align: center
|
||||
|
||||
Use the following fields to create *GENERATED* column. Generated columns are
|
||||
applicable for PG/EPAS version 12 and above.
|
||||
|
||||
* Use the *Expression* field to specify the generation expression. It can
|
||||
refer to other columns in the table, but not other generated columns.
|
||||
Any functions and operators used must be immutable. References to other
|
||||
tables are not allowed.
|
||||
|
||||
Click the *Variables* tab to continue.
|
||||
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
.. _compound_trigger_dialog:
|
||||
|
||||
********************************
|
||||
`Compound Trigger Dialog`:index:
|
||||
********************************
|
||||
|
||||
Use the *Compound Trigger* dialog to create a compound trigger or modify an
|
||||
existing compound trigger. *Compound Trigger* is supported only for EPAS server
|
||||
12 and above. A compound trigger executes a specified code when certain events
|
||||
occur.
|
||||
|
||||
The *Compound Trigger* dialog organizes the development of a compound trigger
|
||||
through the following dialog tabs: *General*, *Events*, and *Code*. The *SQL*
|
||||
tab displays the SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/compound_trigger_general.png
|
||||
:alt: Compound Trigger dialog general tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *General* tab to identify the compound trigger:
|
||||
|
||||
* Use the *Name* field to add a descriptive name for the compound trigger. This
|
||||
must be distinct from the name of any other compound trigger for the same table.
|
||||
The name will be displayed in the *pgAdmin* tree control.
|
||||
* Store notes about the compound trigger in the *Comment* field.
|
||||
|
||||
Click the *Events* tab to continue.
|
||||
|
||||
.. image:: images/compound_trigger_events.png
|
||||
:alt: Compound Trigger dialog events tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Events* tab to specify how and when the compound trigger fires:
|
||||
|
||||
* Select the type of event(s) that will invoke the compound trigger; to select
|
||||
an event type, move the switch next to the event to the *YES* position.
|
||||
The supported event types are *INSERT*, *UPDATE*, *DELETE* and *TRUNCATE*.
|
||||
Views cannot have TRUNCATE triggers.
|
||||
* Use the *When* field to provide a boolean condition that will invoke the
|
||||
compound trigger.
|
||||
* If defining a column-specific compound trigger, use the *Columns* field to
|
||||
specify the columns or columns that are the target of the compound trigger.
|
||||
|
||||
Click the *Code* tab to continue.
|
||||
|
||||
.. image:: images/compound_trigger_code.png
|
||||
:alt: Compound Trigger dialog code tab
|
||||
:align: center
|
||||
|
||||
Use the *Code* field to specify the code for the five timing events
|
||||
*BEFORE STATEMENT*, *AFTER STATEMENT*, *BEFORE EACH ROW*, *AFTER EACH ROW*,
|
||||
*INSTEAD OF EACH ROW* that will be invoked when the compound trigger fires.
|
||||
Basic template is provided with place holders.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Compound Trigger* dialog generate a SQL command (see an example
|
||||
below). Use the *SQL* tab for review; revisit or switch tabs to make any changes
|
||||
to the SQL command.
|
||||
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Compound Trigger* dialog:
|
||||
|
||||
.. image:: images/compound_trigger_sql.png
|
||||
:alt: Compound Trigger dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example demonstrates creating a compound trigger named *test_ct*.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Cancel* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -107,26 +107,26 @@ pygments_style = 'sphinx'
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
html_theme = 'classic'
|
||||
html_theme = 'pgadmin4'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
html_theme_options = {
|
||||
'collapsiblesidebar': True,
|
||||
'relbarbgcolor': '#326690',
|
||||
'sidebarbgcolor': '#E2E2E2',
|
||||
'sidebarbtncolor': '#326690',
|
||||
'sidebartextcolor': '#222222',
|
||||
'sidebarlinkcolor': '#326690',
|
||||
'footerbgcolor': '#222222',
|
||||
'codebgcolor': '#d6effc',
|
||||
'textcolor': '#222222',
|
||||
'headbgcolor': '#E2E2E2',
|
||||
'headtextcolor': '#326690',
|
||||
'bodyfont': '"Helvetica Neue", Helvetica, Arial, sans-serif',
|
||||
'headfont': '"Helvetica Neue", Helvetica, Arial, sans-serif'
|
||||
}
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
html_theme_path = ['./theme'] # make sphinx search for themes in current dir
|
||||
|
||||
# html_theme_options = {
|
||||
# 'collapsiblesidebar': True,
|
||||
# 'relbarbgcolor': '#326690',
|
||||
# 'sidebarbgcolor': '#E2E2E2',
|
||||
# 'sidebarbtncolor': '#326690',
|
||||
# 'sidebartextcolor': '#222222',
|
||||
# 'sidebarlinkcolor': '#326690',
|
||||
# 'footerbgcolor': '#222222',
|
||||
# 'codebgcolor': '#d6effc',
|
||||
# 'textcolor': '#222222',
|
||||
# 'headbgcolor': '#E2E2E2',
|
||||
# 'headtextcolor': '#326690',
|
||||
# 'bodyfont': '"Helvetica Neue", Helvetica, Arial, sans-serif',
|
||||
# 'headfont': '"Helvetica Neue", Helvetica, Arial, sans-serif'
|
||||
# }
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
# html_theme_path = []
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
.. _config_py:
|
||||
|
||||
***************************
|
||||
`The config.py File`:index:
|
||||
***************************
|
||||
|
||||
There are multiple configuration files that are read at startup by pgAdmin. These
|
||||
are as follows:
|
||||
|
||||
* ``config.py``: This is the main configuration file, and should not be modified.
|
||||
It can be used as a reference for configuration settings, that may be overridden
|
||||
in one of the following files.
|
||||
|
||||
* ``config_distro.py``: This file is read after ``config.py`` and is intended for
|
||||
packagers to change any settings that are required for their pgAdmin distribution.
|
||||
This may typically include certain paths and file locations. This file is optional,
|
||||
and may be created by packagers in the same directory as ``config.py`` if
|
||||
needed.
|
||||
|
||||
* ``config_local.py``: This file is read after ``config_distro.py`` and is intended
|
||||
for end users to change any default or packaging specific settings that they may
|
||||
wish to adjust to meet local preferences or standards.This file is optional,
|
||||
and may be created by users in the same directory as ``config.py`` if
|
||||
needed.
|
||||
|
||||
.. note:: If the SERVER_MODE setting is changed in ``config_distro.py`` or ``config_local.py``,
|
||||
you will most likely need to re-set the LOG_FILE, SQLITE_PATH, SESSION_DB_PATH
|
||||
and STORAGE_DIR values as well as they will have been set based on the default
|
||||
configuration or overridden by the runtime.
|
||||
|
||||
The default ``config.py`` file is shown below for reference:
|
||||
|
||||
.. literalinclude:: ../../web/config.py
|
||||
:language: python
|
||||
@@ -24,6 +24,13 @@ dialog, right-click on the *Servers* node of the tree control, and select
|
||||
|
||||
server_dialog
|
||||
|
||||
A master password is required to secure and later unlock saved server passwords.
|
||||
It is set by the user and can be disabled using config.
|
||||
|
||||
.. toctree::
|
||||
|
||||
master_password
|
||||
|
||||
After defining a server connection, right-click on the server name, and select
|
||||
*Connect to server* to authenticate with the server, and start using pgAdmin to
|
||||
manage objects that reside on the server.
|
||||
|
||||
@@ -22,6 +22,7 @@ server:
|
||||
* PostgreSQL 9.6: */usr/local/pgsql-9.6*
|
||||
* PostgreSQL 10: */usr/local/pgsql-10*
|
||||
* PostgreSQL 11: */usr/local/pgsql-11*
|
||||
* PostgreSQL 12: */usr/local/pgsql-12*
|
||||
|
||||
The most recent version of the utilities is used by default; this may be
|
||||
changed in the :ref:`preferences`.
|
||||
@@ -31,19 +32,19 @@ Environment Variables
|
||||
|
||||
The container will accept the following variables at startup:
|
||||
|
||||
*PGADMIN_DEFAULT_EMAIL*
|
||||
**PGADMIN_DEFAULT_EMAIL**
|
||||
|
||||
This is the email address used when setting up the initial administrator account
|
||||
to login to pgAdmin. This variable is required and must be set at launch time.
|
||||
|
||||
*PGADMIN_DEFAULT_PASSWORD*
|
||||
**PGADMIN_DEFAULT_PASSWORD**
|
||||
|
||||
This is the password used when setting up the initial administrator account to
|
||||
login to pgAdmin. This variable is required and must be set at launch time.
|
||||
|
||||
*PGADMIN_ENABLE_TLS*
|
||||
**PGADMIN_ENABLE_TLS**
|
||||
|
||||
Default: <null>
|
||||
*Default: <null>*
|
||||
|
||||
If left un-set, the container will listen on port 80 for connections in plain
|
||||
text. If set to any value, the container will listen on port 443 for TLS
|
||||
@@ -53,29 +54,51 @@ When TLS is enabled, a certificate and key must be provided. Typically these
|
||||
should be stored on the host file system and mounted from the container. The
|
||||
expected paths are /certs/server.crt and /certs/server.key
|
||||
|
||||
*PGADMIN_LISTEN_ADDRESS*
|
||||
**PGADMIN_LISTEN_ADDRESS**
|
||||
|
||||
Default: [::]
|
||||
*Default: [::]*
|
||||
|
||||
Specify the local address that the servers listens on. The default should work
|
||||
for most users - in IPv4-only environments, this may need to be set to
|
||||
127.0.0.1.
|
||||
|
||||
*PGADMIN_LISTEN_PORT*
|
||||
**PGADMIN_LISTEN_PORT**
|
||||
|
||||
Default: 80 or 443 (if TLS is enabled)
|
||||
*Default: 80 or 443 (if TLS is enabled)*
|
||||
|
||||
Allows the port that the server listens on to be set to a specific value rather
|
||||
than using the default.
|
||||
|
||||
*GUNICORN_THREADS*
|
||||
**PGADMIN_SERVER_JSON_FILE**
|
||||
|
||||
Default: 25
|
||||
*Default: /pgadmin4/servers.json*
|
||||
|
||||
Override the default file path for the server definition list. See the
|
||||
/pgadmin4/servers.json mapped file below for more information.
|
||||
|
||||
**GUNICORN_THREADS**
|
||||
|
||||
*Default: 25*
|
||||
|
||||
Adjust the number of threads the Gunicorn server uses to handle incoming
|
||||
requests. This should typically be left as-is, except in highly loaded systems
|
||||
where it may be increased.
|
||||
|
||||
**PGADMIN_CONFIG_**
|
||||
|
||||
This is a variable prefix that can be used to override any of the configuration
|
||||
options in pgAdmin's *config.py* file. Add the *PGADMIN_CONFIG_* prefix to any
|
||||
variable name from *config.py* and give the value in the format 'string value'
|
||||
for strings, True/False for booleans or 123 for numbers. See below for an
|
||||
example.
|
||||
|
||||
Settings are written to */pgadmin4/config_distro.py* within the container, which
|
||||
is read after */pgadmin4/config.py* and before */pgadmin4/config_local.py*.
|
||||
Any settings given will therefore override anything in config.py, but can be
|
||||
overridden by settings in config_local.py.
|
||||
|
||||
See :ref:`config_py` for more information on the available configuration settings.
|
||||
|
||||
Mapped Files and Directories
|
||||
****************************
|
||||
|
||||
@@ -83,31 +106,33 @@ The following files or directories can be mapped from the container onto the
|
||||
host machine to allow configuration to be customised and shared between
|
||||
instances:
|
||||
|
||||
*/var/lib/pgadmin*
|
||||
**/var/lib/pgadmin**
|
||||
|
||||
This is the working directory in which pgAdmin stores session data, user files,
|
||||
configuration files, and it's configuration database. Mapping this directory
|
||||
onto the host machine gives you an easy way to maintain configuration between
|
||||
|
||||
invocations of the container.
|
||||
|
||||
*/pgadmin4/config_local.py*
|
||||
**/pgadmin4/config_local.py**
|
||||
|
||||
This file can be used to override configuration settings in pgAdmin. Settings
|
||||
found in config.py can be overridden with deployment specific values if
|
||||
required.
|
||||
required. Settings in config_local.py will also override anything specified in
|
||||
the container environment through *PGADMIN_CONFIG_* prefixed variables.
|
||||
|
||||
*/pgadmin4/servers.json*
|
||||
**/pgadmin4/servers.json**
|
||||
|
||||
If this file is mapped, server definitions found in it will be loaded at launch
|
||||
time. This allows connection information to be pre-loaded into the instance of
|
||||
pgAdmin in the container.
|
||||
pgAdmin in the container. Note that server definitions are only loaded on first
|
||||
launch, i.e. when the configuration database is created, and not on subsequent
|
||||
launches using the same configuration database.
|
||||
|
||||
*/certs/server.cert*
|
||||
**/certs/server.cert**
|
||||
|
||||
If TLS is enabled, this file will be used as the servers TLS certificate.
|
||||
|
||||
*/certs/server.key*
|
||||
**/certs/server.key**
|
||||
|
||||
If TLS is enabled, this file will be used as the key file for the servers TLS
|
||||
certificate.
|
||||
@@ -121,8 +146,21 @@ Run a simple container over port 80:
|
||||
|
||||
docker pull dpage/pgadmin4
|
||||
docker run -p 80:80 \
|
||||
-e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
|
||||
-e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
|
||||
-e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' \
|
||||
-e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' \
|
||||
-d dpage/pgadmin4
|
||||
|
||||
Run a simple container over port 80, setting some configuration options:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
docker pull dpage/pgadmin4
|
||||
docker run -p 80:80 \
|
||||
-e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' \
|
||||
-e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' \
|
||||
-e 'PGADMIN_CONFIG_ENHANCED_COOKIE_PROTECTION=True' \
|
||||
-e 'PGADMIN_CONFIG_LOGIN_BANNER="Authorised users only!"' \
|
||||
-e 'PGADMIN_CONFIG_CONSOLE_LOG_LEVEL=10' \
|
||||
-d dpage/pgadmin4
|
||||
|
||||
Run a TLS secured container using a shared config/storage directory in
|
||||
@@ -133,11 +171,205 @@ Run a TLS secured container using a shared config/storage directory in
|
||||
|
||||
docker pull dpage/pgadmin4
|
||||
docker run -p 443:443 \
|
||||
-v "/private/var/lib/pgadmin:/var/lib/pgadmin" \
|
||||
-v "/path/to/certificate.cert:/certs/server.cert" \
|
||||
-v "/path/to/certificate.key:/certs/server.key" \
|
||||
-v "/tmp/servers.json:/servers.json" \
|
||||
-v /private/var/lib/pgadmin:/var/lib/pgadmin \
|
||||
-v /path/to/certificate.cert:/certs/server.cert \
|
||||
-v /path/to/certificate.key:/certs/server.key \
|
||||
-v /tmp/servers.json:/servers.json \
|
||||
-e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' \
|
||||
-e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' \
|
||||
-e 'PGADMIN_ENABLE_TLS=True' \
|
||||
-d dpage/pgadmin4
|
||||
|
||||
Reverse Proxying
|
||||
****************
|
||||
|
||||
Sometimes it's desirable to have users connect to pgAdmin through a reverse
|
||||
proxy rather than directly to the container it's running in. The following
|
||||
examples show how this can be achieved. With traditional reverse proxy servers
|
||||
such as `Nginx <https://www.nginx.com/>`_, pgAdmin is running in a container on
|
||||
the same host, with port 5050 on the host mapped to port 80 on the container,
|
||||
for example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
docker pull dpage/pgadmin4
|
||||
docker run -p 5050:80 \
|
||||
-e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
|
||||
-e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
|
||||
-e "PGADMIN_ENABLE_TLS=True" \
|
||||
-d dpage/pgadmin4
|
||||
-d dpage/pgadmin4
|
||||
|
||||
pgAdmin X-Forwarded-* Configuration
|
||||
-----------------------------------
|
||||
|
||||
pgAdmin needs to understand how many proxies set each header so it knows what
|
||||
values to trust. The configuration parameters for the X-Forwarded-* options
|
||||
which are used for this purpose are shown below, along with their default
|
||||
values.
|
||||
|
||||
pgAdmin is configured by default to be able to run behind a reverse proxy even
|
||||
on a non-standard port and these config options don't normally need to be
|
||||
changed. If you're running an unusual configuration (such as multiple reverse
|
||||
proxies) you can adjust the configuration to suit.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# Number of values to trust for X-Forwarded-For
|
||||
PROXY_X_FOR_COUNT = 1
|
||||
|
||||
# Number of values to trust for X-Forwarded-Proto.
|
||||
PROXY_X_PROTO_COUNT = 0
|
||||
|
||||
# Number of values to trust for X-Forwarded-Host.
|
||||
PROXY_X_HOST_COUNT = 0
|
||||
|
||||
# Number of values to trust for X-Forwarded-Port.
|
||||
PROXY_X_PORT_COUNT = 1
|
||||
|
||||
# Number of values to trust for X-Forwarded-Prefix.
|
||||
PROXY_X_PREFIX_COUNT = 0
|
||||
|
||||
HTTP via Nginx
|
||||
--------------
|
||||
|
||||
A configuration similar to the following can be used to create a simple HTTP
|
||||
reverse proxy listening for all hostnames with `Nginx
|
||||
<https://www.nginx.com/>`_:
|
||||
|
||||
.. code-block:: nginx
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
location / {
|
||||
proxy_set_header Host $host;
|
||||
proxy_pass http://localhost:5050/;
|
||||
proxy_redirect off;
|
||||
}
|
||||
}
|
||||
|
||||
If you wish to host pgAdmin under a subdirectory rather than on the root of the
|
||||
server, you must specify the location and set the *X-Script-Name* header which
|
||||
tells the pgAdmin container how to rewrite paths:
|
||||
|
||||
.. code-block:: nginx
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
location /pgadmin4/ {
|
||||
proxy_set_header X-Script-Name /pgadmin4;
|
||||
proxy_set_header Host $host;
|
||||
proxy_pass http://localhost:5050/;
|
||||
proxy_redirect off;
|
||||
}
|
||||
}
|
||||
|
||||
If Nginx is also running in a container, there is no need to map the pgAdmin
|
||||
port to the host, provided the two containers are running in the same Docker
|
||||
network. In such a configuration, the *proxy_pass* option would be changed to
|
||||
point to the pgAdmin container within the Docker network.
|
||||
|
||||
HTTPS via Nginx
|
||||
---------------
|
||||
|
||||
The following configuration can be used to serve pgAdmin over HTTPS to the user
|
||||
whilst the backend container is serving plain HTTP to the proxy server. In this
|
||||
configuration we not only set *X-Script-Name*, but also *X-Scheme* to tell the
|
||||
pgAdmin server to generate any URLs using the correct scheme. A redirect from
|
||||
HTTP to HTTPS is also included. The certificate and key paths may need to be
|
||||
adjusted as appropriate to the specific deployment:
|
||||
|
||||
.. code-block:: nginx
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443;
|
||||
server_name _;
|
||||
|
||||
ssl_certificate /etc/nginx/server.crt;
|
||||
ssl_certificate_key /etc/nginx/server.key;
|
||||
|
||||
ssl on;
|
||||
ssl_session_cache builtin:1000 shared:SSL:10m;
|
||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
|
||||
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
|
||||
ssl_prefer_server_ciphers on;
|
||||
|
||||
location /pgadmin4/ {
|
||||
proxy_set_header X-Script-Name /pgadmin4;
|
||||
proxy_set_header X-Scheme $scheme;
|
||||
proxy_set_header Host $host;
|
||||
proxy_pass http://localhost:5050/;
|
||||
proxy_redirect off;
|
||||
}
|
||||
}
|
||||
|
||||
Traefik
|
||||
-------
|
||||
|
||||
Configuring `Traefik <https://traefik.io/>`_ is straightforward for either HTTP
|
||||
or HTTPS when running pgAdmin in a container as it will automatically configure
|
||||
itself to serve content from containers that are running on the local machine,
|
||||
virtual hosting them at *<container_name>.<domain_name>*, where the domain
|
||||
name is that specified in the Traefik configuration. The container is typically
|
||||
launched per the example below:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
docker pull dpage/pgadmin4
|
||||
docker run --name "pgadmin4" \
|
||||
-e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
|
||||
-e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
|
||||
-d dpage/pgadmin4
|
||||
|
||||
Note that the TCP/IP port has not been mapped to the host as it was in the
|
||||
Nginx example, and the container name has been set to a known value as it will
|
||||
be used as the hostname and may need to be added to the DNS zone file.
|
||||
|
||||
The following configuration will listen on ports 80 and 443, redirecting 80 to
|
||||
443, using the default certificate shipped with Traefik. See the Traefik
|
||||
documentation for options to use certificates from LetsEncrypt or other issuers.
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
defaultEntryPoints = ["http", "https"]
|
||||
|
||||
[entryPoints]
|
||||
[entryPoints.http]
|
||||
address = ":80"
|
||||
[entryPoints.http.redirect]
|
||||
entryPoint = "https"
|
||||
[entryPoints.https]
|
||||
address = ":443"
|
||||
[entryPoints.https.tls]
|
||||
|
||||
[docker]
|
||||
domain = "domain_name"
|
||||
watch = true
|
||||
|
||||
If you wish to host pgAdmin under a subdirectory using Traefik, the
|
||||
configuration changes are typically made to the way the container is launched
|
||||
and not to Traefik itself. For example, to host pgAdmin under */pgadmin4/*
|
||||
instead of at the root directory, the Traefik configuration above may be used if
|
||||
the container is launched like this:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
docker pull dpage/pgadmin4
|
||||
docker run --name "pgadmin4" \
|
||||
-e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
|
||||
-e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
|
||||
-e "SCRIPT_NAME=/pgadmin4" \
|
||||
-l "traefik.frontend.rule=PathPrefix:/pgadmin4" \
|
||||
-d dpage/pgadmin4
|
||||
|
||||
The *SCRIPT_NAME* environment variable has been set to tell the container it is
|
||||
being hosted under a subdirectory (in the same way as the *X-Script-Name* header
|
||||
is used with Nginx), and a label has been added to tell Traefik to route
|
||||
requests under the subdirectory to this container.
|
||||
@@ -12,7 +12,8 @@ will provide detailed information about creating a custom deployment.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
|
||||
config_py
|
||||
desktop_deployment
|
||||
server_deployment
|
||||
container_deployment
|
||||
container_deployment
|
||||
@@ -36,28 +36,10 @@ this is overridden by the desktop runtime at startup. In most environments, no
|
||||
Python configuration is required unless you wish to override other default
|
||||
settings.
|
||||
|
||||
There are multiple configuration files that are read at startup by pgAdmin. These
|
||||
are as follows:
|
||||
|
||||
* ``config.py``: This is the main configuration file, and should not be modified.
|
||||
It can be used as a reference for configuration settings, that may be overridden
|
||||
in one of the following files.
|
||||
|
||||
* ``config_distro.py``: This file is read after ``config.py`` and is intended for
|
||||
packagers to change any settings that are required for their pgAdmin distribution.
|
||||
This may typically include certain paths and file locations.
|
||||
|
||||
* ``config_local.py``: This file is read after ``config_distro.py`` and is intended
|
||||
for end users to change any default or packaging specific settings that they may
|
||||
wish to adjust to meet local preferences or standards.
|
||||
|
||||
.. note:: If the SERVER_MODE setting is changed in ``config_distro.py`` or ``config_local.py``,
|
||||
you will most likely need to re-set the LOG_FILE, SQLITE_PATH, SESSION_DB_PATH
|
||||
and STORAGE_DIR values as well as they will have been set based on the default
|
||||
configuration or overridden by the runtime.
|
||||
See :ref:`config_py` for more information on configuration settings.
|
||||
|
||||
Runtime
|
||||
-------
|
||||
*******
|
||||
|
||||
When executed, the runtime will automatically try to execute the pgAdmin Python
|
||||
application. If execution fails, it will prompt you to adjust the Python Path
|
||||
|
||||
@@ -35,6 +35,8 @@ disabled in either mode. Please see
|
||||
:ref:`The Query Tool Toolbar <query_tool_toolbar>` for a description of the
|
||||
available controls.
|
||||
|
||||
.. _data-grid:
|
||||
|
||||
The Data Grid
|
||||
*************
|
||||
|
||||
@@ -48,7 +50,7 @@ To modify the displayed data:
|
||||
the field. Modify the content in the square in which it is displayed.
|
||||
* To change a non-numeric value within the grid, double-click the content to
|
||||
access the edit bubble. After modifying the contentof the edit bubble, click
|
||||
the *Save* button to display your changes in the data grid, or *Cancel* to
|
||||
the *Ok* button to display your changes in the data grid, or *Cancel* to
|
||||
exit the edit bubble without saving.
|
||||
|
||||
To enter a newline character, click Ctrl-Enter or Shift-Enter. Newline
|
||||
@@ -70,9 +72,7 @@ quotes to the table, you need to escape these quotes, by typing \'\'
|
||||
To delete a row, press the *Delete* toolbar button. A popup will open, asking
|
||||
you to confirm the deletion.
|
||||
|
||||
To commit the changes to the server, select the *Save* toolbar button.
|
||||
Modifications to a row are written to the server automatically when you select
|
||||
a different row.
|
||||
To commit the changes to the server, select the *Save Data* toolbar button.
|
||||
|
||||
**Geometry Data Viewer**
|
||||
|
||||
@@ -138,3 +138,8 @@ To delete a row from the grid, click the trash icon.
|
||||
* Click the *Help* button (?) to access online help.
|
||||
* Click the *Ok* button to save work.
|
||||
* Click the *Close* button to discard current changes and close the dialog.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
viewdata_filter
|
||||
@@ -9,7 +9,7 @@ a function, the new function is not the same entity as the old; you must drop
|
||||
existing rules, views, triggers, etc. that refer to the old function.
|
||||
|
||||
The *Function* dialog organizes the development of a function through the
|
||||
following dialog tabs: *General*, *Definition*, *Options*, *Arguments*,
|
||||
following dialog tabs: *General*, *Definition*, *Code*, *Options*,
|
||||
*Parameters*, and *Security*. The *SQL* tab displays the SQL code generated by
|
||||
dialog selections.
|
||||
|
||||
@@ -39,6 +39,27 @@ Use the fields in the *Definition* tab to define the function:
|
||||
returned by the function, if any.
|
||||
* Use the drop-down listbox next to *Language* to select the implementation
|
||||
language. The default is *sql*.
|
||||
* Use the fields in the *Arguments* to define an argument. Click the *Add*
|
||||
icon (+) to set parameters and values for the argument:
|
||||
|
||||
* Use the drop-down listbox in the *Data type* field to select a data type.
|
||||
* Use the drop-down listbox in the *Mode* field to select a mode. Select *IN*
|
||||
for an input parameter; select *OUT* for an output parameter; select *INOUT*
|
||||
for both an input and an output parameter; or, select *VARIADIC* to specify a
|
||||
VARIADIC parameter.
|
||||
* Provide a name for the argument in the *Argument Name* field.
|
||||
* Specify a default value for the argument in the *Default Value* field.
|
||||
|
||||
Click the *Add* icon (+) to define another argument; to discard an argument,
|
||||
click the trash icon to the left of the row and confirm deletion in the *Delete
|
||||
Row* popup.
|
||||
|
||||
Click the *Code* tab to continue.
|
||||
|
||||
.. image:: images/function_code.png
|
||||
:alt: Function dialog code tab
|
||||
:align: center
|
||||
|
||||
* Use the *Code* field to write the code that will execute when the function
|
||||
is called.
|
||||
|
||||
@@ -87,27 +108,8 @@ function:
|
||||
The default assumption is 1000 rows.
|
||||
* Move the *Leak proof?* switch to indicate whether the function has side
|
||||
effects. The default is *No*. This option can only be set by the superuser.
|
||||
|
||||
Click the *Arguments* tab to continue.
|
||||
|
||||
.. image:: images/function_arguments.png
|
||||
:alt: Function dialog arguments tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Arguments* tab to define an argument. Click the *Add*
|
||||
icon (+) to set parameters and values for the argument:
|
||||
|
||||
* Use the drop-down listbox in the *Data type* field to select a data type.
|
||||
* Use the drop-down listbox in the *Mode* field to select a mode. Select *IN*
|
||||
for an input parameter; select *OUT* for an output parameter; select *INOUT*
|
||||
for both an input and an output parameter; or, select *VARIADIC* to specify a
|
||||
VARIADIC parameter.
|
||||
* Provide a name for the argument in the *Argument Name* field.
|
||||
* Specify a default value for the argument in the *Default Value* field.
|
||||
|
||||
Click the *Add* icon (+) to define another argument; to discard an argument,
|
||||
click the trash icon to the left of the row and confirm deletion in the *Delete
|
||||
Row* popup.
|
||||
* Use the *Support function* field to specify a planner support function to
|
||||
use for the function.
|
||||
|
||||
Click the *Parameters* tab to continue.
|
||||
|
||||
@@ -175,9 +177,8 @@ the *Function* dialog:
|
||||
:alt: Function dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example demonstrates creating an *edbspl* function named *emp_comp*. The
|
||||
function adds two columns (p_sal and p_comm), and then uses the result to
|
||||
compute a yearly salary, returning a NUMERIC value.
|
||||
The example demonstrates creating an *plpgsql* function named *hire_salesmen*. The
|
||||
function have three columns (p_ename, p_sal and p_comm).
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
|
||||
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 141 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 141 KiB |
|
After Width: | Height: | Size: 184 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 143 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 250 KiB |
|
After Width: | Height: | Size: 220 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 166 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 261 KiB After Width: | Height: | Size: 247 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 125 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 111 KiB |
@@ -64,6 +64,29 @@ Use the shortcuts below to navigate the tabsets on dialogs:
|
||||
| Control+Shift+] | Dialog tab forward |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
|
||||
Property Grid Controls
|
||||
**********************
|
||||
|
||||
Use the shortcuts below when working with property grid controls:
|
||||
|
||||
.. table::
|
||||
:class: longtable
|
||||
:widths: 2 3
|
||||
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Shortcut for all platforms | Function |
|
||||
+============================+=======================================================+
|
||||
| Control+Shift+A | Add row in Grid |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Tab | Move focus to the next control |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Shift+Tab | Move focus to the previous control |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Return | Pick the selected an item in a combo box |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
| Control+Shift+A | Add row in Grid |
|
||||
+----------------------------+-------------------------------------------------------+
|
||||
|
||||
SQL Editors
|
||||
***********
|
||||
|
||||
@@ -73,49 +96,49 @@ When using the syntax-highlighting SQL editors, the following shortcuts are avai
|
||||
:class: longtable
|
||||
:widths: 2 2 3
|
||||
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Shortcut (Windows/Linux) | Shortcut (Mac) | Function |
|
||||
+==========================+==================+=====================================+
|
||||
| Alt+Left | Option+Left | Move to the beginning of the line |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Alt+Right | Option+Right | Move to the end of the line |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Ctrl+Alt+Left | Cmd+Option+Left | Move left one word |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Ctrl+Alt+Right | Cmd+Option+Right | Move right one word |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Ctrl+/ | Cmd+/ | Comment selected code (Inline) |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Ctrl+. | Cmd+. | Uncomment selected code (Inline) |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Ctrl+Shift+/ | Cmd+Shift+/ | Comment/Uncomment code (Block) |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Ctrl+A | Cmd+A | Select all |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Ctrl+C | Cmd+C | Copy selected text to the clipboard |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Ctrl+R | Cmd+R | Redo last edit un-done |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Ctrl+V | Cmd+V | Paste text from the clipboard |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Ctrl+Z | Cmd+Z | Undo last edit |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Tab | Tab | Indent selected text |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Shift+Tab | Shift+Tab | Un-indent selected text |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Alt+G | Alt+G | Jump (to line:column) |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Ctrl+Space | Ctrl+Space | Auto-complete |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Ctrl+F | Cmd+F | Find |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Ctrl+G | Cmd+G | Find next |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Ctrl+Shift+G | Cmd+Shift+G | Find previous |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
| Ctrl+Shift+F | Cmd+Shift+F | Replace |
|
||||
+--------------------------+------------------+-------------------------------------+
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Shortcut (Windows/Linux) | Shortcut (Mac) | Function |
|
||||
+==========================+======================+=====================================+
|
||||
| Alt + Left | Option + Left | Move to the beginning of the line |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Alt + Right | Option + Right | Move to the end of the line |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Ctrl + Alt + Left | Cmd + Option + Left | Move left one word |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Ctrl + Alt + Right | Cmd + Option + Right | Move right one word |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Ctrl + / | Cmd + / | Comment selected code (Inline) |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Ctrl + . | Cmd + . | Uncomment selected code (Inline) |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Ctrl + Shift + / | Cmd + Shift + / | Comment/Uncomment code (Block) |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Ctrl + a | Cmd + a | Select all |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Ctrl + c | Cmd + c | Copy selected text to the clipboard |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Ctrl + r | Cmd + r | Redo last edit un-done |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Ctrl + v | Cmd + v | Paste text from the clipboard |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Ctrl + z | Cmd + z | Undo last edit |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Tab | Tab | Indent selected text |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Shift + Tab | Shift + Tab | Un-indent selected text |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Alt + g | Option + g | Jump (to line:column) |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Ctrl + Space | Ctrl + Space | Auto-complete |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Ctrl + f | Cmd + f | Find |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Ctrl + g | Cmd + g | Find next |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Ctrl + Shift + g | Cmd + Shift + g | Find previous |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
| Ctrl + Shift + f | Cmd + Shift + f | Replace |
|
||||
+--------------------------+----------------------+-------------------------------------+
|
||||
|
||||
Query Tool
|
||||
**********
|
||||
@@ -131,9 +154,11 @@ When using the Query Tool, the following shortcuts are available:
|
||||
+==========================+====================+===================================+
|
||||
| F5 | F5 | Execute query |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| F6 | F6 | Save data changes |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| F7 | F7 | EXPLAIN query |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Shift+F7 | Shift+F7 | EXPLAIN ANALYZE query |
|
||||
| Shift + F7 | Shift + F7 | EXPLAIN ANALYZE query |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| F8 | F8 | Execute query to CSV file |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
@@ -190,11 +215,11 @@ When using the Debugger, the following shortcuts are available:
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| <accesskey> + s | <accesskey> + s | Stop |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
| Alt + Shift + q | Alt + Shift + q | Enter or Edit values in Grid |
|
||||
| Alt + Shift + q | Option + Shift + q | Enter or Edit values in Grid |
|
||||
+--------------------------+--------------------+-----------------------------------+
|
||||
|
||||
Inner Panel Navigation
|
||||
**********************
|
||||
Inner Tab and Panel Navigation
|
||||
******************************
|
||||
|
||||
When using the Query Tool and Debugger, the following shortcuts are available
|
||||
for inner panel navigation:
|
||||
@@ -203,13 +228,15 @@ for inner panel navigation:
|
||||
:class: longtable
|
||||
:widths: 2 2 3
|
||||
|
||||
+--------------------------+---------------------------+------------------------------+
|
||||
| Shortcut (Windows/Linux) | Shortcut (Mac) | Function |
|
||||
+==========================+===========================+==============================+
|
||||
| Alt + Shift + Right Arrow| Alt + Shift + Right Arrow | Move to next inner panel |
|
||||
+--------------------------+---------------------------+------------------------------+
|
||||
| Alt + Shift + Left Arrow | Alt + Shift + Left Arrow | Move to previous inner panel |
|
||||
+--------------------------+---------------------------+------------------------------+
|
||||
+--------------------------+---------------------------+------------------------------------+
|
||||
| Shortcut (Windows/Linux) | Shortcut (Mac) | Function |
|
||||
+==========================+===========================+====================================+
|
||||
| Alt + Shift + ] | Alt + Shift + ] | Move to next tab within a panel |
|
||||
+--------------------------+---------------------------+------------------------------------+
|
||||
| Alt + Shift + [ | Alt + Shift + [ | Move to previous tab within a panel|
|
||||
+--------------------------+---------------------------+------------------------------------+
|
||||
| Alt + Shift + Tab | Alt + Shift + Tab | Move between inner panels |
|
||||
+--------------------------+---------------------------+------------------------------------+
|
||||
|
||||
Access Key
|
||||
**********
|
||||
@@ -221,14 +248,14 @@ default access keys for supported browsers.
|
||||
:class: longtable
|
||||
:widths: 2 1 1 1
|
||||
|
||||
+-------------------+------------+------------+------------+
|
||||
| | Windows | Linux | Mac |
|
||||
+===================+============+============+============+
|
||||
| Internet Explorer | Alt | Alt | |
|
||||
+-------------------+------------+------------+------------+
|
||||
| Chrome | Alt | Alt | Ctrl+Alt |
|
||||
+-------------------+------------+------------+------------+
|
||||
| Firefox | Alt+Shift | Alt+Shift | Ctrl+Alt |
|
||||
+-------------------+------------+------------+------------+
|
||||
| Safari | Alt | | Ctrl+Alt |
|
||||
+-------------------+------------+------------+------------+
|
||||
+-------------------+-------------+-------------+---------------+
|
||||
| | Windows | Linux | Mac |
|
||||
+===================+=============+=============+===============+
|
||||
| Internet Explorer | Alt | Alt | |
|
||||
+-------------------+-------------+-------------+---------------+
|
||||
| Chrome | Alt | Alt | Ctrl + Option |
|
||||
+-------------------+-------------+-------------+---------------+
|
||||
| Firefox | Alt + Shift | Alt + Shift | Ctrl + Option |
|
||||
+-------------------+-------------+-------------+---------------+
|
||||
| Safari | Alt | | Ctrl + Option |
|
||||
+-------------------+-------------+-------------+---------------+
|
||||
@@ -16,6 +16,7 @@ Use the fields in the *Login* dialog to authenticate your connection:
|
||||
field.
|
||||
* Provide your password in the *Password* field.
|
||||
* Click the *Login* button to securely log into pgAdmin.
|
||||
* Please note that, if the pgAdmin server is restarted then you will be logged out. You need to re-login to continue.
|
||||
|
||||
Recovering a Lost Password
|
||||
**************************
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
.. _master_password:
|
||||
|
||||
************************
|
||||
`Master Password`:index:
|
||||
************************
|
||||
|
||||
A master password is required to secure and later unlock the saved server
|
||||
passwords. This is applicable only for desktop mode users.
|
||||
|
||||
* You are prompted to enter the master password when you open the window for
|
||||
the first time after starting the application.
|
||||
* Once you set the master password, all the existing saved passwords will be
|
||||
re-encrypted using the master password.
|
||||
* The server passwords which are saved in the SQLite DB file are encrypted and
|
||||
decrypted using the master password.
|
||||
|
||||
.. image:: images/master_password_set.png
|
||||
:alt: Set master password
|
||||
:align: center
|
||||
|
||||
* You can disable the master password by setting the configuration parameter
|
||||
*MASTER_PASSWORD_REQUIRED=False*. See :ref:`Desktop Deployment <desktop_deployment>`
|
||||
for more information.
|
||||
|
||||
.. note:: If the master password is disabled, then all the saved passwords will
|
||||
be removed.
|
||||
|
||||
.. warning:: If the master password is disabled, then the saved passwords will
|
||||
be encrypted using a key which is derived from information within the
|
||||
configuration database. Use of a master password ensures that the encryption
|
||||
key does not need to be stored anywhere, and thus prevents possible access
|
||||
to server credentials if the configuration database becomes available to an
|
||||
attacker.
|
||||
|
||||
It is **strongly** recommended that you use the master password if you use
|
||||
the *Save Password* option.
|
||||
|
||||
* The master password is not stored anywhere on the physical storage. It is
|
||||
temporarily stored in the application memory and it does not get saved when
|
||||
the application is restarted.
|
||||
* You are prompted to enter the master password when pgAdmin server is
|
||||
restarted.
|
||||
|
||||
.. image:: images/master_password_enter.png
|
||||
:alt: Enter master password
|
||||
:align: center
|
||||
|
||||
|
||||
* If you forget the master password, you can use the *Reset Master Password*
|
||||
button to reset the password.
|
||||
|
||||
.. image:: images/master_password_reset.png
|
||||
:alt: Reset master password
|
||||
:align: center
|
||||
|
||||
.. warning:: Resetting the master password will also remove all saved passwords
|
||||
and close all existing established connections.
|
||||
@@ -25,6 +25,9 @@ Use the *File* menu to access the following options:
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *Reset Layout* | If you have modified the workspace, click to restore the default layout. |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
| *Lock Layout* | Click to open a submenu to select the level for locking the UI layout |
|
||||
| | This can also be changed from browser display :ref:`preferences <preferences>` |
|
||||
+-------------------------+---------------------------------------------------------------------------------------------------------+
|
||||
|
||||
The Object Menu
|
||||
***************
|
||||
|
||||