Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3416184236 | ||
|
|
6e3ee1c607 | ||
|
|
b512404c85 | ||
|
|
5bb6e9133f | ||
|
|
344c236d72 | ||
|
|
b4b2a4ff67 | ||
|
|
205a661922 | ||
|
|
eead9b77e7 | ||
|
|
47e734dbf2 | ||
|
|
ce372a73bf | ||
|
|
10c5d25735 | ||
|
|
81dcc91747 | ||
|
|
3a62fc5a2a | ||
|
|
10adb6a11b | ||
|
|
82fade7645 | ||
|
|
37dced23f0 | ||
|
|
6f857bdbcb | ||
|
|
6ba9c192ce | ||
|
|
221af6caa6 | ||
|
|
e22492ad51 | ||
|
|
2b8efc6361 | ||
|
|
73430a2062 | ||
|
|
fc411bfc49 | ||
|
|
4450145d31 | ||
|
|
cd84200135 | ||
|
|
6997d0149e | ||
|
|
5981f4bd13 | ||
|
|
5113fda7a6 | ||
|
|
7ce07f7dcf | ||
|
|
078a959e3d | ||
|
|
b4f517f7ff | ||
|
|
36dc2e9d2a | ||
|
|
858c85adbe | ||
|
|
2cd86449d0 | ||
|
|
c37fb061bd | ||
|
|
dc9cc3730b | ||
|
|
872b60de5c | ||
|
|
5d2ce142dd | ||
|
|
9666bd6c8d | ||
|
|
0b3c79865e | ||
|
|
9c903f944c | ||
|
|
541d9dfcb4 | ||
|
|
b9d3006915 | ||
|
|
68b7ddb592 | ||
|
|
4309aa3ba7 | ||
|
|
f9bbadfc6a | ||
|
|
c6f8918983 | ||
|
|
16c95d21a7 | ||
|
|
bae912fa40 | ||
|
|
ca3ec76db6 | ||
|
|
4050545f7c | ||
|
|
975bcd9fb0 | ||
|
|
3cd547f879 | ||
|
|
5736e173ea | ||
|
|
5a26cad588 | ||
|
|
3b616b2fb1 | ||
|
|
35f05e49b3 | ||
|
|
61fa8b16c9 | ||
|
|
3258851425 | ||
|
|
0f5450c6d2 | ||
|
|
07f18a1b05 | ||
|
|
02ecc82e73 | ||
|
|
0d111e0fb6 | ||
|
|
7af597eca2 | ||
|
|
64c71becc6 | ||
|
|
ffec77d50b | ||
|
|
d69b4282c8 | ||
|
|
aa973fc8ae | ||
|
|
8c91d40932 | ||
|
|
2f5fb6a996 | ||
|
|
cfc338c5f0 | ||
|
|
32403920fe | ||
|
|
e9384615dc | ||
|
|
07d965ea46 | ||
|
|
a43b70e360 | ||
|
|
095e11247d | ||
|
|
88162c683e | ||
|
|
cf3c696f7e | ||
|
|
02eaf787e9 | ||
|
|
e5c249e81c | ||
|
|
c0b868b53b | ||
|
|
39a14920e3 | ||
|
|
5cf9dea9a8 | ||
|
|
0b7eafaca0 | ||
|
|
ed8aeed818 | ||
|
|
0b91244f91 | ||
|
|
46c67a2f4e | ||
|
|
c87e925991 | ||
|
|
5fb80af90e | ||
|
|
77467209c2 | ||
|
|
cd613ded0a | ||
|
|
e8283173ba | ||
|
|
c08953b9b3 | ||
|
|
779749a515 | ||
|
|
7f5433b307 | ||
|
|
93525a6196 | ||
|
|
eee7e1ae53 | ||
|
|
e2f32c0984 | ||
|
|
edd1783353 | ||
|
|
1adde6084f | ||
|
|
34f160cec7 | ||
|
|
33b2b82ba9 | ||
|
|
2c81b33925 | ||
|
|
a9799f25a2 | ||
|
|
0e0eb3c2d5 | ||
|
|
98fd51b38b | ||
|
|
3c43aa12af | ||
|
|
e80d55e968 | ||
|
|
7fcfea2214 | ||
|
|
e06d39b70c | ||
|
|
b2eb23eb8d | ||
|
|
da71c0c746 | ||
|
|
0b24a8f39a | ||
|
|
8afa17d692 | ||
|
|
c72e2f159d | ||
|
|
f399b30605 | ||
|
|
b55164c454 | ||
|
|
27c7ea2ff1 | ||
|
|
ac50b4d80b | ||
|
|
2c4b479f50 | ||
|
|
00011b387a | ||
|
|
b01a93544f | ||
|
|
48bfc66048 | ||
|
|
1a7a23de3f | ||
|
|
59c4a00134 | ||
|
|
c873217cf1 | ||
|
|
ce146b679c | ||
|
|
e8fdf04e97 | ||
|
|
0f86b78d87 | ||
|
|
31fddaf10b | ||
|
|
30a0fb1cb3 | ||
|
|
3ba73ab1d9 | ||
|
|
7d7b8a71c1 | ||
|
|
4920d25479 | ||
|
|
a1c7265c41 | ||
|
|
2aea5b41ad | ||
|
|
9ab36b0269 | ||
|
|
b4e6d8c6d7 | ||
|
|
5c2d242ff8 | ||
|
|
a460644ae8 |
No files matched your search
@@ -13,7 +13,7 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
build-container:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
|
||||
@@ -13,7 +13,7 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
build-docs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
|
||||
@@ -13,7 +13,7 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
check-javascript-style:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
|
||||
@@ -13,7 +13,7 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
build-python-package:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
|
||||
@@ -13,7 +13,7 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
check-python-style:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
|
||||
@@ -13,7 +13,7 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
build-tarball:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
|
||||
@@ -13,7 +13,7 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
check-translations:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
|
||||
@@ -13,7 +13,7 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
run-feature-tests-epas:
|
||||
# Only run if the tests are enabled
|
||||
# TODO: Figure out a way to test for the presence of the secrets instead
|
||||
if: vars.ENABLE_EPAS_TESTS == 'true'
|
||||
|
||||
@@ -16,11 +16,11 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
run-feature-tests-pg:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
pgver: [11, 12, 13, 14, 15]
|
||||
pgver: [12, 13, 14, 15, 16]
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
run-javascript-tests:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
|
||||
- name: Upgrade yarn
|
||||
run: |
|
||||
yarn set version berry
|
||||
|
||||
@@ -23,7 +23,7 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
run-python-tests-epas:
|
||||
# Only run if the tests are enabled
|
||||
# TODO: Figure out a way to test for the presence of the secrets instead
|
||||
if: vars.ENABLE_EPAS_TESTS == 'true'
|
||||
|
||||
@@ -16,12 +16,12 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
run-python-tests-pg:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-latest, windows-latest]
|
||||
pgver: [11, 12, 13, 14, 15]
|
||||
pgver: [12, 13, 14, 15, 16]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
@@ -57,7 +57,9 @@ jobs:
|
||||
- name: Install platform dependencies on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
choco install -y postgresql${{ matrix.pgver }} --params "/Password:postgres /Port:59${{ matrix.pgver }}" --ia "--prefix C:\PostgreSQL\${{ matrix.pgver }} --datadir C:\PostgreSQL\${{ matrix.pgver }}\data --install_runtimes 0 --disable-components pgAdmin,stackbuilder --enable-components server,commandlinetools"
|
||||
FOR /f "delims=" %%F IN ('python tools\get_sb_package.py "https://www.postgresql.org/applications-v2.xml" "postgresql_${{ matrix.pgver }}" "windows-x64"') DO SET INSTALLER_EXE=%%F
|
||||
ECHO Running %INSTALLER_EXE%...
|
||||
%INSTALLER_EXE% --prefix C:\PostgreSQL\${{ matrix.pgver }} --datadir C:\PostgreSQL\${{ matrix.pgver }}\data --serverport 59${{ matrix.pgver }} --superpassword postgres --install_runtimes 0 --mode unattended --unattendedmodeui none --disable-components pgAdmin,stackbuilder --enable-components server,commandlinetools"
|
||||
choco install -y mitkerberos
|
||||
|
||||
REM Ignore error 3010 (reboot required)
|
||||
|
||||
@@ -18,7 +18,7 @@ concurrency:
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build:
|
||||
run-sonarqube-scan:
|
||||
# Only run if the project key is set
|
||||
if: vars.SONARQUBE_PROJECT_KEY != null
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[pycodestyle]
|
||||
ignore = E402,W504,W605
|
||||
ignore = E402,W504,W605,E231,W605
|
||||
max-line-length = 79
|
||||
statistics = True
|
||||
show-source = False
|
||||
|
||||
@@ -114,20 +114,15 @@ RUN rm -rf /pgadmin4/docs/en_US/_build/html/_static/*.png
|
||||
# Create additional builders to get all of the PostgreSQL utilities
|
||||
#########################################################################
|
||||
|
||||
FROM postgres:11-alpine AS pg11-builder
|
||||
FROM postgres:12-alpine AS pg12-builder
|
||||
FROM postgres:13-alpine AS pg13-builder
|
||||
FROM postgres:14-alpine AS pg14-builder
|
||||
FROM postgres:15-alpine AS pg15-builder
|
||||
FROM postgres:16-alpine AS pg16-builder
|
||||
|
||||
FROM alpine:latest AS tool-builder
|
||||
|
||||
# Copy the PG binaries
|
||||
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/
|
||||
@@ -148,6 +143,11 @@ COPY --from=pg15-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-15/
|
||||
COPY --from=pg15-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-15/
|
||||
COPY --from=pg15-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-15/
|
||||
|
||||
COPY --from=pg16-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-16/
|
||||
COPY --from=pg16-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-16/
|
||||
COPY --from=pg16-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-16/
|
||||
COPY --from=pg16-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-16/
|
||||
|
||||
#########################################################################
|
||||
# Assemble everything into the final container.
|
||||
#########################################################################
|
||||
@@ -159,9 +159,14 @@ COPY --from=env-builder /venv /venv
|
||||
|
||||
# Copy in the tools
|
||||
COPY --from=tool-builder /usr/local/pgsql /usr/local/
|
||||
COPY --from=pg15-builder /usr/local/lib/libpq.so.5.15 /usr/lib/
|
||||
RUN ln -s libpq.so.5.15 /usr/lib/libpq.so.5 && \
|
||||
ln -s libpq.so.5.15 /usr/lib/libpq.so
|
||||
COPY --from=pg16-builder /usr/local/lib/libpq.so.5.16 /usr/lib/
|
||||
COPY --from=pg16-builder /usr/lib/libzstd.so.1.5.5 /usr/lib/
|
||||
COPY --from=pg16-builder /usr/lib/liblz4.so.1.9.4 /usr/lib/
|
||||
|
||||
RUN ln -s libpq.so.5.16 /usr/lib/libpq.so.5 && \
|
||||
ln -s libpq.so.5.16 /usr/lib/libpq.so && \
|
||||
ln -s libzstd.so.1.5.5 /usr/lib/libzstd.so.1 && \
|
||||
ln -s liblz4.so.1.9.4 /usr/lib/liblz4.so.1
|
||||
|
||||
WORKDIR /pgadmin4
|
||||
ENV PYTHONPATH=/pgadmin4
|
||||
|
||||
@@ -26,6 +26,7 @@ CALL :CLEAN || EXIT /B 1
|
||||
CALL :CREATE_VIRTUAL_ENV || EXIT /B 1
|
||||
CALL :CREATE_PYTHON_ENV || EXIT /B 1
|
||||
CALL :CREATE_RUNTIME_ENV || EXIT /B 1
|
||||
CALL :GENERATE_SBOM || EXIT /B 1
|
||||
CALL :CREATE_INSTALLER || EXIT /B 1
|
||||
CALL :SIGN_INSTALLER || EXIT /B 1
|
||||
|
||||
@@ -275,10 +276,16 @@ 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 line as the latest version having some
|
||||
REM problem https://github.com/nwjs/nw.js/issues/7964, so for the time being
|
||||
REM hardcoded the version to 0.77.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
|
||||
|
||||
SET "NW_VERSION=0.77.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
|
||||
@@ -308,8 +315,8 @@ REM Main build sequence Ends
|
||||
|
||||
ECHO Staging PostgreSQL components...
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libpq.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libcrypto-1_1-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libssl-1_1-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libcrypto-*-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\libssl-*-x64.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%PGADMIN_POSTGRES_DIR%\bin\libintl-*.dll" COPY "%PGADMIN_POSTGRES_DIR%\bin\libintl-*.dll" "%BUILDROOT%\runtime" > nul
|
||||
IF EXIST "%PGADMIN_POSTGRES_DIR%\bin\libiconv-*.dll" COPY "%PGADMIN_POSTGRES_DIR%\bin\libiconv-*.dll" "%BUILDROOT%\runtime" > nul
|
||||
COPY "%PGADMIN_POSTGRES_DIR%\bin\zlib.dll" "%BUILDROOT%\runtime" > nul || EXIT /B 1
|
||||
@@ -355,6 +362,9 @@ REM Main build sequence Ends
|
||||
CD %WD%
|
||||
EXIT /B 0
|
||||
|
||||
:GENERATE_SBOM
|
||||
ECHO Generating SBOM...
|
||||
CALL syft "%BUILDROOT%" -o cyclonedx-json > "%BUILDROOT%\sbom.json"
|
||||
|
||||
:SIGN_INSTALLER
|
||||
ECHO Attempting to sign the installer...
|
||||
|
||||
@@ -251,6 +251,16 @@ tab to provide other backup options.
|
||||
table locks at the beginning of the dump. Instead, fail if unable to lock a
|
||||
table within the specified timeout.
|
||||
|
||||
Click the *Objects* tab to continue.
|
||||
|
||||
.. image:: images/backup_object_selection.png
|
||||
:alt: Select objects in backup dialog
|
||||
:align: center
|
||||
|
||||
* Select the objects from tree to take backup of selected objects only.
|
||||
* If Schema is selected then it will take the backup of that selected schema only.
|
||||
* If any Table, View, Materialized View, Sequences, or Foreign Table is selected then it will take the backup of those selected objects.
|
||||
|
||||
When you’ve specified the details that will be incorporated into the pg_dump
|
||||
command:
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ root = os.path.realpath(
|
||||
|
||||
if sys.path[0] != root:
|
||||
sys.path.insert(0, root)
|
||||
|
||||
import config
|
||||
from pgadmin.utils import PgAdminModule
|
||||
|
||||
target = open('code_snippets.rst', 'w')
|
||||
|
||||
@@ -39,6 +39,10 @@ are disabled if inapplicable.)
|
||||
a text value.
|
||||
* Use the drop-down listbox next to *Collation* to apply a collation setting to
|
||||
the column.
|
||||
* Use the drop-down listbox next to *Compression* to set the compression method
|
||||
for the column. Compression is supported only for variable-width data types,
|
||||
and is used only when the column's storage mode is main or extended. This
|
||||
option is available from v14 and above.
|
||||
|
||||
Click the *Constraints* tab to continue.
|
||||
|
||||
|
||||
@@ -53,11 +53,11 @@ The default binary paths set in the container are as follows:
|
||||
.. code-block:: bash
|
||||
|
||||
DEFAULT_BINARY_PATHS = {
|
||||
'pg-16': '/usr/local/pgsql-16',
|
||||
'pg-15': '/usr/local/pgsql-15',
|
||||
'pg-14': '/usr/local/pgsql-14',
|
||||
'pg-13': '/usr/local/pgsql-13',
|
||||
'pg-12': '/usr/local/pgsql-12',
|
||||
'pg-11': '/usr/local/pgsql-11'
|
||||
'pg-12': '/usr/local/pgsql-12'
|
||||
}
|
||||
|
||||
this may be changed in the :ref:`preferences`.
|
||||
|
||||
@@ -19,6 +19,9 @@ Use the fields in the *General* tab to identify the database:
|
||||
|
||||
* Use the *Database* field to add a descriptive name for the database. The name
|
||||
will be displayed in the *pgAdmin* tree control.
|
||||
* Use the *OID* field to specify the object identifier to be used for the new
|
||||
database. Users can specify the value greater than 16383. This option is available
|
||||
from v15 and above.
|
||||
* Select the owner of the database from the drop-down listbox in the *Owner*
|
||||
field.
|
||||
* Store notes about the database in the *Comment* field.
|
||||
@@ -38,11 +41,22 @@ Use the *Definition* tab to set properties for the database:
|
||||
* Select a tablespace from the drop-down listbox in the *Tablespace* field. The
|
||||
selected tablespace will be the default tablespace used to contain database
|
||||
objects.
|
||||
* Select the strategy from the drop-down listbox in the *Strategy* field while
|
||||
creating a new database. This option is available from v15 and above.
|
||||
* Select the locale provider from the drop-down listbox in the *Locale Provider*
|
||||
field to set the default collation for this database. Possible values are: icu, libc.
|
||||
This option is available from v15 and above.
|
||||
* Select the collation order from the drop-down listbox in the *Collation* field.
|
||||
* Select the character classification from the drop-down listbox in the
|
||||
*Character Type* field. This affects the categorization of characters, e.g.
|
||||
lower, upper and digit. The default, or a blank field, uses the character
|
||||
classification of the template database.
|
||||
* Select the icu locale from the drop-down listbox in the *ICU Locale* to
|
||||
specifies the ICU locale ID if the ICU locale provider is used.
|
||||
This option is available from v15 and above.
|
||||
* Specify the icu rules in the *ICU Rules* field as additional collation
|
||||
rules to customize the behavior of the default collation of this database.
|
||||
This option is available from v16 and above.
|
||||
* Specify a connection limit in the *Connection Limit* field to configure the
|
||||
maximum number of connection requests. The default value (*-1*) allows
|
||||
unlimited connections to the database.
|
||||
|
||||
@@ -23,6 +23,9 @@ Use the fields in the *General* tab to identify an extension:
|
||||
|
||||
* Use the drop-down listbox in the *Name* field to select the extension. Each
|
||||
extension must have a unique name.
|
||||
* Move the switch next to *Cascade?* towards right position to automatically
|
||||
install any extensions that this extension depends on that are not already
|
||||
installed.
|
||||
* Store notes about the extension in the *Comment* field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
@@ -55,7 +58,7 @@ the *Extension* dialog:
|
||||
:align: center
|
||||
|
||||
The command creates the *adminpack* extension in the *public* schema. It is
|
||||
version *1.0* of *adminpack*.
|
||||
version *2.0* of *adminpack*.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
|
||||
|
After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 88 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 178 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 158 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 139 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 111 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 94 KiB |
@@ -8,7 +8,7 @@ Use the *Index* dialog to create an index on a specified table or materialized
|
||||
view.
|
||||
|
||||
The *Index* dialog organizes the development of a index through the following
|
||||
dialog tabs: *General* and *Definition*. The *SQL* tab displays the SQL code
|
||||
dialog tabs: *General*, *Definition*, and *Columns*. The *SQL* tab displays the SQL code
|
||||
generated by dialog selections.
|
||||
|
||||
.. image:: images/index_general.png
|
||||
@@ -76,28 +76,36 @@ Use the fields in the *Definition* tab to define the index:
|
||||
expression limits the entries in the index to those rows that satisfy the
|
||||
constraint.
|
||||
|
||||
Use the context-sensitive fields in the *Columns* panel to specify which
|
||||
column(s) the index queries. Click the *Add* icon (+) to add a column:
|
||||
Click the *Columns* tab to continue.
|
||||
|
||||
* Use the drop-down listbox in *Column* field to select the name of the column
|
||||
rom the table.
|
||||
.. image:: images/index_columns.png
|
||||
:alt: Index dialog columns tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Columns* tab to specify which column(s) or expression(s)
|
||||
the index queries. Use the *Is expression ?* switch to enable
|
||||
expression sql input. Use the drop-down listbox next to *Column*
|
||||
to select a column. Once the *Column* is selected or the *Expression* is
|
||||
entered then click the *Add* icon (+) to provide details of the action on the
|
||||
column/expression:
|
||||
|
||||
* The *Col/Exp* field is populated with the selection made in the *Column*
|
||||
drop-down listbox or the *Expression* entered.
|
||||
* If enabled, use the drop-down listbox to select an available *Operator class*
|
||||
to specify the type of action performed on the column.
|
||||
* If enabled, move the *Sort order* switch to specify the sort order:
|
||||
* If enabled, use the drop-down listbox to select *Sort order*:
|
||||
|
||||
* Select *ASC* to specify an ascending sort order (the default);
|
||||
* Select *DESC* to specify a descending sort order.
|
||||
|
||||
* If enabled, move the *Nulls* switch to specify the sort order of nulls:
|
||||
* If enabled, use the drop-down listbox to select *Nulls*:
|
||||
|
||||
* Select *First* to specify nulls sort before non-nulls;
|
||||
* Select *Last* to specify nulls sort after non-nulls (the default).
|
||||
|
||||
* Use the drop-down listbox in the *Collation* field to select a collation to
|
||||
use for the index.
|
||||
|
||||
Use *Include columns* field to specify columns for *INCLUDE* clause of the
|
||||
index. This option is available in Postgres 11 and later.
|
||||
constraint. This option is available in Postgres 11 and later.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
|
||||
@@ -7,36 +7,109 @@
|
||||
Use the *Maintenance* dialog to VACUUM, ANALYZE, REINDEX or CLUSTER a database
|
||||
or selected database objects.
|
||||
|
||||
.. image:: images/maintenance.png
|
||||
:alt: Maintenance dialog
|
||||
:align: center
|
||||
|
||||
While this utility is useful for ad-hoc maintenance purposes, you are encouraged
|
||||
to perform automatic VACUUM jobs on a regular schedule.
|
||||
|
||||
Select a button next to *Maintenance operation* to specify the type of
|
||||
maintenance:
|
||||
|
||||
.. image:: images/maintenance_vacuum.png
|
||||
:alt: Maintenance dialog
|
||||
:align: center
|
||||
|
||||
* Click *VACUUM* to scan the selected database or table to reclaim storage used
|
||||
by dead tuples.
|
||||
|
||||
* Move the *FULL* switch to the *Yes* position to compact tables by writing
|
||||
a completely new version of the table file without dead space. The default
|
||||
is *No*.
|
||||
a completely new version of the table file without dead space.
|
||||
|
||||
* Move the *FREEZE* switch to the *Yes* position to freeze data in a table
|
||||
when it will have no further updates. The default is *No*.
|
||||
when it will have no further updates.
|
||||
|
||||
* Move the *ANALYZE* switch to the *Yes* position to issue ANALYZE commands
|
||||
whenever the content of a table has changed sufficiently. The default is
|
||||
*No*.
|
||||
whenever the content of a table has changed sufficiently.
|
||||
|
||||
* Move the *DISABLE PAGE SKIPPING* switch to the *Yes* position to disables
|
||||
all page-skipping behavior.
|
||||
|
||||
* Move the *SKIP LOCKED* switch to the *Yes* position to specifies that
|
||||
VACUUM should not wait for any conflicting locks to be released when
|
||||
beginning work on a relation. This option is available from v12 onwards.
|
||||
|
||||
* Move the *TRUNCATE* switch to the *Yes* position to specifies that VACUUM
|
||||
should attempt to truncate off any empty pages at the end of the table and
|
||||
allow the disk space for the truncated pages to be returned to the operating
|
||||
system. This option is available from v12 onwards.
|
||||
|
||||
* Move the *PROCESS TOAST* switch to the *Yes* position to specifies that
|
||||
VACUUM should attempt to process the corresponding TOAST table for each
|
||||
relation, if one exists. This option is available from v14 onwards.
|
||||
|
||||
* Move the *PROCESS MAIN* switch to the *Yes* position to specifies that
|
||||
VACUUM should attempt to process the main relation. This option is available
|
||||
from v16 onwards.
|
||||
|
||||
* Move the *SKIP DATABASE STATS* switch to the *Yes* position to specifies
|
||||
that VACUUM should skip updating the database-wide statistics about oldest
|
||||
unfrozen XIDs. This option is available from v16 onwards.
|
||||
|
||||
* Move the *ONLY DATABASE STATS* switch to the *Yes* position to specifies
|
||||
that VACUUM should do nothing except update the database-wide statistics
|
||||
about oldest unfrozen XIDs . This option is available from v16 onwards.
|
||||
|
||||
* Use the *INDEX CLEANUP* field to force VACUUM to process indexes when there
|
||||
are more than zero dead tuples.
|
||||
|
||||
* Use the *PARALLEL* field to specify index vacuum and index cleanup phases
|
||||
of VACUUM in parallel using integer background workers. This option is
|
||||
available from v13 onwards.
|
||||
|
||||
* Use the *BUFFER USAGE LIMIT* field to specifies the Buffer Access Strategy
|
||||
ring buffer size for VACUUM. This size is used to calculate the number of
|
||||
shared buffers which will be reused as part of this strategy. This option
|
||||
is available from v16 onwards
|
||||
|
||||
|
||||
.. image:: images/maintenance_analyze.png
|
||||
:alt: Maintenance dialog
|
||||
:align: center
|
||||
|
||||
* Click *ANALYZE* to update the stored statistics used by the query planner.
|
||||
This enables the query optimizer to select the fastest query plan for optimal
|
||||
performance.
|
||||
|
||||
* Move the *SKIP LOCKED* switch to the *Yes* position to specifies that
|
||||
ANALYZE should not wait for any conflicting locks to be released when
|
||||
beginning work on a relation. This option is available from v12 onwards.
|
||||
|
||||
* Use the *BUFFER USAGE LIMIT* field to specifies the Buffer Access Strategy
|
||||
ring buffer size for ANALYZE. This size is used to calculate the number of
|
||||
shared buffers which will be reused as part of this strategy. This option
|
||||
is available from v16 onwards
|
||||
|
||||
.. image:: images/maintenance_reindex.png
|
||||
:alt: Maintenance dialog
|
||||
:align: center
|
||||
|
||||
* Click *REINDEX* to rebuild any index in case it has degenerated due to the
|
||||
insertion of unusual data patterns. This happens, for example, if you insert
|
||||
rows with increasing index values, and delete low index values.
|
||||
|
||||
* Move the *SYSTEM* switch to the *Yes* position to recreate all indexes
|
||||
on system catalogs within the current database. This option is enabled
|
||||
only when database object is selected.
|
||||
|
||||
* Move the *CONCURRENTLY* switch to the *Yes* position to rebuild the index
|
||||
without taking any locks that prevent concurrent inserts, updates, or
|
||||
deletes on the table. This option is available from v12 onwards.
|
||||
|
||||
* Use the *TABLESPACE* field to specifies that indexes will be rebuilt on
|
||||
a new tablespace. This option is available from v14 onwards.
|
||||
|
||||
.. image:: images/maintenance_cluster.png
|
||||
:alt: Maintenance dialog
|
||||
:align: center
|
||||
|
||||
* Click *CLUSTER* to instruct PostgreSQL to cluster the selected table.
|
||||
|
||||
To exclude status messages from the process output, move the *Verbose Messages*
|
||||
@@ -47,4 +120,4 @@ to exit the dialog without performing maintenance operations, click *Cancel*.
|
||||
|
||||
pgAdmin will run the maintenance process in background. You can view all the background
|
||||
process with there running status and logs on the :ref:`Processes <processes>`
|
||||
tab
|
||||
tab.
|
||||
@@ -31,17 +31,6 @@ Use the fields in the *General* tab to identify the materialized view:
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/materialized_view_definition.png
|
||||
:alt: Materialized view dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the text editor field in the *Definition* tab to provide the query that will
|
||||
populate the materialized view. Please note that updating the definition of existing
|
||||
materialized view would result in loss of Parameter(Table, Toast), Security(Privileges & Security labels),
|
||||
Indexes and other dependent objects.
|
||||
|
||||
Click the *Storage* tab to continue.
|
||||
|
||||
.. image:: images/materialized_view_storage.png
|
||||
:alt: Materialized view dialog storage tab
|
||||
:align: center
|
||||
|
||||
@@ -52,10 +41,24 @@ Use the fields in the *Storage* tab to maintain the materialized view:
|
||||
cannot be queried until you invoke REFRESH MATERIALIZED VIEW.
|
||||
* Use the drop-down listbox next to *Tablespace* to select a location for the
|
||||
materialized view.
|
||||
* Use the drop-down list box next to Access Method to specify the table access method to use to store the contents
|
||||
for the new materialized view; the method needs to be an access method of type TABLE. This field is optional.
|
||||
This option is available from v12 and above.
|
||||
* Use the *Fill Factor* field to specify a fill factor for the materialized
|
||||
view. The fill factor for a table is a percentage between 10 and 100. 100
|
||||
(complete packing) is the default.
|
||||
|
||||
Click the *Code* tab to continue.
|
||||
|
||||
.. image:: images/materialized_view_code.png
|
||||
:alt: Materialized view dialog definition tab
|
||||
:align: center
|
||||
|
||||
Use the text editor field in the *Code* tab to provide the query that will
|
||||
populate the materialized view. Please note that updating the definition of existing
|
||||
materialized view would result in loss of Parameter(Table, Toast), Security(Privileges & Security labels),
|
||||
Indexes and other dependent objects.
|
||||
|
||||
Click the *Parameter* tab to continue.
|
||||
|
||||
.. image:: images/materialized_view_parameter.png
|
||||
|
||||
@@ -12,6 +12,10 @@ installed in Server mode. You can copy these settings from *config.py* file
|
||||
and modify the values for the following parameters:
|
||||
|
||||
|
||||
.. _AzureAD: https://learn.microsoft.com/en-us/security/zero-trust/develop/configure-tokens-group-claims-app-roles
|
||||
.. _GitLab: https://docs.gitlab.com/ee/integration/openid_connect_provider.html#shared-information
|
||||
|
||||
|
||||
.. csv-table::
|
||||
:header: "**Parameter**", "**Description**"
|
||||
:class: longtable
|
||||
@@ -39,11 +43,16 @@ and modify the values for the following parameters:
|
||||
"OAUTH2_AUTO_CREATE_USER", "Set the value to *True* if you want to automatically
|
||||
create a pgAdmin user corresponding to a successfully authenticated Oauth2 user.
|
||||
Please note that password is not stored in the pgAdmin database."
|
||||
"OAUTH2_ADDITIONAL_CLAIMS", "If a dictionary is provided, pgAdmin will check for a matching key and value on the user profile.
|
||||
In case the profile does not have any match with the provided config, the user will receive an authorization error.
|
||||
Useful for checking AzureAD_ *wids* or *groups*, GitLab_ *owner*, *maintainer* and *reporter* claims."
|
||||
|
||||
Redirect URL
|
||||
============
|
||||
|
||||
The redirect url to configure Oauth2 server is *http://<pgAdmin Server URL>/oauth2/authorize*
|
||||
The redirect url to configure Oauth2 server is *<http/https>://<pgAdmin Server URL>/oauth2/authorize*
|
||||
After successful application authorization, the authorization server will redirect the user back to the pgAdmin url
|
||||
specified here. Select https scheme if your pgAdmin server serves over https protocol otherwise select http.
|
||||
|
||||
Master Password
|
||||
===============
|
||||
|
||||
@@ -396,16 +396,25 @@ Use the fields on the *Editor* panel to change settings of the query editor.
|
||||
Use the fields on the *Explain* panel to specify the level of detail included in
|
||||
a graphical EXPLAIN.
|
||||
|
||||
* When the *Show Buffers?* switch is set to *True*, graphical explain details
|
||||
* When the *Show buffers?* switch is set to *True*, graphical explain details
|
||||
will include information about buffer usage.
|
||||
|
||||
* When the *Show Costs?* switch is set to *True*, graphical explain details will
|
||||
* When the *Show costs?* switch is set to *True*, graphical explain details will
|
||||
include information about the estimated startup and total cost of each plan,
|
||||
as well as the estimated number of rows and the estimated width of each row.
|
||||
|
||||
* When the *Show Timing?* switch is set to *True*, graphical explain details
|
||||
* When the *Show settings?* switch is set to *True*, graphical explain details
|
||||
will include the information on the configuration parameters.
|
||||
|
||||
* When the *Show summary?* switch is set to *True*, graphical explain details
|
||||
will include the summary information about the query plan.
|
||||
|
||||
* When the *Show timing?* switch is set to *True*, graphical explain details
|
||||
will include the startup time and time spent in each node in the output.
|
||||
|
||||
* When the *Show wal?* switch is set to *True*, graphical explain details
|
||||
will include the information on WAL record generation.
|
||||
|
||||
* When the *Verbose output?* switch is set to *True*, graphical explain details
|
||||
will include extended information about the query execution plan.
|
||||
|
||||
@@ -520,9 +529,13 @@ Expand the *Schema Diff* node to specify your display preferences.
|
||||
:alt: Preferences schema diff
|
||||
:align: center
|
||||
|
||||
Use the *Ignore owner* switch to ignores the owner while comparing the objects.
|
||||
Use the *Ignore Grant/Revoke* switch to ignores the grant and revoke command while comparing the objects.
|
||||
|
||||
Use the *Ignore whitespace* switch to ignores the whitespace while comparing
|
||||
Use the *Ignore Owner* switch to ignores the owner while comparing the objects.
|
||||
|
||||
Use the *Ignore Tablespace* switch to ignores the tablespace while comparing the objects.
|
||||
|
||||
Use the *Ignore Whitespace* switch to ignores the whitespace while comparing
|
||||
the string objects. Whitespace includes space, tabs, and CRLF.
|
||||
|
||||
|
||||
|
||||
@@ -146,6 +146,10 @@ Query Execution
|
||||
| | spent in each node of the query. | |
|
||||
| | | |
|
||||
| | * Select *Summary* to include the summary information about the query plan. | |
|
||||
| | | |
|
||||
| | * Select *Settings* to include the information on the configuration parameters. | |
|
||||
| | | |
|
||||
| | * Select *Wal* to include the information on WAL record generation. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Commit* | Click the *Commit* icon to commit the transaction. | Shift+CTRL+M |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
|
||||
@@ -11,6 +11,9 @@ notes for it.
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
release_notes_7_8
|
||||
release_notes_7_7
|
||||
release_notes_7_6
|
||||
release_notes_7_5
|
||||
release_notes_7_4
|
||||
release_notes_7_3
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
***********
|
||||
Version 7.6
|
||||
***********
|
||||
|
||||
Release date: 2023-08-24
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v7.5.
|
||||
|
||||
Supported Database Servers
|
||||
**************************
|
||||
**PostgreSQL**: 11, 12, 13, 14 and 15
|
||||
|
||||
**EDB Advanced Server**: 11, 12, 13, 14 and 15
|
||||
|
||||
Bundled PostgreSQL Utilities
|
||||
****************************
|
||||
**psql**, **pg_dump**, **pg_dumpall**, **pg_restore**: 15.3
|
||||
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #2595 <https://github.com/pgadmin-org/pgadmin4/issues/2595>`_ - Added Expression to CREATE INDEX.
|
||||
| `Issue #3942 <https://github.com/pgadmin-org/pgadmin4/issues/3942>`_ - Added cascade option while creating an extension.
|
||||
| `Issue #5759 <https://github.com/pgadmin-org/pgadmin4/issues/5759>`_ - Added 'Ignore Grants' option in the schema diff tool.
|
||||
| `Issue #6004 <https://github.com/pgadmin-org/pgadmin4/issues/6004>`_ - Added 'Ignore Tablespace' option in the schema diff tool.
|
||||
| `Issue #6375 <https://github.com/pgadmin-org/pgadmin4/issues/6375>`_ - Added support for ALTER INDEX column statistics.
|
||||
| `Issue #6376 <https://github.com/pgadmin-org/pgadmin4/issues/6376>`_ - Added unlogged option while creating a sequence.
|
||||
| `Issue #6377 <https://github.com/pgadmin-org/pgadmin4/issues/6377>`_ - Added all like options while creating a table.
|
||||
| `Issue #6381 <https://github.com/pgadmin-org/pgadmin4/issues/6381>`_ - Added support for SYSTEM, CONCURRENTLY and TABLESPACE options in REINDEX.
|
||||
| `Issue #6382 <https://github.com/pgadmin-org/pgadmin4/issues/6382>`_ - Added WAL option to EXPLAIN ANALYZE command.
|
||||
| `Issue #6397 <https://github.com/pgadmin-org/pgadmin4/issues/6397>`_ - Added new/missing options to the VACUUM command.
|
||||
| `Issue #6415 <https://github.com/pgadmin-org/pgadmin4/issues/6415>`_ - Added SKIP_LOCKED and BUFFER_USAGE_LIMIT option to Analyze command.
|
||||
| `Issue #6448 <https://github.com/pgadmin-org/pgadmin4/issues/6448>`_ - Add support for TRUNCATE trigger in foreign table.
|
||||
| `Issue #6595 <https://github.com/pgadmin-org/pgadmin4/issues/6595>`_ - Ensure that Schema Diff comparison results should be displayed in the sorted order.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #3702 <https://github.com/pgadmin-org/pgadmin4/issues/3702>`_ - Generate software bill of materials as part of the package builds.
|
||||
| `Issue #6588 <https://github.com/pgadmin-org/pgadmin4/issues/6588>`_ - Added support for PostgreSQL and EPAS 16 to ensure it works without any errors.
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #5454 <https://github.com/pgadmin-org/pgadmin4/issues/5454>`_ - Fix incorrect redirection URL after authentication by removing fixed value set to SCRIPT_NAME environment variable in pgAdmin4.wsgi file.
|
||||
| `Issue #6208 <https://github.com/pgadmin-org/pgadmin4/issues/6208>`_ - Allow changing the POOL_SIZE and MAX_OVERFLOW config values of the pgAdmin config DB connection pool.
|
||||
| `Issue #6252 <https://github.com/pgadmin-org/pgadmin4/issues/6252>`_ - Fix an issue where query tool on shared server is throwing error if the pgAdmin config DB is external.
|
||||
| `Issue #6420 <https://github.com/pgadmin-org/pgadmin4/issues/6420>`_ - Fix the query tool issue where raise Notice from func/proc or code blocks are no longer displayed live.
|
||||
| `Issue #6500 <https://github.com/pgadmin-org/pgadmin4/issues/6500>`_ - Fix the issue where query tool window turns blank if the user tries to generate a graph on the result.
|
||||
| `Issue #6624 <https://github.com/pgadmin-org/pgadmin4/issues/6624>`_ - Fix an issue where changing MFA_SUPPORTED_METHODS breaks the MFA validation.
|
||||
| `Issue #6630 <https://github.com/pgadmin-org/pgadmin4/issues/6630>`_ - Fix an issue where pgAdmin 7.5 fails to render table SQL with extension loaded index method.
|
||||
| `Issue #6639 <https://github.com/pgadmin-org/pgadmin4/issues/6639>`_ - Fix an issue where cycle syntax was not added in SQL when creating new sequence from UI.
|
||||
| `Issue #6651 <https://github.com/pgadmin-org/pgadmin4/issues/6651>`_ - Fix an issue where the SET directive is excluded from the function header in the schema diff tool.
|
||||
| `Issue #6660 <https://github.com/pgadmin-org/pgadmin4/issues/6660>`_ - Fix a query tool error 'pgAdminThread' object has no attribute 'native_id'.
|
||||
| `Issue #6664 <https://github.com/pgadmin-org/pgadmin4/issues/6664>`_ - Ensure keyboard shortcut for query execution is disabled when query execution is in progress.
|
||||
@@ -0,0 +1,44 @@
|
||||
***********
|
||||
Version 7.7
|
||||
***********
|
||||
|
||||
Release date: 2023-09-21
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v7.6.
|
||||
|
||||
Supported Database Servers
|
||||
**************************
|
||||
**PostgreSQL**: 11, 12, 13, 14 and 15
|
||||
|
||||
**EDB Advanced Server**: 11, 12, 13, 14 and 15
|
||||
|
||||
Bundled PostgreSQL Utilities
|
||||
****************************
|
||||
**psql**, **pg_dump**, **pg_dumpall**, **pg_restore**: 15.4
|
||||
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #642 <https://github.com/pgadmin-org/pgadmin4/issues/642>`_ - Added support to select/deselect objects in the Backup dialog.
|
||||
| `Issue #4805 <https://github.com/pgadmin-org/pgadmin4/issues/4805>`_ - Added all the new options of the 'WITH' clause in the subscription dialog.
|
||||
| `Issue #6378 <https://github.com/pgadmin-org/pgadmin4/issues/6378>`_ - Added USING method while creating the table.
|
||||
| `Issue #6379 <https://github.com/pgadmin-org/pgadmin4/issues/6379>`_ - Added compression method option while creating a column.
|
||||
| `Issue #6383 <https://github.com/pgadmin-org/pgadmin4/issues/6383>`_ - Added Strategy, Locale Provider, ICU Locale, ICU Rules, and OID options while creating a database.
|
||||
| `Issue #6400 <https://github.com/pgadmin-org/pgadmin4/issues/6400>`_ - Added USING method while creating the materialized view.
|
||||
| `Issue #6736 <https://github.com/pgadmin-org/pgadmin4/issues/6736>`_ - Add support for additional ID token claim checks for OAuth 2 authentication.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #2411 <https://github.com/pgadmin-org/pgadmin4/issues/2411>`_ - Added the 'data type' column in the properties tab of the Columns collection node.
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #6274 <https://github.com/pgadmin-org/pgadmin4/issues/6274>`_ - Fix an issue where user is not able to change the password when SMTP is not configured.
|
||||
| `Issue #6704 <https://github.com/pgadmin-org/pgadmin4/issues/6704>`_ - Ensure user is redirected to login page after failed login.
|
||||
| `Issue #6712 <https://github.com/pgadmin-org/pgadmin4/issues/6712>`_ - Ensure that Materialized view size fields in "Statistics" should be human-readable.
|
||||
| `Issue #6730 <https://github.com/pgadmin-org/pgadmin4/issues/6730>`_ - Fix an issue where changing the password shows success but the new password is not working.
|
||||
| `Issue #6738 <https://github.com/pgadmin-org/pgadmin4/issues/6738>`_ - Fix an issue where login form doesn't appear if internal auth source is removed.
|
||||
| `Issue #6764 <https://github.com/pgadmin-org/pgadmin4/issues/6764>`_ - Fix a security related issue where an authenticated user can run remote command using validate binary path API (CVE-2023-5002).
|
||||
@@ -0,0 +1,51 @@
|
||||
***********
|
||||
Version 7.8
|
||||
***********
|
||||
|
||||
Release date: 2023-10-19
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v7.7.
|
||||
|
||||
Supported Database Servers
|
||||
**************************
|
||||
**PostgreSQL**: 12, 13, 14, 15, and 16
|
||||
|
||||
**EDB Advanced Server**: 12, 13, 14 and 15
|
||||
|
||||
Bundled PostgreSQL Utilities
|
||||
****************************
|
||||
**psql**, **pg_dump**, **pg_dumpall**, **pg_restore**: 16.0
|
||||
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #640 <https://github.com/pgadmin-org/pgadmin4/issues/640>`_ - Add support for foreign table's new functionality for PG 11 and above.
|
||||
| `Issue #6229 <https://github.com/pgadmin-org/pgadmin4/issues/6229>`_ - Allow setting custom username for shared servers, with default as username of server being shared.
|
||||
| `Issue #6373 <https://github.com/pgadmin-org/pgadmin4/issues/6373>`_ - Add 'GENERATED ALWAYS AS..' option while creating column constraints for Foreign Table.
|
||||
| `Issue #6797 <https://github.com/pgadmin-org/pgadmin4/issues/6797>`_ - GUI representation of the system's activity using the 'system_stats' extension.
|
||||
| `Issue #6802 <https://github.com/pgadmin-org/pgadmin4/issues/6802>`_ - Added 'load_balance_hosts' connection string parameter for PG 16 and above.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #6782 <https://github.com/pgadmin-org/pgadmin4/issues/6782>`_ - Use PG16 as the default PostgreSQL version.
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #4995 <https://github.com/pgadmin-org/pgadmin4/issues/4995>`_ - Fixed an issue in ERD tool where the downloaded images have a few links cut.
|
||||
| `Issue #5749 <https://github.com/pgadmin-org/pgadmin4/issues/5749>`_ - Fixed an issue where user was not able to assign new/old columns as primary key once column with primary key is deleted.
|
||||
| `Issue #6285 <https://github.com/pgadmin-org/pgadmin4/issues/6285>`_ - Add support for setting prepare threshold in server connection.
|
||||
| `Issue #6482 <https://github.com/pgadmin-org/pgadmin4/issues/6482>`_ - Fixed an issue where the wrong message "Current database has been moved or renamed" is displayed when debugging any function.
|
||||
| `Issue #6538 <https://github.com/pgadmin-org/pgadmin4/issues/6538>`_ - Fixed an issue where Processes tab displays wrong server name in some scenario.
|
||||
| `Issue #6579 <https://github.com/pgadmin-org/pgadmin4/issues/6579>`_ - Fix an issue where global/native keyboard shortcuts are not working when any cell of data output grid has focus.
|
||||
| `Issue #6666 <https://github.com/pgadmin-org/pgadmin4/issues/6666>`_ - Fixed query history slowness issue by storing query only for those having certain threshold max length.
|
||||
| `Issue #6674 <https://github.com/pgadmin-org/pgadmin4/issues/6674>`_ - Fix an issue where foreign table column name becomes "none" if the user changes any column data type.
|
||||
| `Issue #6718 <https://github.com/pgadmin-org/pgadmin4/issues/6718>`_ - Pin the cryptography version to fix PyO3 modules initialisation error.
|
||||
| `Issue #6790 <https://github.com/pgadmin-org/pgadmin4/issues/6790>`_ - Ensure that the backup works properly for PG 16 on the latest docker image.
|
||||
| `Issue #6799 <https://github.com/pgadmin-org/pgadmin4/issues/6799>`_ - Fixed an issue where the user is unable to select objects on the backup dialog due to tree flickering.
|
||||
| `Issue #6836 <https://github.com/pgadmin-org/pgadmin4/issues/6836>`_ - Fixed an issue where non-super PostgreSQL users are not able to terminate their own connections from dashboard.
|
||||
| `Issue #6851 <https://github.com/pgadmin-org/pgadmin4/issues/6851>`_ - Fix an issue where scale in columns is not allowed to have value as 0 or below.
|
||||
| `Issue #6858 <https://github.com/pgadmin-org/pgadmin4/issues/6858>`_ - Fix an issue in graphical explain plan where query tool crashes when the plan has parallel workers details and sort node is clicked for details.
|
||||
| `Issue #6865 <https://github.com/pgadmin-org/pgadmin4/issues/6865>`_ - Fix an issue where user login is not working if username/email contains single quote in server mode.
|
||||
@@ -65,11 +65,15 @@ same or different (and within the same server or from different servers).
|
||||
:alt: Schema diff compare button
|
||||
:align: center
|
||||
|
||||
Use the drop-down near to *Compare* button to ignore owner and ignore whitespace.
|
||||
Use the drop-down near to *Compare* button to ignore owner, whitespace, tablespace and grants.
|
||||
|
||||
* Ignore owner – Select to ignores the owner while comparing the objects.
|
||||
* Ignore Owner – Select to ignores the owner while comparing the objects.
|
||||
|
||||
* Ignore whitespace – Select to ignores the whitespace while comparing the string objects. Whitespace includes space, tabs, and CRLF.
|
||||
* Ignore Whitespace – Select to ignores the whitespace while comparing the string objects. Whitespace includes space, tabs, and CRLF.
|
||||
|
||||
* Ignore Tablespace – Select to ignores the tablespace while comparing the objects.
|
||||
|
||||
* Ignore Grant/Revoke – Select to ignores the grant and revoke command while comparing the objects.
|
||||
|
||||
After you select servers, and databases, click on the
|
||||
*Compare* button to obtain the *Comparison Result*.
|
||||
|
||||
@@ -52,10 +52,12 @@ Use the fields in the *Definition* tab to define the sequence:
|
||||
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
|
||||
* Move the switch next to *Cycled* towards the *right 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*.
|
||||
* Move the switch next to *Unlogged?* towards the *right position* to make the sequence Unlogged.
|
||||
The default is *No*. This option is available only on PostgreSQL 15 and above.
|
||||
* The *OWNED BY* option causes the sequence to be associated with a specific
|
||||
table column, such that if that column (or its whole table) is dropped, the
|
||||
sequence will be automatically dropped as well. The specified table must have
|
||||
|
||||
@@ -44,6 +44,9 @@ Use the fields in the *General* tab to identify the server:
|
||||
Please note that once the server is shared, it's icon is changed in the
|
||||
object explorer.
|
||||
|
||||
* Use the *Shared Username* field to fill the username of the shared server
|
||||
connection. By default, it will take the username of the server being shared.
|
||||
|
||||
* Provide a comment about the server in the *Comments* field.
|
||||
|
||||
Click the *Connection* tab to continue.
|
||||
@@ -203,6 +206,12 @@ Use the fields in the *Advanced* tab to configure a connection:
|
||||
the password will not expire until your pgAdmin session does.
|
||||
Zero means the command will be executed for each new connection or reconnection that is made.
|
||||
If the generated password is not valid indefinitely, set this value to slightly before it will expire.
|
||||
* Use the *Prepare threshold* field to specify the number of times a query is
|
||||
executed before it is prepared. If it is set to 0, every query is prepared
|
||||
the first time it is executed. If it is set to blank, prepared statements are disabled
|
||||
on the connection. This is particularly useful with external connection poolers,
|
||||
such as PgBouncer, which is not compatible with prepared statements. Set this to
|
||||
blank in such cases.
|
||||
|
||||
.. note:: The password file option is only supported when pgAdmin is using libpq
|
||||
v10.0 or later to connect to the server.
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
Use the *Subscription* dialog to create a subscription. A subscription defines the connection to another database and set of publications (one or more) to which it wants to subscribe.
|
||||
|
||||
The *subscription* dialog organizes the development of a subscription through the following dialog tabs: *General*, *Connection* and *With*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
The *subscription* dialog organizes the development of a subscription through the following dialog tabs: *General*, *Connection*, *SSL* and *With*. The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/subscription_general.png
|
||||
:alt: Subscription dialog general tab
|
||||
@@ -83,7 +83,11 @@ icon that is located to the right of each of the following fields.
|
||||
|
||||
Click the *With* tab to continue.
|
||||
|
||||
.. image:: images/subscription_with.png
|
||||
.. image:: images/subscription_with_1.png
|
||||
:alt: Subscription dialog with tab
|
||||
:align: center
|
||||
|
||||
.. image:: images/subscription_with_2.png
|
||||
:alt: Subscription dialog with tab
|
||||
:align: center
|
||||
|
||||
@@ -95,6 +99,13 @@ Use the *With* tab to define some parameters for a subscription:
|
||||
* The *Connect?* specifies whether the CREATE SUBSCRIPTION should connect to the publisher at all. By default, it is set to *Yes*. Setting this to *No* will change default values of enabled, create_slot and copy_data to *No*.
|
||||
* Use the *Slot Name* field to specify the name of the replication slot to use. By default, it uses the name of the subscription for the slot name.
|
||||
* Use the *Synchronous commit* field to override the synchronous_commit setting. By default, it is set to *off*. It is safe to use off for logical replication: If the subscriber loses transactions because of missing synchronization, the data will be sent again from the publisher.
|
||||
* Use the *Streaming* field to specify whether to enable streaming of in-progress transactions for this subscription. The default value is *off*, meaning all transactions are fully decoded on the publisher and only then sent to the subscriber as a whole. This option is available only on PostgreSQL 14 and above.
|
||||
* Use the *Binary?* switch to specify whether the subscription will request the publisher to send the data in binary format (as opposed to text). The default is *false*. This option is available only on PostgreSQL 14 and above.
|
||||
* Use the *Two phase?* switch to specify whether two-phase commit is enabled for this subscription. The default is *false*. This option is available only on PostgreSQL 15 and above.
|
||||
* Use the *Disable on error?* switch to specify whether the subscription should be automatically disabled if any errors are detected by subscription workers during data replication from the publisher. The default is *false*. This option is available only on PostgreSQL 15 and above.
|
||||
* Move the *Run as owner?* switch to *true* position to specify all replication actions are performed as the subscription owner. If *false*, replication workers will perform actions on each table as the owner of that table. The default is *false*. This option is available only on PostgreSQL 16 and above.
|
||||
* Use the *Password required?* to specify whether connections to the publisher made as a result of this subscription must use password authentication. This setting is ignored when the subscription is owned by a superuser. The default is true. Only superusers can set this value to *false*. This option is available only on PostgreSQL 16 and above.
|
||||
* Use the *Origin* to specify whether the subscription will request the publisher to only send changes that don't have an origin or send changes regardless of origin. The default is *any*. This option is available only on PostgreSQL 16 and above.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
|
||||
@@ -394,6 +394,9 @@ Use the fields in the *Advanced* tab to define advanced features for the table:
|
||||
* Use the drop-down listbox next to *Of type* to copy the table structure from
|
||||
the specified composite type. Please note that a typed table will be dropped
|
||||
if the type is dropped (with DROP TYPE ... CASCADE).
|
||||
* Use the drop-down list box next to Access Method to specify the table access method to use to store
|
||||
the contents for the new table; the method needs to be an access method of type TABLE. This field is optional.
|
||||
This option is available from v12 and above.
|
||||
* Use the *Fill Factor* field to specify a fill factor for the table. The fill
|
||||
factor for a table is a percentage between 10 and 100. 100 (complete packing)
|
||||
is the default.
|
||||
@@ -418,13 +421,21 @@ not-null constraints; after saving the new or modified table, any changes to
|
||||
the original table will not be applied to the new table.
|
||||
|
||||
* Use the drop-down listbox next to *Relation* to select a reference table.
|
||||
* Move the *With default values?* switch to the *Yes* position to copy default
|
||||
* Move the switch next to *With default values?* towards the *right position* to copy default
|
||||
values.
|
||||
* Move the *With constraints?* switch to the *Yes* position to copy table and
|
||||
* Move the switch next to *With constraints?* towards the *right position* to copy table and
|
||||
column constraints.
|
||||
* Move the *With indexes?* switch to the *Yes* position to copy indexes.
|
||||
* Move the *With storage?* switch to the *Yes* position to copy storage settings.
|
||||
* Move the *With comments?* switch to the *Yes* position to copy comments.
|
||||
* Move the switch next to *With indexes?* towards the *right position* to copy indexes.
|
||||
* Move the switch next to *With storage?* towards the *right position* to copy storage settings.
|
||||
* Move the switch next to *With comments?* towards the *right position* to copy comments.
|
||||
* Move the switch next to *With compression?* towards the *right position* to copy
|
||||
compression method. This option is available only on PostgreSQL 14 and above.
|
||||
* Move the switch next to *With generated?* towards the *right position* to copy
|
||||
generation expressions of copied column. This option is available only on PostgreSQL 12 and above.
|
||||
* Move the switch next to *With identity?* towards the *right position* to copy
|
||||
any identity specifications of copied column.
|
||||
* Move the switch next to *With statistics?* towards the *right position* to copy
|
||||
extended statistics.
|
||||
|
||||
With PostgreSQL 10 forward, the *Partition* tab will be visible.
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ _create_python_virtualenv "debian"
|
||||
_build_runtime
|
||||
_build_docs "debian"
|
||||
_copy_code
|
||||
_generate_sbom
|
||||
|
||||
#
|
||||
# Server package
|
||||
@@ -77,7 +78,7 @@ Maintainer: pgAdmin Development Team <pgadmin-hackers@postgresql.org>
|
||||
Description: The desktop user interface for pgAdmin. pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.
|
||||
EOF
|
||||
|
||||
# Build the Debian package for the server
|
||||
# Build the Debian package for the desktop
|
||||
fakeroot dpkg-deb --build "${DESKTOPROOT}" "${DISTROOT}/${APP_NAME}-desktop_${APP_LONG_VERSION}_${OS_ARCH}.deb"
|
||||
|
||||
#
|
||||
|
||||
@@ -19,19 +19,18 @@ CA_FILE = '/etc/ssl/certs/ca-certificates.crt'
|
||||
LOG_FILE = '/dev/null'
|
||||
HELP_PATH = '../../docs'
|
||||
DEFAULT_BINARY_PATHS = {
|
||||
'pg': '/usr/local/pgsql-15',
|
||||
'pg': '/usr/local/pgsql-16',
|
||||
'pg-16': '/usr/local/pgsql-16',
|
||||
'pg-15': '/usr/local/pgsql-15',
|
||||
'pg-14': '/usr/local/pgsql-14',
|
||||
'pg-13': '/usr/local/pgsql-13',
|
||||
'pg-12': '/usr/local/pgsql-12',
|
||||
'pg-11': '/usr/local/pgsql-11',
|
||||
'pg-10': '/usr/local/pgsql-10'
|
||||
'pg-12': '/usr/local/pgsql-12'
|
||||
}
|
||||
EOF
|
||||
|
||||
# This is a bit kludgy, but necessary as the container uses BusyBox/ash as
|
||||
# it's shell and not bash which would allow a much cleaner implementation
|
||||
for var in $(env | grep PGADMIN_CONFIG_ | cut -d "=" -f 1); do
|
||||
for var in $(env | grep "^PGADMIN_CONFIG_" | cut -d "=" -f 1); do
|
||||
# shellcheck disable=SC2086
|
||||
# shellcheck disable=SC2046
|
||||
echo ${var#PGADMIN_CONFIG_} = $(eval "echo \$$var") >> /pgadmin4/config_distro.py
|
||||
|
||||
@@ -141,7 +141,11 @@ _build_runtime() {
|
||||
# YARN END
|
||||
|
||||
# WGET:
|
||||
NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
|
||||
# Comment out the below line as the latest version having some
|
||||
# problem https://github.com/nwjs/nw.js/issues/7964, so for the time being
|
||||
# hardcoded the version to 0.77.0
|
||||
# NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
|
||||
NW_VERSION="0.77.0"
|
||||
|
||||
pushd "${BUILDROOT}" > /dev/null || exit
|
||||
while true;do
|
||||
@@ -244,3 +248,11 @@ _copy_code() {
|
||||
rm python3 && ln -s "${PYTHON_INTERPRETER}" python3
|
||||
}
|
||||
|
||||
|
||||
_generate_sbom() {
|
||||
echo "Generating SBOMs..."
|
||||
# Note that we don't generate an SBOM for the Meta package as it doesn't contain any files.
|
||||
syft "${SERVERROOT}/" -o cyclonedx-json > "${SERVERROOT}/usr/${APP_NAME}/sbom-server.json"
|
||||
syft "${DESKTOPROOT}/" -o cyclonedx-json > "${DESKTOPROOT}/usr/${APP_NAME}/sbom-desktop.json"
|
||||
syft "${WEBROOT}/" -o cyclonedx-json > "${WEBROOT}/usr/${APP_NAME}/sbom-web.json"
|
||||
}
|
||||
@@ -41,7 +41,11 @@ _build_runtime() {
|
||||
# YARN END
|
||||
|
||||
# WGET:
|
||||
NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
|
||||
# Comment out the below line as the latest version having some
|
||||
# problem https://github.com/nwjs/nw.js/issues/7964, so for the time being
|
||||
# hardcoded the version to 0.77.0
|
||||
# NW_VERSION=$(yarn info nw | grep latest | awk -F "'" '{ print $2}')
|
||||
NW_VERSION="0.77.0"
|
||||
|
||||
pushd "${BUILD_ROOT}" > /dev/null || exit
|
||||
while true;do
|
||||
@@ -294,9 +298,10 @@ _complete_bundle() {
|
||||
cp -r "${SOURCE_DIR}/web" "${BUNDLE_DIR}/Contents/Resources/"
|
||||
cd "${BUNDLE_DIR}/Contents/Resources/web" || exit
|
||||
rm -f pgadmin4.db config_local.*
|
||||
rm -rf karma.conf.js package.json node_modules/ regression/ tools/ pgadmin/static/js/generated/.cache
|
||||
rm -rf karma.conf.js package.json .yarn* yarn* .editorconfig .eslint* node_modules/ regression/ tools/ pgadmin/static/js/generated/.cache
|
||||
find . -name "tests" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "feature_tests" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "__pycache__" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name ".DS_Store" -print0 | xargs -0 rm -f
|
||||
|
||||
{
|
||||
@@ -320,6 +325,11 @@ _complete_bundle() {
|
||||
chmod -R og-w "${BUNDLE_DIR}"
|
||||
}
|
||||
|
||||
_generate_sbom() {
|
||||
echo "Generating SBOM..."
|
||||
syft "${BUNDLE_DIR}/Contents/" -o cyclonedx-json > "${BUNDLE_DIR}/Contents/sbom.json"
|
||||
}
|
||||
|
||||
_codesign_binaries() {
|
||||
if [ "${CODESIGN}" -eq 0 ]; then
|
||||
return
|
||||
|
||||
@@ -66,6 +66,7 @@ _build_runtime
|
||||
_create_python_env
|
||||
_build_docs
|
||||
_complete_bundle
|
||||
_generate_sbom
|
||||
_codesign_binaries
|
||||
_codesign_bundle
|
||||
_create_dmg
|
||||
|
||||
@@ -22,10 +22,11 @@
|
||||
<string>%TEAMID%.org.pgadmin.pgadmin4</string>
|
||||
|
||||
<!--
|
||||
We have no need for JIT.
|
||||
We have no need for JIT on x86_64, but NWJS won't start without it
|
||||
on Apple Silicon.
|
||||
-->
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<false/>
|
||||
<true/>
|
||||
|
||||
<!--
|
||||
Explicitly disallow executable code overwriting/patching.
|
||||
@@ -61,4 +62,4 @@
|
||||
<key>com.apple.security.cs.debugger</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
</plist>
|
||||
@@ -92,6 +92,12 @@ do
|
||||
tar cf - ${FILE} | (cd pip-build/pgadmin4; tar xf -)
|
||||
done
|
||||
|
||||
# Generating SBOM
|
||||
echo Generating SBOM...
|
||||
cp requirements.txt pip-build/pgadmin4
|
||||
syft pip-build/pgadmin4 -o cyclonedx-json > pip-build/pgadmin4/sbom.json
|
||||
rm pip-build/pgadmin4/requirements.txt
|
||||
|
||||
# Create the distro config
|
||||
echo Creating distro config...
|
||||
echo HELP_PATH = \'../../docs/en_US/_build/html/\' > pip-build/pgadmin4/config_distro.py
|
||||
|
||||
@@ -48,7 +48,12 @@ for index, req in enumerate(all_requires):
|
||||
requires.append(req)
|
||||
|
||||
# Get the version
|
||||
config = load_source('APP_VERSION', '../web/config.py')
|
||||
path = '../web/'
|
||||
if not os.path.exists(path):
|
||||
print("ERROR: Could not find %s" % path)
|
||||
sys.exit(1)
|
||||
sys.path.append(path)
|
||||
import config
|
||||
|
||||
setup(
|
||||
name='pgadmin4',
|
||||
|
||||
@@ -26,6 +26,7 @@ _create_python_virtualenv "redhat"
|
||||
_build_runtime
|
||||
_build_docs "redhat"
|
||||
_copy_code
|
||||
_generate_sbom
|
||||
|
||||
# Get an RPM-compatible version number
|
||||
RPM_VERSION=${APP_RELEASE}.${APP_REVISION}
|
||||
@@ -127,6 +128,7 @@ cp -rfa %{pga_build_root}/desktop/* \${RPM_BUILD_ROOT}
|
||||
/usr/share/icons/hicolor/32x32/apps/*
|
||||
/usr/share/icons/hicolor/16x16/apps/*
|
||||
/usr/share/applications/*
|
||||
/usr/pgadmin4/sbom-desktop.json
|
||||
EOF
|
||||
|
||||
# Build the Redhat package for the server
|
||||
@@ -168,6 +170,7 @@ cp -rfa %{pga_build_root}/web/* \${RPM_BUILD_ROOT}
|
||||
%files
|
||||
/usr/pgadmin4/bin/*
|
||||
%config(noreplace) /etc/httpd/conf.d/*
|
||||
/usr/pgadmin4/sbom-web.json
|
||||
EOF
|
||||
|
||||
mkdir -p "${WEBROOT}/etc/httpd/conf.d"
|
||||
|
||||
@@ -27,11 +27,12 @@ pytz==2023.*
|
||||
speaklater3==1.*
|
||||
sqlparse==0.*
|
||||
psutil==5.9.*
|
||||
psycopg[c]==3.1.9
|
||||
psycopg[c]==3.1.12
|
||||
python-dateutil==2.*
|
||||
SQLAlchemy==2.*
|
||||
bcrypt==4.0.*
|
||||
cryptography==41.0.*
|
||||
# Pinned for #6718
|
||||
cryptography==40.0.*
|
||||
sshtunnel==0.*
|
||||
ldap3==2.*
|
||||
gssapi==1.8.*
|
||||
@@ -42,7 +43,6 @@ pywinpty==2.0.*; sys_platform=="win32"
|
||||
Authlib==1.2.*
|
||||
pyotp==2.*
|
||||
qrcode==7.*
|
||||
Pillow==9.*
|
||||
boto3==1.28.*
|
||||
botocore==1.31.*
|
||||
urllib3==1.26.*
|
||||
@@ -53,4 +53,4 @@ azure-identity==1.13.0
|
||||
google-api-python-client==2.*
|
||||
google-auth-oauthlib==1.0.0
|
||||
Werkzeug==2.2.3
|
||||
keyring==23.*
|
||||
keyring==23.*
|
||||
@@ -23,12 +23,12 @@
|
||||
"256": "assets/pgAdmin4.png"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^1.4.0",
|
||||
"axios": "^1.5.1",
|
||||
"bootstrap": "^4.5.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^8.42.0",
|
||||
"nw": "^0.77.0"
|
||||
"eslint": "^8.50.0",
|
||||
"nw": "0.77.0"
|
||||
},
|
||||
"scripts": {
|
||||
"linter": "yarn eslint --no-eslintrc -c .eslintrc.js --ext .js ."
|
||||
|
||||
@@ -22,6 +22,13 @@ root = os.path.dirname(os.path.realpath(__file__))
|
||||
if sys.path[0] != root:
|
||||
sys.path.insert(0, root)
|
||||
|
||||
# The config database connection pool size.
|
||||
# Setting this to 0 will remove any limit.
|
||||
CONFIG_DATABASE_CONNECTION_POOL_SIZE = 5
|
||||
# The number of connections allowed to overflow beyond
|
||||
# the connection pool size.
|
||||
CONFIG_DATABASE_CONNECTION_MAX_OVERFLOW = 100
|
||||
|
||||
from pgadmin.utils import env, IS_WIN, fs_short_path
|
||||
|
||||
##########################################################################
|
||||
@@ -43,7 +50,7 @@ APP_ICON = 'pg-icon'
|
||||
|
||||
# Application version number components
|
||||
APP_RELEASE = 7
|
||||
APP_REVISION = 5
|
||||
APP_REVISION = 8
|
||||
|
||||
# Application version suffix, e.g. 'beta1', 'dev'. Usually an empty string
|
||||
# for GA releases.
|
||||
@@ -52,7 +59,7 @@ APP_SUFFIX = ''
|
||||
# Numeric application version for upgrade checks. Should be in the format:
|
||||
# [X]XYYZZ, where X is the release version, Y is the revision, with a leading
|
||||
# zero if needed, and Z represents the suffix, with a leading zero if needed
|
||||
APP_VERSION_INT = 70500
|
||||
APP_VERSION_INT = 70800
|
||||
|
||||
# DO NOT CHANGE!
|
||||
# The application version string, constructed from the components
|
||||
@@ -470,19 +477,17 @@ STORAGE_DIR = os.path.join(DATA_DIR, 'storage')
|
||||
##########################################################################
|
||||
DEFAULT_BINARY_PATHS = {
|
||||
"pg": "",
|
||||
"pg-10": "",
|
||||
"pg-11": "",
|
||||
"pg-12": "",
|
||||
"pg-13": "",
|
||||
"pg-14": "",
|
||||
"pg-15": "",
|
||||
"pg-16": "",
|
||||
"ppas": "",
|
||||
"ppas-10": "",
|
||||
"ppas-11": "",
|
||||
"ppas-12": "",
|
||||
"ppas-13": "",
|
||||
"ppas-14": "",
|
||||
"ppas-15": ""
|
||||
"ppas-15": "",
|
||||
"ppas-16": ""
|
||||
}
|
||||
|
||||
##########################################################################
|
||||
@@ -786,6 +791,30 @@ OAUTH2_CONFIG = [
|
||||
'OAUTH2_ICON': None,
|
||||
# UI button colour, ex: #0000ff
|
||||
'OAUTH2_BUTTON_COLOR': None,
|
||||
# The additional claims to check on user ID Token. This is useful to
|
||||
# provide additional authorization checks before allowing access.
|
||||
# Example for GitLab: allowing all maintainers teams, and a specific
|
||||
# developers group to access pgadmin:
|
||||
# 'OAUTH2_ADDITIONAL_CLAIMS': {
|
||||
# 'https://gitlab.org/claims/groups/maintainer': [
|
||||
# 'kuberheads/applications',
|
||||
# 'kuberheads/dba',
|
||||
# 'kuberheads/support'
|
||||
# ],
|
||||
# 'https://gitlab.org/claims/groups/developer': [
|
||||
# 'kuberheads/applications/team01'
|
||||
# ],
|
||||
# }
|
||||
# Example for AzureAD:
|
||||
# 'OAUTH2_ADDITIONAL_CLAIMS': {
|
||||
# 'groups': ["0760b6cf-170e-4a14-91b3-4b78e0739963"],
|
||||
# 'wids': ["cf1c38e5-3621-4004-a7cb-879624dced7c"],
|
||||
# }
|
||||
# Example for any key value string check:
|
||||
# 'OAUTH2_ADDITIONAL_CLAIMS': {
|
||||
# 'group': "0760b6cf-170e-4a14-91b3-4b78e0739963",
|
||||
# }
|
||||
'OAUTH2_ADDITIONAL_CLAIMS': None,
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2023, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
"""Add support for prepare_threshold param
|
||||
https://www.psycopg.org/psycopg3/docs/advanced/prepare.html#prepared-statements
|
||||
|
||||
Revision ID: 44b9ce549393
|
||||
Revises: 9426ad06a63b
|
||||
Create Date: 2023-10-12 12:15:01.757931
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '44b9ce549393'
|
||||
down_revision = '9426ad06a63b'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
with op.batch_alter_table(
|
||||
"server", table_kwargs={'sqlite_autoincrement': True}) as batch_op:
|
||||
batch_op.add_column(sa.Column('prepare_threshold', sa.Integer(),
|
||||
nullable=True))
|
||||
|
||||
with op.batch_alter_table("sharedserver") as batch_op:
|
||||
batch_op.add_column(sa.Column('prepare_threshold', sa.Integer(),
|
||||
nullable=True))
|
||||
|
||||
# get metadata from current connection
|
||||
meta = sa.MetaData()
|
||||
# define table representation
|
||||
meta.reflect(op.get_bind(), only=('server', 'sharedserver'))
|
||||
table = sa.Table('server', meta)
|
||||
op.execute(
|
||||
table.update().values(prepare_threshold=5)
|
||||
)
|
||||
table = sa.Table('sharedserver', meta)
|
||||
op.execute(
|
||||
table.update().values(prepare_threshold=5)
|
||||
)
|
||||
|
||||
def downgrade():
|
||||
# pgAdmin only upgrades, downgrade not implemented.
|
||||
pass
|
||||
@@ -0,0 +1,40 @@
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2023, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
""" Add the new column for shared server username and change
|
||||
autoincrement in server table
|
||||
Revision ID: 9426ad06a63b
|
||||
Revises: f656e56dfdc8
|
||||
Create Date: 2023-10-09 15:09:50.773035
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '9426ad06a63b'
|
||||
down_revision = 'f656e56dfdc8'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# Added sqlite_autoincrement to force sqlite use auto increment instead of
|
||||
# last row id for next record. For future server table changes, we need to
|
||||
# add table_kwargs={'sqlite_autoincrement': True} as a param to
|
||||
# batch_alter_table
|
||||
with op.batch_alter_table(
|
||||
"server", table_kwargs={'sqlite_autoincrement': True}) as batch_op:
|
||||
batch_op.alter_column('id', autoincrement=True)
|
||||
batch_op.add_column(sa.Column('shared_username', sa.String(64), nullable=True))
|
||||
|
||||
|
||||
def downgrade():
|
||||
# pgAdmin only upgrades, downgrade not implemented.
|
||||
pass
|
||||
@@ -35,15 +35,14 @@
|
||||
"css-minimizer-webpack-plugin": "^5.0.0",
|
||||
"enzyme": "^3.11.0",
|
||||
"eslint": "^8.37.0",
|
||||
"eslint-plugin-react": "^7.32.2",
|
||||
"eslint-plugin-react": "^7.33.2",
|
||||
"eslint-plugin-react-hooks": "^4.3.0",
|
||||
"exports-loader": "^4.0.0",
|
||||
"html-react-parser": "^1.2.7",
|
||||
"html-react-parser": "^4.2.0",
|
||||
"image-minimizer-webpack-plugin": "^3.8.2",
|
||||
"imagemin": "^8.0.1",
|
||||
"imagemin-mozjpeg": "^10.0.0",
|
||||
"imagemin-optipng": "^8.0.0",
|
||||
"imagemin-pngquant": "^9.0.2",
|
||||
"imports-loader": "^4.0.1",
|
||||
"is-docker": "^2.1.1",
|
||||
"istanbul-instrumenter-loader": "^3.0.1",
|
||||
@@ -77,7 +76,7 @@
|
||||
"typescript": "^3.2.2",
|
||||
"url-loader": "^4.1.1",
|
||||
"webfonts-loader": "^8.0.1",
|
||||
"webpack": "^5.76.3",
|
||||
"webpack": "^5.88.2",
|
||||
"webpack-bundle-analyzer": "^4.8.0",
|
||||
"webpack-cli": "^4.5.0",
|
||||
"yarn-audit-html": "4.0.0"
|
||||
@@ -101,7 +100,7 @@
|
||||
"ajv": "^8.8.2",
|
||||
"anti-trojan-source": "^1.4.0",
|
||||
"aspen-decorations": "^1.0.2",
|
||||
"axios": "^0.21.1",
|
||||
"axios": "^1.4.0",
|
||||
"babelify": "~10.0.0",
|
||||
"bignumber.js": "^9.0.1",
|
||||
"bootstrap": "^4.3.1",
|
||||
@@ -117,7 +116,7 @@
|
||||
"dagre": "^0.8.4",
|
||||
"date-fns": "^2.24.0",
|
||||
"diff-arrays-of-objects": "^1.1.8",
|
||||
"html2canvas": "^1.0.0-rc.7",
|
||||
"html-to-image": "^1.11.11",
|
||||
"immutability-helper": "^3.0.0",
|
||||
"insert-if": "^1.1.0",
|
||||
"ip-address": "^7.1.0",
|
||||
@@ -138,10 +137,11 @@
|
||||
"pathfinding": "^0.4.18",
|
||||
"paths-js": "^0.4.9",
|
||||
"popper.js": "^1.16.1",
|
||||
"postcss": "^8.2.15",
|
||||
"postcss": "^8.4.31",
|
||||
"raf": "^3.4.1",
|
||||
"rc-dock": "^3.2.9",
|
||||
"react": "^17.0.1",
|
||||
"react-arborist": "^3.2.0",
|
||||
"react-aspen": "^1.1.0",
|
||||
"react-checkbox-tree": "^1.7.2",
|
||||
"react-data-grid": "https://github.com/pgadmin-org/react-data-grid.git#200d2f5e02de694e3e9ffbe177c279bc40240fb8",
|
||||
|
||||
@@ -13,8 +13,6 @@ import sys
|
||||
if sys.version_info < (3, 4):
|
||||
raise Exception('This application must be run under Python 3.4 or later.')
|
||||
|
||||
os.environ['SCRIPT_NAME'] = '/pgadmin4'
|
||||
|
||||
import builtins
|
||||
|
||||
root = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
@@ -24,7 +24,7 @@ def get_my_ip():
|
||||
except Exception:
|
||||
external_ip = '127.0.0.1'
|
||||
|
||||
if type(external_ip) == bytes:
|
||||
if isinstance(external_ip, bytes):
|
||||
external_ip = external_ip.decode('utf-8')
|
||||
|
||||
ip = ipaddress.ip_address(external_ip)
|
||||
|
||||
@@ -18,15 +18,15 @@ from flask import current_app, flash, Response, request, url_for, \
|
||||
session, redirect, render_template
|
||||
from flask_babel import gettext
|
||||
from flask_security.views import _security, _ctx
|
||||
from flask_security.utils import get_post_logout_redirect, logout_user,\
|
||||
config_value
|
||||
from flask_security.utils import logout_user, config_value
|
||||
|
||||
from flask_login import current_user
|
||||
from flask_socketio import disconnect, ConnectionRefusedError
|
||||
|
||||
|
||||
from pgadmin.model import db, User
|
||||
from pgadmin.utils import PgAdminModule, get_safe_post_login_redirect
|
||||
from pgadmin.utils import PgAdminModule, get_safe_post_login_redirect, \
|
||||
get_safe_post_logout_redirect
|
||||
from pgadmin.utils.constants import KERBEROS, INTERNAL, OAUTH2, LDAP,\
|
||||
MessageType
|
||||
from pgadmin.authenticate.registry import AuthSourceRegistry
|
||||
@@ -135,7 +135,7 @@ def _login():
|
||||
'Administrator.'),
|
||||
MessageType.WARNING)
|
||||
logout_user()
|
||||
return redirect(get_post_logout_redirect())
|
||||
return redirect(get_safe_post_logout_redirect())
|
||||
|
||||
# Validate the user
|
||||
if not auth_obj.validate():
|
||||
@@ -161,7 +161,7 @@ def _login():
|
||||
flash_login_attempt_error = None
|
||||
flash(error, MessageType.WARNING)
|
||||
|
||||
return redirect(get_post_logout_redirect())
|
||||
return redirect(get_safe_post_logout_redirect())
|
||||
|
||||
# Authenticate the user
|
||||
status, msg = auth_obj.authenticate()
|
||||
@@ -177,7 +177,7 @@ def _login():
|
||||
'authenticate.kerberos_login'), url_for('browser.index')))
|
||||
|
||||
flash(msg, MessageType.ERROR)
|
||||
return redirect(get_post_logout_redirect())
|
||||
return redirect(get_safe_post_logout_redirect())
|
||||
|
||||
session['auth_source_manager'] = current_auth_obj
|
||||
|
||||
|
||||
@@ -154,7 +154,7 @@ class TOTPAuthenticator(BaseMFAuth):
|
||||
|
||||
img = qrcode.make(uri)
|
||||
buffered = BytesIO()
|
||||
img.save(buffered, format="JPEG")
|
||||
img.save(buffered)
|
||||
img_base64 = base64.b64encode(buffered.getvalue())
|
||||
|
||||
return dict(
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
'actionUrl': url_for('mfa.validate'),
|
||||
'views': views,
|
||||
'logoutUrl': logout_url,
|
||||
'sendEmailUrl': url_for("mfa.send_email_code"),
|
||||
'sendEmailUrl': send_email_url,
|
||||
'csrfHeader': current_app.config.get("WTF_CSRF_HEADERS")[0],
|
||||
'csrfToken': csrf_token()
|
||||
} %}
|
||||
|
||||
@@ -24,7 +24,7 @@ def check_validation_view_content(test):
|
||||
]
|
||||
|
||||
def mock_log_exception(ex):
|
||||
test.assertTrue(type(ex) == ValidationException)
|
||||
test.assertTrue(isinstance(ex, ValidationException))
|
||||
|
||||
with patch(
|
||||
__MFA_PACKAGE + ".utils.current_user", return_value=MockCurrentUserId()
|
||||
|
||||
@@ -160,7 +160,7 @@ def mfa_enabled(execute_if_enabled, execute_if_disabled) -> None:
|
||||
supported_methods = getattr(config, "MFA_SUPPORTED_METHODS", [])
|
||||
|
||||
if is_server_mode is True and enabled is True and \
|
||||
type(supported_methods) == list:
|
||||
isinstance(supported_methods, list):
|
||||
supported_methods, _ = segregate_valid_and_invalid_mfa_methods(
|
||||
supported_methods
|
||||
)
|
||||
|
||||
@@ -134,9 +134,14 @@ def validate_view() -> Response:
|
||||
if mfa_method is None and len(mfa_views) > 0:
|
||||
list(mfa_views.items())[0][1]['selected'] = True
|
||||
|
||||
send_email_url = None
|
||||
if 'email' in mfa_views:
|
||||
send_email_url = url_for("mfa.send_email_code")
|
||||
|
||||
return Response(render_template(
|
||||
"mfa/validate.html", _=_, views=mfa_views, base64=base64,
|
||||
logout_url=get_logout_url()
|
||||
logout_url=get_logout_url(),
|
||||
send_email_url=send_email_url
|
||||
), return_code, headers=_NO_CACHE_HEADERS, mimetype="text/html")
|
||||
|
||||
|
||||
|
||||