Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
No files matched your search
@@ -12,7 +12,7 @@
|
||||
# and clean up the web/ source code
|
||||
#########################################################################
|
||||
|
||||
FROM alpine:3.13 AS app-builder
|
||||
FROM alpine:3.14 AS app-builder
|
||||
|
||||
RUN apk add --no-cache \
|
||||
autoconf \
|
||||
@@ -60,7 +60,7 @@ RUN export CPPFLAGS="-DPNG_ARM_NEON_OPT=0" && \
|
||||
# Next, create the base environment for Python
|
||||
#########################################################################
|
||||
|
||||
FROM alpine:3.13 as env-builder
|
||||
FROM alpine:3.14 as env-builder
|
||||
|
||||
# Install dependencies
|
||||
COPY requirements.txt /
|
||||
@@ -113,8 +113,9 @@ 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.13 as tool-builder
|
||||
FROM alpine:3.14 as tool-builder
|
||||
|
||||
# Copy the PG binaries
|
||||
COPY --from=pg96-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-9.6/
|
||||
@@ -142,17 +143,25 @@ 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 alpine:3.13
|
||||
FROM alpine:3.14
|
||||
|
||||
# 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
|
||||
@@ -173,7 +182,6 @@ RUN apk add \
|
||||
python3 \
|
||||
py3-pip \
|
||||
postfix \
|
||||
postgresql-libs \
|
||||
krb5-libs \
|
||||
shadow \
|
||||
sudo \
|
||||
@@ -187,7 +195,7 @@ RUN apk add \
|
||||
chown pgadmin:pgadmin /var/lib/pgadmin && \
|
||||
touch /pgadmin4/config_distro.py && \
|
||||
chown pgadmin:pgadmin /pgadmin4/config_distro.py && \
|
||||
setcap CAP_NET_BIND_SERVICE=+eip /usr/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
|
||||
|
||||
@@ -272,11 +272,17 @@ REM Main build sequence Ends
|
||||
REM YARN END
|
||||
|
||||
REM WGET
|
||||
FOR /f "tokens=2 delims='" %%i IN ('yarn info nw ^| findstr "latest: "') DO SET "NW_VERSION=%%i"
|
||||
:GET_NW
|
||||
wget https://dl.nwjs.io/v%NW_VERSION%/nwjs-v%NW_VERSION%-win-x64.zip -O "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip"
|
||||
IF %ERRORLEVEL% NEQ 0 GOTO GET_NW
|
||||
REM Comment out the below for loop as the latest version (0.57.0) having
|
||||
REM some problem, so for the time being hardcoded the version to 0.55.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
|
||||
|
||||
REM tar -C "%TMPDIR%" -xvf "%TMPDIR%\nwjs-v%NW_VERSION%-win-x64.zip" || EXIT /B 1
|
||||
|
||||
SET "NW_VERSION=0.55.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
|
||||
|
||||
|
||||
@@ -35,27 +35,15 @@ paths it would expect to find in the standard package for your platform.
|
||||
|
||||
You can then execute the runtime by running something like:
|
||||
|
||||
node_modules/nw/nwjs/nw .
|
||||
```bash
|
||||
node_modules/nw/nwjs/nw .
|
||||
```
|
||||
|
||||
or on macOS:
|
||||
|
||||
node_modules/nw/nwjs/nwjs.app/Contents/MacOS/nwjs .
|
||||
|
||||
# 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.
|
||||
```bash
|
||||
node_modules/nw/nwjs/nwjs.app/Contents/MacOS/nwjs .
|
||||
```
|
||||
|
||||
# Configuring the Python Environment
|
||||
|
||||
@@ -65,40 +53,47 @@ 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
|
||||
1. Create a virtual environment in an appropriate directory. The last argument is
|
||||
the name of the environment; that can be changed as desired:
|
||||
|
||||
$ 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
|
||||
```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:
|
||||
|
||||
(pgadmin4) $ PATH=$PATH:/usr/local/pgsql/bin pip install -r $PGADMIN4_SRC/requirements.txt
|
||||
|
||||
```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:
|
||||
|
||||
(pgadmin4) $ pip install -r $PGADMIN4_SRC/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 *
|
||||
|
||||
@@ -131,6 +126,7 @@ simple - adapt as required for your distribution:
|
||||
'pgadmin4-server.db'
|
||||
)
|
||||
```
|
||||
|
||||
This configuration allows easy switching between server and desktop modes
|
||||
for testing.
|
||||
|
||||
@@ -138,12 +134,16 @@ simple - adapt as required for your distribution:
|
||||
mode, and non-interactive in desktop mode. You can run it either by
|
||||
running:
|
||||
|
||||
(pgadmin4) $ python $PGADMIN4_SRC/web/setup.py
|
||||
|
||||
```bash
|
||||
(venv) $ python3 $PGADMIN4_SRC/web/setup.py
|
||||
```
|
||||
|
||||
or by starting pgAdmin 4:
|
||||
|
||||
(pgadmin4) $ python $PGADMIN4_SRC/web/pgAdmin4.py
|
||||
|
||||
```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.
|
||||
@@ -155,10 +155,7 @@ 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
|
||||
# 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
|
||||
@@ -170,18 +167,22 @@ 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
|
||||
```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
|
||||
```
|
||||
C:\> cd $PGADMIN4_SRC\web
|
||||
C:\$PGADMIN4_SRC\web> yarn install
|
||||
C:\$PGADMIN4_SRC\web> yarn run bundle
|
||||
```
|
||||
|
||||
## Creating pgAdmin themes
|
||||
# Creating pgAdmin themes
|
||||
|
||||
To create a pgAdmin theme, you need to create a directory under
|
||||
*web/pgadmin/static/scss/resources*.
|
||||
@@ -202,12 +203,16 @@ hyphens (-) will be replaced with spaces and the result will be camel cased.
|
||||
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
|
||||
|
||||
```bash
|
||||
$ source venv/bin/activate
|
||||
(venv) $ pip install Sphinx
|
||||
```
|
||||
|
||||
The docs can then be built using the Makefile in *$PGADMIN4_SRC*, e.g.
|
||||
|
||||
(pgadmin4) $ make docs
|
||||
```bash
|
||||
(venv) $ make docs
|
||||
```
|
||||
|
||||
The output can be found in *$PGADMIN4_SRC/docs/en_US/_build/html/index.html*
|
||||
|
||||
@@ -218,22 +223,45 @@ the setup and configuration above has been completed.
|
||||
|
||||
To build a source tarball:
|
||||
|
||||
(pgadmin4) $ make src
|
||||
```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:
|
||||
|
||||
(pgadmin4) $ make pip
|
||||
```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
|
||||
|
||||
## Support
|
||||
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
|
||||
# Project info
|
||||
|
||||
The source code repository can be found here:
|
||||
|
||||
|
||||
@@ -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.
|
||||
@@ -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
|
||||
look at the javascript files node.js, browser.js, menu.js, panel.js, etc for
|
||||
better understanding of the code.
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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.
|
||||
@@ -22,17 +22,19 @@ server:
|
||||
* 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 default binary paths set in the container are as follows:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
DEFAULT_BINARY_PATHS = {
|
||||
'pg-13': '/usr/local/pgsql-13'
|
||||
'pg-12': '/usr/local/pgsql-12'
|
||||
'pg-11': '/usr/local/pgsql-11'
|
||||
'pg-10': '/usr/local/pgsql-10'
|
||||
'pg-9.6': '/usr/local/pgsql-9.6'
|
||||
'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',
|
||||
'pg-9.6': '/usr/local/pgsql-9.6'
|
||||
}
|
||||
|
||||
this may be changed in the :ref:`preferences`.
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ The Entity-Relationship Diagram (ERD) tool is a database design tool that provid
|
||||
* 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
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
|
||||
@@ -96,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.
|
||||
@@ -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.
|
||||
@@ -39,6 +39,7 @@ Mode is pre-configured for security.
|
||||
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: 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: 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: 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 |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 90 KiB |