Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
73fefb8603 | ||
|
|
af6c1a24cf | ||
|
|
cfca6f6218 | ||
|
|
c001b7b50a | ||
|
|
bd259cda42 | ||
|
|
75be0bc22d | ||
|
|
1305d9910b | ||
|
|
6a850fff10 | ||
|
|
6b9f002366 | ||
|
|
0eb8d6c8d6 | ||
|
|
8a2a5fda1d | ||
|
|
a2b35b35f3 | ||
|
|
f250f5de5e | ||
|
|
fa60ab0f6a | ||
|
|
1d3e0a4455 | ||
|
|
82c5febde6 | ||
|
|
0914ec24ad | ||
|
|
57d757d4de | ||
|
|
7edaac1da7 | ||
|
|
9ab451e163 | ||
|
|
213be44e29 | ||
|
|
cb597d0acb | ||
|
|
badc6f33bf | ||
|
|
a5993549b8 | ||
|
|
13b44fffc7 | ||
|
|
fc1a1610a3 | ||
|
|
47eca9a19c | ||
|
|
f635df6ccf | ||
|
|
b2669930f5 | ||
|
|
f25cde8c5f | ||
|
|
797bdb8696 | ||
|
|
c80be9b3a3 | ||
|
|
84e2b844e0 | ||
|
|
be534be674 | ||
|
|
846d0eafe6 | ||
|
|
cd179a3e9f | ||
|
|
2d10e95311 | ||
|
|
f9af74529c | ||
|
|
8c9ab2afd9 | ||
|
|
708a570ba0 | ||
|
|
074db05f7a | ||
|
|
73b437c0f5 | ||
|
|
df5dced926 | ||
|
|
1590df8dfd | ||
|
|
5ee33cf162 | ||
|
|
7a25da9b06 | ||
|
|
d7faa85338 | ||
|
|
cf2328d2cd | ||
|
|
4e52a8664c | ||
|
|
7bae1eb663 | ||
|
|
4791897578 | ||
|
|
1cbdb435df | ||
|
|
b59495603a | ||
|
|
58f86a3c32 | ||
|
|
adcf089357 | ||
|
|
636821f2ac | ||
|
|
b983b094a3 | ||
|
|
53077b6c04 | ||
|
|
a0ddfad655 | ||
|
|
39f92ffae4 | ||
|
|
84a5467a5e | ||
|
|
35d6277f00 | ||
|
|
85290d4e61 | ||
|
|
48a26e8979 | ||
|
|
53a8cac7f8 | ||
|
|
96128f6a15 | ||
|
|
e2a80b2465 | ||
|
|
6dd91c8277 | ||
|
|
83ade5dcc2 | ||
|
|
5c257fe1b9 | ||
|
|
740a50680e | ||
|
|
706eec0d5b | ||
|
|
f63190dc93 | ||
|
|
58bb14253e | ||
|
|
eb7c3ef361 | ||
|
|
2c37ff2893 | ||
|
|
a30a722e11 | ||
|
|
650a15beec | ||
|
|
2fc65589c8 | ||
|
|
bf7f8cdd73 | ||
|
|
ae76ea3585 | ||
|
|
0b46bdf901 | ||
|
|
b02e210c68 | ||
|
|
e6d2334753 | ||
|
|
9f4ce1e7d1 | ||
|
|
efd0dd2ac0 | ||
|
|
b90a390d5c | ||
|
|
2f495006ea | ||
|
|
dd09986f71 | ||
|
|
41873de29e | ||
|
|
92c9e59c1f | ||
|
|
d5101b7568 | ||
|
|
e7888c5265 | ||
|
|
ebeb768a53 | ||
|
|
228156d0b6 | ||
|
|
1607875a08 | ||
|
|
707d0372ba | ||
|
|
1317e5a921 | ||
|
|
1e00611792 | ||
|
|
22b7ae6cdc | ||
|
|
684818def1 | ||
|
|
5ee0328063 | ||
|
|
ab98e5f6bb | ||
|
|
84a8a522e3 | ||
|
|
133a59c71b | ||
|
|
168aaa227a | ||
|
|
74e776ba21 | ||
|
|
90eff9a596 | ||
|
|
cd86ce08cf | ||
|
|
7e20bf5b75 | ||
|
|
98f6b1ff12 | ||
|
|
a410b15e30 | ||
|
|
72a3ed9068 | ||
|
|
1be0ff13db | ||
|
|
1216f075ce | ||
|
|
99e1f005fc | ||
|
|
bf69b16f1f | ||
|
|
36df6d5c8a | ||
|
|
a9974b418c | ||
|
|
de6fbe7725 | ||
|
|
172edaa227 | ||
|
|
bac50e10f0 | ||
|
|
b9c7e7e9af | ||
|
|
8c461ffb86 | ||
|
|
1934a75eee | ||
|
|
90cdeeff0a | ||
|
|
6d45dd4491 | ||
|
|
b22bfdf74b | ||
|
|
6dab60d9e4 | ||
|
|
657bf08fb8 | ||
|
|
ff1d9e20d1 | ||
|
|
d03553be7a | ||
|
|
5dc52446f3 | ||
|
|
eb517e6df8 | ||
|
|
621d66fb57 | ||
|
|
964d211260 | ||
|
|
c83d997f2f | ||
|
|
7a9a45b065 | ||
|
|
700ecaef4a | ||
|
|
19c8fcd775 | ||
|
|
bcd6f3f429 | ||
|
|
92e531db02 | ||
|
|
f81c546069 | ||
|
|
68f41dd5c6 | ||
|
|
1be9dd4033 | ||
|
|
0c6776b713 | ||
|
|
9cd8492ec1 | ||
|
|
6df5d14a60 | ||
|
|
91881ad6d3 | ||
|
|
e011ad02a5 | ||
|
|
fdf5d12196 | ||
|
|
8af25ba0c1 | ||
|
|
2ba4f79a46 | ||
|
|
185e0f61e2 | ||
|
|
e84f4cd35b | ||
|
|
eef20dc5a9 | ||
|
|
0b65dcd4ef | ||
|
|
ba58b140d4 | ||
|
|
a0cd6c6a88 | ||
|
|
776e092a89 | ||
|
|
fe6e21a08b | ||
|
|
4e2fd404c0 | ||
|
|
ae9d324f8f | ||
|
|
6f8fb6f49d | ||
|
|
52d6017ce5 |
No files matched your search
@@ -21,7 +21,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
pgver: [12, 13, 14, 15, 16]
|
||||
pgver: [13, 14, 15, 16, 17]
|
||||
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
@@ -35,7 +35,12 @@ jobs:
|
||||
- name: Install platform dependencies
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev edb-as${{ matrix.pgver }}-server edb-as${{ matrix.pgver }}-server-pldebugger edb-as${{ matrix.pgver }}-pgagent
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev edb-as${{ matrix.pgver }}-server edb-as${{ matrix.pgver }}-server-pldebugger
|
||||
|
||||
- name: Install pgagent on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver <= 16 }}
|
||||
run: |
|
||||
sudo apt install -y edb-as${{ matrix.pgver }}-pgagent
|
||||
|
||||
- name: Create the tablespace directory
|
||||
run: |
|
||||
@@ -56,7 +61,9 @@ jobs:
|
||||
sleep 2
|
||||
done
|
||||
|
||||
psql -U enterprisedb -d postgres -p 58${{ matrix.pgver }} -c 'CREATE EXTENSION IF NOT EXISTS pgagent;'
|
||||
- name: Create pgagent extension on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver <= 16 }}
|
||||
run: psql -U enterprisedb -d postgres -p 58${{ matrix.pgver }} -c 'CREATE EXTENSION IF NOT EXISTS pgagent;'
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: make install-python-testing
|
||||
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
pgver: [12, 13, 14, 15, 16]
|
||||
pgver: [13, 14, 15, 16, 17]
|
||||
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
@@ -32,6 +32,18 @@ jobs:
|
||||
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
|
||||
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
||||
|
||||
- name: Uninstall PostgreSQL if already present
|
||||
run: |
|
||||
if [ -n "$(ls /etc/postgresql/*/*/postgresql.conf 2>/dev/null)" ]; then
|
||||
# Extract the major version from pg_config
|
||||
installed_pg_version=$( pg_config --version | cut -d ' ' -f 2 | cut -d '.' -f 1 )
|
||||
echo "Installed PostgreSQL version: $installed_pg_version"
|
||||
if [ $installed_pg_version != ${{ matrix.pgver }} ]; then
|
||||
sudo pg_dropcluster $installed_pg_version main --stop
|
||||
sudo apt-get -y remove "postgresql-${installed_pg_version}"
|
||||
fi
|
||||
fi
|
||||
|
||||
- name: Install platform dependencies
|
||||
run: |
|
||||
sudo apt update
|
||||
|
||||
@@ -32,7 +32,7 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-22.04, windows-latest]
|
||||
pgver: [12, 13, 14, 15, 16]
|
||||
pgver: [13, 14, 15, 16, 17]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
@@ -48,7 +48,12 @@ jobs:
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev edb-as${{ matrix.pgver }}-server edb-as${{ matrix.pgver }}-server-pldebugger edb-as${{ matrix.pgver }}-pgagent
|
||||
sudo apt install -y libpq-dev libffi-dev libssl-dev libkrb5-dev zlib1g-dev edb-as${{ matrix.pgver }}-server edb-as${{ matrix.pgver }}-server-pldebugger
|
||||
|
||||
- name: Install pgagent on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver <= 16 }}
|
||||
run: |
|
||||
sudo apt install -y edb-as${{ matrix.pgver }}-pgagent
|
||||
|
||||
- name: Install platform dependencies on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
@@ -77,7 +82,7 @@ jobs:
|
||||
shell: cmd
|
||||
|
||||
- name: Add edb_job_scheduler into config file.
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver == 16 }}
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver >= 16 }}
|
||||
run: |
|
||||
sudo sed -i "s/shared_preload_libraries = '/shared_preload_libraries = '\$libdir\/edb_job_scheduler,/g" /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf
|
||||
sudo su -c "echo \"edb_job_scheduler.database_list = 'test_dbms_job_scheduler'\" >> /etc/edb-as/${{ matrix.pgver }}/main/postgresql.conf"
|
||||
@@ -96,8 +101,10 @@ jobs:
|
||||
>&2 echo "EPAS is unavailable - sleeping for 2 seconds"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
psql -U enterprisedb -d postgres -p 58${{ matrix.pgver }} -c 'CREATE EXTENSION IF NOT EXISTS pgagent;'
|
||||
|
||||
- name: Create pgagent extension on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' && matrix.pgver <= 16 }}
|
||||
run: psql -U enterprisedb -d postgres -p 58${{ matrix.pgver }} -c 'CREATE EXTENSION IF NOT EXISTS pgagent;'
|
||||
|
||||
- name: Install Python dependencies on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
|
||||
@@ -21,7 +21,7 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-22.04, windows-latest]
|
||||
pgver: [12, 13, 14, 15, 16]
|
||||
pgver: [13, 14, 15, 16, 17]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
@@ -34,6 +34,19 @@ jobs:
|
||||
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
|
||||
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
||||
|
||||
- name: Uninstall PostgreSQL if already present on linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
if [ -n "$(ls /etc/postgresql/*/*/postgresql.conf 2>/dev/null)" ]; then
|
||||
# Extract the major version from pg_config
|
||||
installed_pg_version=$( pg_config --version | cut -d ' ' -f 2 | cut -d '.' -f 1 )
|
||||
echo "Installed PostgreSQL version: $installed_pg_version"
|
||||
if [ $installed_pg_version != ${{ matrix.pgver }} ]; then
|
||||
sudo pg_dropcluster $installed_pg_version main --stop
|
||||
sudo apt-get -y remove "postgresql-${installed_pg_version}"
|
||||
fi
|
||||
fi
|
||||
|
||||
- name: Install platform dependencies on Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
run: |
|
||||
@@ -46,7 +59,7 @@ jobs:
|
||||
brew install postgresql@${{ matrix.pgver }}
|
||||
echo "/opt/homebrew/opt/postgresql@${{ matrix.pgver }}/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Uninstall PostgreSQL if already present
|
||||
- name: Uninstall PostgreSQL if already present on windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
run: |
|
||||
if exist "C:\Program Files\PostgreSQL\{{ matrix.pgver }}\uninstall-postgresql.exe" (
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
3.8.0
|
||||
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
#########################################################################
|
||||
@@ -173,12 +173,12 @@ COPY --from=env-builder /venv /venv
|
||||
COPY --from=tool-builder /usr/local/pgsql /usr/local/
|
||||
COPY --from=pg17-builder /usr/local/lib/libpq.so.5.17 /usr/lib/
|
||||
COPY --from=pg17-builder /usr/lib/libzstd.so.1.5.6 /usr/lib/
|
||||
COPY --from=pg17-builder /usr/lib/liblz4.so.1.9.4 /usr/lib/
|
||||
COPY --from=pg17-builder /usr/lib/liblz4.so.1.10.0 /usr/lib/
|
||||
|
||||
RUN ln -s libpq.so.5.17 /usr/lib/libpq.so.5 && \
|
||||
ln -s libpq.so.5.17 /usr/lib/libpq.so && \
|
||||
ln -s libzstd.so.1.5.6 /usr/lib/libzstd.so.1 && \
|
||||
ln -s liblz4.so.1.9.4 /usr/lib/liblz4.so.1
|
||||
ln -s liblz4.so.1.10.0 /usr/lib/liblz4.so.1
|
||||
|
||||
WORKDIR /pgadmin4
|
||||
ENV PYTHONPATH=/pgadmin4
|
||||
@@ -208,7 +208,7 @@ RUN apk add --no-cache \
|
||||
libedit \
|
||||
libldap \
|
||||
libcap && \
|
||||
/venv/bin/python3 -m pip install --no-cache-dir gunicorn==22.0.0 && \
|
||||
/venv/bin/python3 -m pip install --no-cache-dir gunicorn==23.0.0 && \
|
||||
find / -type d -name '__pycache__' -exec rm -rf {} + && \
|
||||
useradd -r -u 5050 -g root -s /sbin/nologin pgadmin && \
|
||||
mkdir -p /run/pgadmin /var/lib/pgadmin && \
|
||||
|
||||
@@ -4,7 +4,7 @@ pgAdmin 4
|
||||
This software is released under the PostgreSQL licence.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose, without fee, and without a written agreement is
|
||||
|
||||
@@ -52,7 +52,7 @@ REM Main build sequence Ends
|
||||
|
||||
:SET_ENVIRONMENT
|
||||
ECHO Configuring the environment...
|
||||
IF "%PGADMIN_PYTHON_DIR%" == "" SET "PGADMIN_PYTHON_DIR=C:\Python312"
|
||||
IF "%PGADMIN_PYTHON_DIR%" == "" SET "PGADMIN_PYTHON_DIR=C:\Python313"
|
||||
IF "%PGADMIN_KRB5_DIR%" == "" SET "PGADMIN_KRB5_DIR=C:\Program Files\MIT\Kerberos"
|
||||
IF "%PGADMIN_POSTGRES_DIR%" == "" SET "PGADMIN_POSTGRES_DIR=C:\Program Files\PostgreSQL\17"
|
||||
IF "%PGADMIN_INNOTOOL_DIR%" == "" SET "PGADMIN_INNOTOOL_DIR=C:\Program Files (x86)\Inno Setup 6"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
#########################################################################
|
||||
|
||||
@@ -15,33 +15,51 @@ and ReactJS, HTML5 with CSS for the client side processing and UI.
|
||||
Although developed using web technologies, pgAdmin 4 can be deployed either on
|
||||
a web server using a browser, or standalone on a workstation. The runtime/
|
||||
subdirectory contains an Electron based runtime application intended to allow this,
|
||||
which will execute the Python server and display the UI.
|
||||
which will fork a Python server process and display the UI.
|
||||
|
||||
## Building the Runtime
|
||||
## Prerequisites
|
||||
1. Install Node.js 20 and above (https://nodejs.org/en/download)
|
||||
2. yarn (https://yarnpkg.com/getting-started/install)
|
||||
3. Python 3.8 and above (https://www.python.org/downloads/)
|
||||
4. PostgreSQL server (https://www.postgresql.org/download)
|
||||
|
||||
To build the runtime, the following packages must be installed:
|
||||
Start by enabling Corepack, if it isn't already;
|
||||
this will add the yarn binary to your PATH:
|
||||
```bash
|
||||
corepack enable
|
||||
```
|
||||
|
||||
* NodeJS 16+
|
||||
* Yarn
|
||||
# Building the Web Assets
|
||||
|
||||
Change into the runtime directory, and run *yarn install*. This will install the
|
||||
dependencies required.
|
||||
pgAdmin is dependent on a number of third party Javascript libraries. These,
|
||||
along with it's own Javascript code, CSS code and images must be
|
||||
compiled into a "bundle" which is transferred to the browser for execution
|
||||
and rendering. This is far more efficient than simply requesting each
|
||||
asset as it's needed by the client.
|
||||
|
||||
In order to use the runtime in a development environment, you'll need to copy
|
||||
*dev_config.json.in* file to *dev_config.json*, and edit the paths to the Python
|
||||
executable and *pgAdmin.py* file, otherwise the runtime will use the default
|
||||
paths it would expect to find in the standard package for your platform.
|
||||
|
||||
You can then execute the runtime by running something like:
|
||||
To create the bundle, you will need the 'yarn' package management tool to be
|
||||
installed. Then, you can run the following commands on a *nix system to
|
||||
download the required packages and build the bundle:
|
||||
|
||||
```bash
|
||||
yarn run start
|
||||
(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
|
||||
```
|
||||
|
||||
# Configuring the Python Environment
|
||||
|
||||
In order to run the Python code, a suitable runtime environment is required.
|
||||
Python version 3.7 and later are currently supported. It is recommended that a
|
||||
Python version 3.8 and later are currently supported. It is recommended that a
|
||||
Python Virtual Environment is setup for this purpose, rather than using the
|
||||
system Python environment. On Linux and Mac systems, the process is fairly
|
||||
simple - adapt as required for your distribution:
|
||||
@@ -88,36 +106,44 @@ simple - adapt as required for your distribution:
|
||||
configuration may look like:
|
||||
|
||||
```python
|
||||
from config import *
|
||||
import os
|
||||
import logging
|
||||
|
||||
# Debug mode
|
||||
DEBUG = True
|
||||
# Change pgAdmin data directory
|
||||
DATA_DIR = '/Users/myuser/.pgadmin_dev'
|
||||
|
||||
# App mode
|
||||
SERVER_MODE = True
|
||||
#Change pgAdmin server and port
|
||||
DEFAULT_SERVER = '127.0.0.1'
|
||||
DEFAULT_SERVER_PORT = 5051
|
||||
|
||||
# Enable the test module
|
||||
MODULE_BLACKLIST.remove('test')
|
||||
# Switch between server and desktop mode
|
||||
SERVER_MODE = True
|
||||
|
||||
# Log
|
||||
CONSOLE_LOG_LEVEL = DEBUG
|
||||
FILE_LOG_LEVEL = DEBUG
|
||||
#Change pgAdmin config DB path in case external DB is used.
|
||||
CONFIG_DATABASE_URI="postgresql://postgres:postgres@localhost:5436/pgadmin"
|
||||
|
||||
DEFAULT_SERVER = '127.0.0.1'
|
||||
#Setup SMTP
|
||||
MAIL_SERVER = 'smtp.gmail.com'
|
||||
MAIL_PORT = 465
|
||||
MAIL_USE_SSL = True
|
||||
MAIL_USERNAME = 'user@gmail.com'
|
||||
MAIL_PASSWORD = 'xxxxxxxxxx'
|
||||
|
||||
UPGRADE_CHECK_ENABLED = True
|
||||
# Change log level
|
||||
CONSOLE_LOG_LEVEL = logging.INFO
|
||||
FILE_LOG_LEVEL = logging.INFO
|
||||
|
||||
# Use a different config DB for each server mode.
|
||||
if SERVER_MODE == False:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-desktop.db'
|
||||
)
|
||||
else:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-server.db'
|
||||
)
|
||||
# Use a different config DB for each server mode.
|
||||
if SERVER_MODE == False:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-desktop.db'
|
||||
)
|
||||
else:
|
||||
SQLITE_PATH = os.path.join(
|
||||
DATA_DIR,
|
||||
'pgadmin4-server.db'
|
||||
)
|
||||
```
|
||||
|
||||
This configuration allows easy switching between server and desktop modes
|
||||
@@ -137,9 +163,9 @@ simple - adapt as required for your distribution:
|
||||
(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.
|
||||
Whilst it is possible to automatically run setup in desktop mode by running
|
||||
the runtime, that will not work in server mode as the runtime doesn't allow
|
||||
command line interaction with the setup program.
|
||||
|
||||
At this point you will be able to run pgAdmin 4 from the command line in either
|
||||
server or desktop mode, and access it from a web browser using the URL shown in
|
||||
@@ -148,49 +174,6 @@ the terminal once pgAdmin has started up.
|
||||
Setup of an environment on Windows is somewhat more complicated unfortunately,
|
||||
please see *pkg/win32/README.txt* for complete details.
|
||||
|
||||
# Building the Web Assets
|
||||
|
||||
pgAdmin is dependent on a number of third party Javascript libraries. These,
|
||||
along with it's own Javascript code, SCSS/CSS code and images must be
|
||||
compiled into a "bundle" which is transferred to the browser for execution
|
||||
and rendering. This is far more efficient than simply requesting each
|
||||
asset as it's needed by the client.
|
||||
|
||||
To create the bundle, you will need the 'yarn' package management tool to be
|
||||
installed. Then, you can run the following commands on a *nix system to
|
||||
download the required packages and build the bundle:
|
||||
|
||||
```bash
|
||||
(venv) $ cd $PGADMIN4_SRC
|
||||
(venv) $ make install-node
|
||||
(venv) $ make bundle
|
||||
```
|
||||
|
||||
On Windows systems (where "make" is not available), the following commands
|
||||
can be used:
|
||||
|
||||
```
|
||||
C:\> cd $PGADMIN4_SRC\web
|
||||
C:\$PGADMIN4_SRC\web> yarn install
|
||||
C:\$PGADMIN4_SRC\web> yarn run bundle
|
||||
```
|
||||
|
||||
# Creating pgAdmin themes
|
||||
|
||||
To create a pgAdmin theme, you need to create a directory under
|
||||
*web/pgadmin/static/scss/resources*.
|
||||
Copy the sample file *_theme.variables.scss.sample* to the new directory and
|
||||
rename it to *_theme.variables.scss*. Change the desired hexadecimal values of
|
||||
the colors and bundle pgAdmin. You can also add a preview image in the theme
|
||||
directory with the name as *\<dir name>_preview.png*. It is recommended that the
|
||||
preview image should not be larger in size as it may take time to load on slow
|
||||
networks. Run the *yarn run bundle* and you're good to go. No other changes are
|
||||
required, pgAdmin bundle will read the directory and create other required
|
||||
entries to make them available in preferences.
|
||||
|
||||
The name of the theme is derived from the directory name. Underscores (_) and
|
||||
hyphens (-) will be replaced with spaces and the result will be camel cased.
|
||||
|
||||
# Building the documentation
|
||||
|
||||
In order to build the docs, an additional Python package is required in the
|
||||
@@ -210,6 +193,21 @@ The docs can then be built using the Makefile in *$PGADMIN4_SRC*, e.g.
|
||||
|
||||
The output can be found in *$PGADMIN4_SRC/docs/en_US/_build/html/index.html*
|
||||
|
||||
## Building the Runtime
|
||||
Change into the runtime directory, and run *yarn install*. This will install the
|
||||
dependencies required.
|
||||
|
||||
In order to use the runtime in a development environment, you'll need to copy
|
||||
*dev_config.json.in* file to *dev_config.json*, and edit the paths to the Python
|
||||
executable and *pgAdmin.py* file, otherwise the runtime will use the default
|
||||
paths it would expect to find in the standard package for your platform.
|
||||
|
||||
You can then execute the runtime by running something like:
|
||||
|
||||
```bash
|
||||
yarn run start
|
||||
```
|
||||
|
||||
# Building packages
|
||||
|
||||
Most packages can be built using the Makefile in $PGADMIN4_SRC, provided all
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Only the latest version receives security updates. Users are encouraged to upgrade to the latest stable release.
|
||||
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
We take security seriously and appreciate your efforts to responsibly disclose vulnerabilities. If you believe you have found a vulnerability, please follow the guidelines below to submit a report.
|
||||
|
||||
### **What to Include in Your Report**
|
||||
To help us quickly understand and address the issue, please include the following sections in your report:
|
||||
|
||||
#### 1. **Summary**
|
||||
- A brief description of the vulnerability.
|
||||
|
||||
#### 2. **Affected Versions**
|
||||
- The version(s) of the project affected by the vulnerability.
|
||||
- Example: "Affects versions 3.4.0 to 3.6.23."
|
||||
|
||||
#### 3. **Details**
|
||||
- A detailed explanation of the vulnerability, including:
|
||||
- How to reproduce the issue (step-by-step instructions).
|
||||
- The code or component where the vulnerability exists.
|
||||
- The expected vs. actual behavior.
|
||||
|
||||
#### 4. **Proof of Concept (PoC)**
|
||||
- Provide a proof of concept to demonstrate the vulnerability. This could be:
|
||||
- Code snippets.
|
||||
- Screenshots or videos.
|
||||
- A minimal reproducible example.
|
||||
|
||||
#### 5. **Patches (if applicable)**
|
||||
- If you have a suggested fix or patch, include it in your report.
|
||||
- Example: "Sanitize user input using `DOMPurify`."
|
||||
|
||||
#### 6. **Impact**
|
||||
- Describe the potential impact of the vulnerability, such as:
|
||||
- Remote Code Execution.
|
||||
- CSRF.
|
||||
- Data exposure.
|
||||
- Denial of service.
|
||||
|
||||
|
||||
|
||||
### **What to Expect**
|
||||
- **Acknowledgement**: You will receive an acknowledgement of your report within **48 hours**.
|
||||
- **Timeline**: We will provide a timeline for investigating and addressing the issue.
|
||||
- **Updates**: You will receive regular updates on the progress of the vulnerability resolution.
|
||||
- **CVE ID**: If the vulnerability is confirmed, we will request a CVE ID to acknowledge the issue officially and include it in the release notes.
|
||||
|
||||
|
||||
### **Out of Scope**
|
||||
The following issues are considered out of scope for security reports:
|
||||
- Vulnerabilities in outdated or unsupported versions.
|
||||
- Issues related to non-security-impacting bugs or feature requests.
|
||||
- Vulnerabilities requiring physical access to the device or social engineering.
|
||||
|
||||
|
||||
|
||||
## Security Updates
|
||||
|
||||
We are committed to providing timely security updates for supported versions. Here’s our process:
|
||||
1. **Assessment**:
|
||||
- All reported vulnerabilities are assessed for severity and impact.
|
||||
2. **Patch Development**:
|
||||
- Patches are developed and tested in a private repository to prevent premature disclosure.
|
||||
3. **Release**:
|
||||
- Security patches are released as soon as possible, along with a detailed advisory.
|
||||
|
||||
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
We deeply appreciate the efforts of security researchers and users who help us improve the security of our project.
|
||||
|
||||
|
||||
|
||||
## Contact
|
||||
|
||||
For any questions or concerns regarding security, please contact us at `security@pgadmin.org`.
|
||||
@@ -16,7 +16,7 @@ review process for any changes submitted for inclusion in pgAdmin.
|
||||
bulk updates every year). The start date should always be 2013, and the end year
|
||||
the current year, e.g.
|
||||
|
||||
Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
|
||||
* Ensure there's a blank line immediately following any copyright headers.
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ with the required file header is shown below::
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
@@ -53,11 +53,11 @@ The default binary paths set in the container are as follows:
|
||||
.. code-block:: bash
|
||||
|
||||
DEFAULT_BINARY_PATHS = {
|
||||
'pg-17': '/usr/local/pgsql-17',
|
||||
'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-13': '/usr/local/pgsql-13'
|
||||
}
|
||||
|
||||
this may be changed in the :ref:`preferences`.
|
||||
@@ -134,6 +134,14 @@ Override the default file path for the server definition list. See the
|
||||
/pgadmin4/servers.json mapped file below for more information. See the format
|
||||
of the `Servers JSON file <https://www.pgadmin.org/docs/pgadmin4/latest/import_export_servers.html#json-format>`_.
|
||||
|
||||
**PGADMIN_REPLACE_SERVERS_ON_STARTUP**
|
||||
|
||||
*Default: null*
|
||||
|
||||
By default, the server definitions are only loaded on first launch, i.e. when initializing the configuration database. See PGADMIN_SERVER_JSON_FILE above.
|
||||
|
||||
If this variable is set to True, the server definitions will be replaced on every launch. This can be used to declaratively manage the server definitions.
|
||||
|
||||
**PGADMIN_PREFERENCES_JSON_FILE**
|
||||
|
||||
*Default: /pgadmin4/preferences.json*
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
.. _directory_dialog:
|
||||
|
||||
*************************
|
||||
`Directory Dialog`:index:
|
||||
*************************
|
||||
|
||||
Use the Directory dialog to create an alias for a file system directory path.
|
||||
To create directories, you must have the CREATE ANY DIRECTORY system privilege.
|
||||
When you create a directory, you are automatically granted READ and WRITE privileges
|
||||
on the directory, and you can grant READ and WRITE privileges to other users and roles.
|
||||
The superuser can also grant these privileges to other users and roles.
|
||||
|
||||
Please note that directories are supported when connected to EDB Postgres Advanced Server.
|
||||
For more information about using directories, please see the EDB Postgres Advanced Server Guide, available at:
|
||||
|
||||
https://www.enterprisedb.com/docs/epas/latest/epas_compat_sql/
|
||||
|
||||
|
||||
The *Directory* dialog organizes the definition of a directory through the
|
||||
following tabs: *General*, *Definition*, *Security*, and *SQL*.
|
||||
The *SQL* tab displays the SQL code generated by dialog selections.
|
||||
|
||||
.. image:: images/directory_general.png
|
||||
:alt: Directory general tab
|
||||
:align: center
|
||||
|
||||
Use the fields on the *General* tab to specify directory attributes:
|
||||
|
||||
* Use the *Name* field to add a directory alias name. This name will be displayed in the object explorer.
|
||||
* Select the owner of the directory from the drop-down listbox in the *Owner*
|
||||
field.
|
||||
|
||||
Click the *Definition* tab to continue.
|
||||
|
||||
.. image:: images/directory_definition.png
|
||||
:alt: Directory dialog definition tab
|
||||
:align: center
|
||||
|
||||
* Use the *Location* field to specify a fully qualified directory path represented
|
||||
by the alias name. The CREATE DIRECTORY command doesn't create the operating system directory.
|
||||
The physical directory must be created independently using operating system commands.
|
||||
|
||||
Click the *Security* tab to continue.
|
||||
|
||||
.. image:: images/directory_security.png
|
||||
:alt: Directory dialog security tab
|
||||
:align: center
|
||||
|
||||
NOTE:- This *Security* tab will be only available for EPAS 17.
|
||||
|
||||
Use the *Security* tab to assign privileges for the directory.
|
||||
|
||||
Use the *Privileges* panel to assign security privileges. Click the *Add* icon
|
||||
(+) to assign a set of privileges:
|
||||
|
||||
* Select the name of the role from the drop-down listbox in the *Grantee* field.
|
||||
* The current user, who is the default grantor for granting the privilege, is displayed in the *Grantor* field.
|
||||
* Click inside the *Privileges* field. Check the boxes to the left of one or
|
||||
more privileges to grant the selected privileges to the specified user.
|
||||
|
||||
Click the *Add* icon to assign additional sets of privileges; to discard a
|
||||
privilege, click the trash icon to the left of the row and confirm deletion in
|
||||
the *Delete Row* popup.
|
||||
|
||||
Click the *SQL* tab to continue.
|
||||
|
||||
Your entries in the *Directory* dialog generate a SQL command (see an example
|
||||
below). Use the *SQL* tab for review; revisit or switch tabs to make any changes
|
||||
to the SQL command.
|
||||
|
||||
Example
|
||||
*******
|
||||
|
||||
The following is an example of the sql command generated by user selections in
|
||||
the *Directory* dialog:
|
||||
|
||||
.. image:: images/directory_sql.png
|
||||
:alt: Directory dialog sql tab
|
||||
:align: center
|
||||
|
||||
The example shown demonstrates creating a directory named *test1*. It has a
|
||||
*location* value equal to */home/test_dir*.
|
||||
|
||||
* Click the *Info* button (i) to access online help.
|
||||
* Click the *Save* button to save work.
|
||||
* Click the *Close* button to exit without saving work.
|
||||
* Click the *Reset* button to restore configuration parameters.
|
||||
@@ -207,6 +207,22 @@ The table node shows table details in a graphical representation:
|
||||
* you can click on the node and drag to move on the canvas.
|
||||
* Upon double click on the table node or by clicking the edit button from the toolbar, the table dialog opens where you can change the table details. Refer :ref:`table dialog <table_dialog>` for information on different fields.
|
||||
|
||||
The One to One Link Dialog
|
||||
***************************
|
||||
|
||||
.. image:: images/erd_11_dialog.png
|
||||
:alt: ERD tool 1-1 dialog
|
||||
:align: center
|
||||
|
||||
The one to one link dialog allows you to:
|
||||
|
||||
* Add a one to one relationship between two tables.
|
||||
* *Local Table* is the table that references a table and has the *one* end point.
|
||||
* *Local Column* the column that references.
|
||||
* *Select Constraint* To implement one to one relationship, the *Local Column* must have primaty key or unique constraint. The default is a unique constraint. Please note that this field is visible only when the selected *Local Column* does not have either of the mentioned constraints.
|
||||
* *Referenced Table* is the table that is being referred and has the *one* end point.
|
||||
* *Referenced Column* the column that is being referred.
|
||||
|
||||
The One to Many Link Dialog
|
||||
***************************
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 156 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 155 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 280 KiB |
|
Before Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 245 KiB After Width: | Height: | Size: 238 KiB |
|
Before Width: | Height: | Size: 193 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 183 KiB |
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 195 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 348 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 361 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 124 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 98 KiB |
@@ -148,41 +148,50 @@ The following example shows both a minimally defined and a fully defined server:
|
||||
"Port": 5432,
|
||||
"Username": "postgres",
|
||||
"Host": "localhost",
|
||||
"SSLMode": "prefer",
|
||||
"MaintenanceDB": "postgres"
|
||||
"MaintenanceDB": "postgres",
|
||||
"ConnectionParameters": {
|
||||
"sslmode": "prefer",
|
||||
"connect_timeout": 10
|
||||
}
|
||||
},
|
||||
"2": {
|
||||
"Name": "Fully Defined Server",
|
||||
"Group": "Server Group 2",
|
||||
"Host": "host.domain.com",
|
||||
"HostAddr": "192.168.1.2",
|
||||
"Port": 5432,
|
||||
"MaintenanceDB": "postgres",
|
||||
"Username": "postgres",
|
||||
"Role": "my_role_name",
|
||||
"SSLMode": "require",
|
||||
"Comment": "This server has every option configured in the JSON",
|
||||
"DBRestriction": "live_db test_db",
|
||||
"PassFile": "/path/to/pgpassfile",
|
||||
"SSLCert": "/path/to/sslcert.crt",
|
||||
"SSLKey": "/path/to/sslcert.key",
|
||||
"SSLRootCert": "/path/to/sslroot.crt",
|
||||
"SSLCrl": "/path/to/sslcrl.crl",
|
||||
"SSLCompression": 1,
|
||||
"Shared": false,
|
||||
"SharedUsername": "postgres",
|
||||
"BGColor": "#ff9900",
|
||||
"FGColor": "#000000",
|
||||
"Service": "postgresql-10",
|
||||
"Timeout": 60,
|
||||
"UseSSHTunnel": 1,
|
||||
"TunnelHost": "192.168.1.253",
|
||||
"TunnelPort": 22,
|
||||
"TunnelUsername": "username",
|
||||
"TunnelAuthentication": 0,
|
||||
"TunnelAuthentication": 1,
|
||||
"TunnelIdentityFile": "/Users/<user>/.ssh/id_rsa.pub",
|
||||
"TunnelKeepAlive": 30,
|
||||
"PasswordExecCommand": "echo 'test'",
|
||||
"PasswordExecExpiration": 100
|
||||
"PasswordExecExpiration": 100,
|
||||
"KerberosAuthentication": true,
|
||||
"ConnectionParameters": {
|
||||
"sslmode": "prefer",
|
||||
"connect_timeout": 10,
|
||||
"passfile": "/Users/<user>/.pgpass",
|
||||
"sslcert": "/Users/<user>/.ssh/cert"
|
||||
},
|
||||
"Tags": [
|
||||
{
|
||||
"color": "#EC0BB4",
|
||||
"text": "Development"
|
||||
}
|
||||
],
|
||||
"PostConnectionSQL": "set timezone='America/New_York'"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
****************************
|
||||
`Keyboard Shortcuts`:index::
|
||||
****************************
|
||||
***************************
|
||||
`Keyboard Shortcuts`:index:
|
||||
***************************
|
||||
|
||||
Keyboard shortcuts are provided in pgAdmin to allow easy access to specific
|
||||
functions. Alternate shortcuts can be configured through File > Preferences if
|
||||
|
||||
@@ -13,7 +13,7 @@ documentation is attributed to the
|
||||
|
||||
.. topic:: pgAdmin 4
|
||||
|
||||
Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose, without fee, and without a written agreement is
|
||||
|
||||
@@ -20,4 +20,5 @@ database, right-click on the *Databases* node, and select *Create Database...*
|
||||
tablespace_dialog
|
||||
replica_nodes_dialog
|
||||
pgd_replication_group_dialog
|
||||
role_reassign_dialog
|
||||
role_reassign_dialog
|
||||
directory_dialog
|
||||
@@ -27,7 +27,7 @@ modify the values for the following parameters.
|
||||
|
||||
"MFA_ENABLED","The default value for this parameter is True.
|
||||
To disable 2FA, set the value to *False*"
|
||||
"SUPPORTED_MFA_LIST", "Set the authentication methods to be supported "
|
||||
"MFA_SUPPORTED_METHODS", "Set the authentication methods to be supported e.g. email, authenticator"
|
||||
"MFA_EMAIL_SUBJECT", "<APP_NAME> - Verification Code e.g. pgAdmin 4 -
|
||||
Verification Code"
|
||||
"MFA_FORCE_REGISTRATION", "Force the user to configure the authentication
|
||||
|
||||
@@ -34,12 +34,12 @@ and modify the values for the following parameters:
|
||||
"OAUTH2_AUTHORIZATION_URL", "Endpoint for user authorization"
|
||||
"OAUTH2_SERVER_METADATA_URL", "Server metadata url for your OAuth2 provider"
|
||||
"OAUTH2_API_BASE_URL", "Oauth2 base URL endpoint to make requests simple, ex: *https://api.github.com/*"
|
||||
"OAUTH2_USERINFO_ENDPOINT", "User Endpoint, ex: *user* (for github) and *userinfo* (for google)"
|
||||
"OAUTH2_USERINFO_ENDPOINT", "User Endpoint, ex: *user* (for github, or *user/emails* if the user's email address is private) and *userinfo* (for google),"
|
||||
"OAUTH2_SCOPE", "Oauth scope, ex: 'openid email profile'. Note that an 'email' claim is required in the resulting profile."
|
||||
"OAUTH2_ICON", "The Font-awesome icon to be placed on the oauth2 button, ex: fa-github"
|
||||
"OAUTH2_BUTTON_COLOR", "Oauth2 button color"
|
||||
"OAUTH2_USERNAME_CLAIM", "The claim which is used for the username. If the value is empty
|
||||
the email is used as username, but if a value is provided, the claim has to exist. Ex: *oid* (for AzureAD)"
|
||||
the email is used as username, but if a value is provided, the claim has to exist. Ex: *oid* (for AzureAD), *email* (for Github)"
|
||||
"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."
|
||||
|
||||
@@ -6,7 +6,14 @@
|
||||
***************************
|
||||
|
||||
Use options on the *Preferences* dialog to customize the behavior of the client.
|
||||
To open the *Preferences* dialog, select *Preferences* from the *File* menu.
|
||||
To open the *Preferences* dialog, select *Preferences* from the *File* menu or
|
||||
click on the *Settings* button at the bottom left corner in case of Workspace
|
||||
layout.
|
||||
|
||||
.. image:: images/preferences_menu.png
|
||||
:alt: Preferences menu
|
||||
:align: center
|
||||
|
||||
The left pane of the *Preferences* dialog displays a tree control; each node of
|
||||
the tree control provides access to options that are related to the node under
|
||||
which they are displayed.
|
||||
@@ -266,21 +273,46 @@ The Miscellaneous Node
|
||||
|
||||
Expand the *Miscellaneous* node to specify miscellaneous display preferences.
|
||||
|
||||
.. image:: images/preferences_misc_user_language.png
|
||||
:alt: Preferences dialog user language section
|
||||
.. image:: images/preferences_misc_file_downloads.png
|
||||
:alt: Preferences dialog file downloads section
|
||||
:align: center
|
||||
|
||||
* Use the *User language* drop-down listbox to select the display language for
|
||||
Use the fields on the *File Downloads* panel to manage file downloads related preferences.
|
||||
|
||||
* When the *Automatically open downloaded files?* switch is set to *True*
|
||||
the downloaded file will automatically open in the system's default
|
||||
application associated with that file type.
|
||||
|
||||
* When the *Prompt for the download location?* switch is set to *True*
|
||||
a prompt will appear after clicking the download button, allowing you
|
||||
to choose the download location.
|
||||
|
||||
**Note:** File Downloads related settings are applicable and visible only in desktop mode.
|
||||
|
||||
Use the fields on the *User Interface* panel to set the user interface related preferences.
|
||||
|
||||
.. image:: images/preferences_misc_user_interface.png
|
||||
:alt: Preferences dialog user interface section
|
||||
:align: center
|
||||
|
||||
* Use the *Language* drop-down listbox to select the display language for
|
||||
the client.
|
||||
|
||||
.. image:: images/preferences_misc_themes.png
|
||||
:alt: Preferences dialog themes section
|
||||
:align: center
|
||||
* Use the *Layout* drop-down listbox to select the layout for the client.
|
||||
pgAdmin offers two options: the Classic layout, a longstanding and familiar
|
||||
design, and the Workspace layout, which provides distraction free dedicated
|
||||
areas for the Query Tool, PSQL, and Schema Diff tools. 'Workspace' layout is
|
||||
the default layout, but user can change it to 'Classic'.
|
||||
|
||||
* When the *Open the Query Tool/PSQL in their respective workspaces* switch is set to *True*
|
||||
then all Query Tool/PSQL tabs will open in their respective workspaces. By default,
|
||||
this setting is False, meaning that Query Tool/PSQL tabs will open in the currently
|
||||
active workspace (either the default or the workspace selected at the time of opening).
|
||||
|
||||
* Use the *Themes* drop-down listbox to select the theme for pgAdmin. You'll also get a preview just below the
|
||||
drop down. You can also submit your own themes,
|
||||
check `here <https://github.com/pgadmin-org/pgadmin4/blob/master/README.md>`_ how.
|
||||
Currently we support Standard, Dark and High Contrast and System theme. Selecting System option will follow
|
||||
Currently we support Light, Dark, High Contrast and System theme. Selecting System option will follow
|
||||
your computer's settings.
|
||||
|
||||
The Paths Node
|
||||
@@ -385,6 +417,10 @@ Use the fields on the *Editor* panel to change settings of the query editor.
|
||||
* When the *Code folding?* switch is set to *False*, the editor will disable
|
||||
code folding. Disabling will improve editor performance with large files.
|
||||
|
||||
* Use the *Font family* field to be used for all SQL editors. The specified
|
||||
font should already be installed on your system. If the font is not found,
|
||||
the editor will fall back to the default font, Source Code Pro.
|
||||
|
||||
* Use the *Font size* field to specify the font size that will be used in text
|
||||
boxes and editors.
|
||||
|
||||
@@ -460,6 +496,9 @@ Use the fields on the *Options* panel to manage editor preferences.
|
||||
editor will prompt the user to saved unsaved data when exiting the data
|
||||
editor.
|
||||
|
||||
* When the *Open the file in a new tab?* switch is set to *True*, the
|
||||
editor will open the new file in new tab of the Query Tool.
|
||||
|
||||
* When the *Prompt to save unsaved query changes?* switch is set to *True*, the
|
||||
editor will prompt the user to saved unsaved query modifications when exiting
|
||||
the Query Tool.
|
||||
@@ -652,7 +691,7 @@ The following is an typical example for preferences.json :
|
||||
"browser:display:show_system_objects": true,
|
||||
"browser:display:show_user_defined_templates": true,
|
||||
"browser:display:confirm_on_refresh_close": false,
|
||||
"misc:themes:theme": "dark",
|
||||
"misc:user_interface:theme": "dark",
|
||||
|
||||
}
|
||||
}
|
||||
@@ -27,4 +27,44 @@ mode, but is disabled by default in Server mode. This is because users can run
|
||||
arbitrary shell commands through psql which may be considered a security risk in
|
||||
some deployments. System Administrators can enable the use of the PSQL tool in
|
||||
the pgAdmin configuration by setting the *ENABLE_PSQL* option to *True*; see
|
||||
:ref:`config_py` for more information.
|
||||
:ref:`config_py` for more information.
|
||||
|
||||
PSQL Tool in Workspace Layout
|
||||
******************************
|
||||
|
||||
The workspace layout offers a distraction-free, dedicated area for the PSQL Tool.
|
||||
When the PSQL Tool workspace is accessed, the Welcome page opens by default.
|
||||
|
||||
**Note**: In the Workspace layout, all PSQL tabs open within the PSQL Tool workspace.
|
||||
|
||||
In the classic UI, users must connect to a database server and navigate to the
|
||||
database node before using the PSQL Tool. However, with the introduction of the
|
||||
Workspace layout and Welcome page, users can seamlessly connect to any ad-hoc
|
||||
server, even if it is not registered in the Object Explorer.
|
||||
|
||||
.. image:: images/psql_workspace.png
|
||||
:alt: PSQL tool workspace
|
||||
:align: center
|
||||
|
||||
* Select *Existing Server* from the dropdown to connect to a server already
|
||||
listed in the Object Explorer. It is optional.
|
||||
* Provide the *Server Name* for ad-hoc servers.
|
||||
* Specify the IP address of the server host, or the fully qualified domain
|
||||
name in the *Host name/address* field.
|
||||
* Enter the listener port number of the server host in the *Port* field.
|
||||
* Use the *Database* field to specify the name of the database to which
|
||||
the client will connect.
|
||||
* Use the *User* field to specify the name of a user that will be used when
|
||||
authenticating with the server.
|
||||
* Use the *Password* field to provide a password that will be supplied when
|
||||
authenticating with the server.
|
||||
* Use the *Role* field to specify the name of a role that has privileges that
|
||||
will be conveyed to the client after authentication with the server.
|
||||
* Use the *Service* field to specify the service name. For more information,
|
||||
see
|
||||
`Section 33.16 of the Postgres documentation <https://www.postgresql.org/docs/current/libpq-pgservice.html>`_.
|
||||
* Use the fields in the *Connection Parameters* to configure the connection parameters.
|
||||
|
||||
After filling in all the required fields, click the Connect & Open PSQL Tool
|
||||
button to launch the PSQL Tool with the provided server details. If the password
|
||||
is not supplied, you will be prompted to enter it.
|
||||
@@ -41,6 +41,47 @@ The Query Tool features two panels:
|
||||
server messages related to the query's execution and any asynchronous
|
||||
notifications received from the server.
|
||||
|
||||
Query Tool in Workspace Layout
|
||||
******************************
|
||||
|
||||
The workspace layout offers a distraction-free, dedicated area for the Query Tool.
|
||||
When the Query Tool workspace is accessed, the Welcome page opens by default.
|
||||
|
||||
**Note**: In the Workspace layout, all Query Tool and View/Edit Data tabs open within the Query Tool workspace.
|
||||
|
||||
In the classic UI, users must connect to a database server and navigate to the
|
||||
database node before using the Query Tool. However, with the introduction of the
|
||||
Workspace layout and Welcome page, users can seamlessly connect to any ad-hoc
|
||||
server, even if it is not registered in the Object Explorer.
|
||||
|
||||
.. image:: images/query_tool_workspace.png
|
||||
:alt: Query tool workspace
|
||||
:align: center
|
||||
|
||||
* Select *Existing Server* from the dropdown to connect to a server already
|
||||
listed in the Object Explorer. It is optional.
|
||||
* Provide the *Server Name* for ad-hoc servers.
|
||||
* Specify the IP address of the server host, or the fully qualified domain
|
||||
name in the *Host name/address* field.
|
||||
* Enter the listener port number of the server host in the *Port* field.
|
||||
* Use the *Database* field to specify the name of the database to which
|
||||
the client will connect.
|
||||
* Use the *User* field to specify the name of a user that will be used when
|
||||
authenticating with the server.
|
||||
* Use the *Password* field to provide a password that will be supplied when
|
||||
authenticating with the server.
|
||||
* Use the *Role* field to specify the name of a role that has privileges that
|
||||
will be conveyed to the client after authentication with the server.
|
||||
* Use the *Service* field to specify the service name. For more information,
|
||||
see
|
||||
`Section 33.16 of the Postgres documentation <https://www.postgresql.org/docs/current/libpq-pgservice.html>`_.
|
||||
* Use the fields in the *Connection Parameters* to configure the connection parameters.
|
||||
|
||||
After filling in all the required fields, click the Connect & Open Query Tool
|
||||
button to launch the Query Tool with the provided server details. If the password
|
||||
is not supplied, you will be prompted to enter it.
|
||||
|
||||
|
||||
Toolbar
|
||||
*******
|
||||
|
||||
|
||||
@@ -29,7 +29,8 @@ File Options
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| Icon | Behavior | Shortcut |
|
||||
+======================+===================================================================================================+================+
|
||||
| *Open File* | Click the *Open File* icon to display a previously saved query in the SQL Editor. | Cmd/Ctrl + O |
|
||||
| *Open File* | Click the *Open File* icon to display a previously saved query in the same tab of the SQL Editor. | |
|
||||
| | To open the file in a new tab, select *Open in a new tab?* option from the dropdown. | Cmd/Ctrl + O |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Save File* | Click the *Save* icon to perform a quick-save of a previously saved query, or to access the | Cmd/Ctrl + S |
|
||||
| | *Save* menu: | |
|
||||
|
||||
@@ -12,6 +12,9 @@ notes for it.
|
||||
:maxdepth: 1
|
||||
|
||||
|
||||
release_notes_9_2
|
||||
release_notes_9_1
|
||||
release_notes_9_0
|
||||
release_notes_8_14
|
||||
release_notes_8_13
|
||||
release_notes_8_12
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
***********
|
||||
Version 9.0
|
||||
***********
|
||||
|
||||
Release date: 2025-02-06
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v8.14.
|
||||
|
||||
Supported Database Servers
|
||||
**************************
|
||||
**PostgreSQL**: 13, 14, 15, 16 and 17
|
||||
|
||||
**EDB Advanced Server**: 13, 14, 15, 16 and 17
|
||||
|
||||
Bundled PostgreSQL Utilities
|
||||
****************************
|
||||
**psql**, **pg_dump**, **pg_dumpall**, **pg_restore**: 17.0
|
||||
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
|
||||
| `Issue #6513 <https://github.com/pgadmin-org/pgadmin4/issues/6513>`_ - Change button labels and color in delete confirmation dialog for all objects to improve UX.
|
||||
| `Issue #7708 <https://github.com/pgadmin-org/pgadmin4/issues/7708>`_ - Enhanced pgAdmin 4 with support for Workspace layouts.
|
||||
| `Issue #8332 <https://github.com/pgadmin-org/pgadmin4/issues/8332>`_ - Added the MAINTAIN privilege for PostgreSQL version 17 and above.
|
||||
| `Issue #8391 <https://github.com/pgadmin-org/pgadmin4/issues/8391>`_ - Add support for OAuth2 profile array response, which also takes care of the GitHub Private Email ID issue.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #8249 <https://github.com/pgadmin-org/pgadmin4/issues/8249>`_ - Show the python version used for the pgAdmin server in the about dialog.
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #3273 <https://github.com/pgadmin-org/pgadmin4/issues/3273>`_ - Change the logic of setval function, so that the next nextval of sequence will return exactly the specified value.
|
||||
| `Issue #5204 <https://github.com/pgadmin-org/pgadmin4/issues/5204>`_ - Fixed an issue where pgadmin cannot install into path with non ASCII characters.
|
||||
| `Issue #6044 <https://github.com/pgadmin-org/pgadmin4/issues/6044>`_ - Fixed an issue where filter dialog save fails when the PostgreSQL server/database connection is lost.
|
||||
| `Issue #6968 <https://github.com/pgadmin-org/pgadmin4/issues/6968>`_ - Fixed an issue where option key was not registering in PSQL tool.
|
||||
| `Issue #8072 <https://github.com/pgadmin-org/pgadmin4/issues/8072>`_ - Fixed an issue where Schema Diff not produce difference script for Index definition with where condition.
|
||||
| `Issue #8142 <https://github.com/pgadmin-org/pgadmin4/issues/8142>`_ - Correct the documentation for the MFA configuration.
|
||||
| `Issue #8165 <https://github.com/pgadmin-org/pgadmin4/issues/8165>`_ - Fixed an issue where error message from the database server need space between two sentences.
|
||||
| `Issue #8199 <https://github.com/pgadmin-org/pgadmin4/issues/8199>`_ - Fixed an issue where query tool throws utf-8 decode error when using cursor with binary data.
|
||||
| `Issue #8208 <https://github.com/pgadmin-org/pgadmin4/issues/8208>`_ - Allow deleting the entry while creating/adding new label to enumeration type.
|
||||
| `Issue #8209 <https://github.com/pgadmin-org/pgadmin4/issues/8209>`_ - Fixed an issue where properties dialog throwing an error for Materialized View.
|
||||
| `Issue #8254 <https://github.com/pgadmin-org/pgadmin4/issues/8254>`_ - Fix a formatting issue in View/Edit tool generated SQL where some filters are applied.
|
||||
| `Issue #8255 <https://github.com/pgadmin-org/pgadmin4/issues/8255>`_ - Fixed an issue where tooltip on a dropdown button is blocking access to dropdown menu.
|
||||
| `Issue #8256 <https://github.com/pgadmin-org/pgadmin4/issues/8256>`_ - Fix the error occurring while loading preferences on startup.
|
||||
| `Issue #8273 <https://github.com/pgadmin-org/pgadmin4/issues/8273>`_ - Fixed an issue where copying query tool output cell is not working if any SQL text is selected.
|
||||
| `Issue #8299 <https://github.com/pgadmin-org/pgadmin4/issues/8299>`_ - Ensure master password pop up is not shown on setting MASTER_PASSWORD_REQUIRED to false.
|
||||
| `Issue #8309 <https://github.com/pgadmin-org/pgadmin4/issues/8309>`_ - Remove the option "With no data (concurrently)" from Refresh MATERIALIZED VIEW context menu.
|
||||
| `Issue #8320 <https://github.com/pgadmin-org/pgadmin4/issues/8320>`_ - Fix an issue where wrong information is shown after using the filter on the Dashboard> State tab.
|
||||
| `Issue #8365 <https://github.com/pgadmin-org/pgadmin4/issues/8365>`_ - Fixed an issue where PSQL tool is not opening if database name have HTML characters in the name.
|
||||
| `Issue #8369 <https://github.com/pgadmin-org/pgadmin4/issues/8369>`_ - Fixed an issue where Default Privileges and Privileges not working correctly.
|
||||
| `Issue #8408 <https://github.com/pgadmin-org/pgadmin4/issues/8408>`_ - Fixed an issue where quotes were missing in the CREATE script for the tablespace.
|
||||
@@ -0,0 +1,44 @@
|
||||
***********
|
||||
Version 9.1
|
||||
***********
|
||||
|
||||
Release date: 2025-02-28
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v9.0.
|
||||
|
||||
Supported Database Servers
|
||||
**************************
|
||||
**PostgreSQL**: 13, 14, 15, 16 and 17
|
||||
|
||||
**EDB Advanced Server**: 13, 14, 15, 16 and 17
|
||||
|
||||
Bundled PostgreSQL Utilities
|
||||
****************************
|
||||
**psql**, **pg_dump**, **pg_dumpall**, **pg_restore**: 17.2
|
||||
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #1235 <https://github.com/pgadmin-org/pgadmin4/issues/1235>`_ - Added an option to open the file in a new tab within the query tool.
|
||||
| `Issue #5128 <https://github.com/pgadmin-org/pgadmin4/issues/5128>`_ - Add support for one to one relationship in the ERD tool.
|
||||
| `Issue #8436 <https://github.com/pgadmin-org/pgadmin4/issues/8436>`_ - Enable the ability to close the 'Welcome' tab in the Query Tool/PSQL Workspace.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #8068 <https://github.com/pgadmin-org/pgadmin4/issues/8068>`_ - Added support for Python 3.13
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #8181 <https://github.com/pgadmin-org/pgadmin4/issues/8181>`_ - Fixed an issue where pgAdmin does not support pg_vector column length/precision.
|
||||
| `Issue #8296 <https://github.com/pgadmin-org/pgadmin4/issues/8296>`_ - Fixed an issue where pasting text containing JSON data into the query tool grid would result in incorrect parsing.
|
||||
| `Issue #8341 <https://github.com/pgadmin-org/pgadmin4/issues/8341>`_ - Fixed an issue where the query tool was not treating IDENTITY columns as columns with default values when inserting new rows.
|
||||
| `Issue #8389 <https://github.com/pgadmin-org/pgadmin4/issues/8389>`_ - Fixed an issue where the ERD tool fails to open a saved file containing parent-child relationship within the same table.
|
||||
| `Issue #8410 <https://github.com/pgadmin-org/pgadmin4/issues/8410>`_ - Fixed Docker image entrypoint.sh email validation.
|
||||
| `Issue #8418 <https://github.com/pgadmin-org/pgadmin4/issues/8418>`_ - Fixed an issue where the User Management and Change Password dialogs were hidden when selecting a menu while a workspace other than 'Default' was active.
|
||||
| `Issue #8430 <https://github.com/pgadmin-org/pgadmin4/issues/8430>`_ - Fixed an issue where the column order displayed was incorrect for exclusion constraints with multiple columns.
|
||||
| `Issue #8435 <https://github.com/pgadmin-org/pgadmin4/issues/8435>`_ - Ensure the saved passwords are decrypted with the correct encryption key for external authentication in server mode.
|
||||
| `Issue #8439 <https://github.com/pgadmin-org/pgadmin4/issues/8439>`_ - Fixed an issue where drop-down menus were hidden behind the dock.
|
||||
| `Issue #8460 <https://github.com/pgadmin-org/pgadmin4/issues/8460>`_ - Fixed an issue where deleting rows in the query tool would delete all rows in the table when 'Select All Remaining Rows' was used.
|
||||
@@ -0,0 +1,54 @@
|
||||
***********
|
||||
Version 9.2
|
||||
***********
|
||||
|
||||
Release date: 2025-04-03
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin 4 v9.1.
|
||||
|
||||
Supported Database Servers
|
||||
**************************
|
||||
**PostgreSQL**: 13, 14, 15, 16 and 17
|
||||
|
||||
**EDB Advanced Server**: 13, 14, 15, 16 and 17
|
||||
|
||||
Bundled PostgreSQL Utilities
|
||||
****************************
|
||||
**psql**, **pg_dump**, **pg_dumpall**, **pg_restore**: 17.2
|
||||
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #0392 <https://github.com/pgadmin-org/pgadmin4/issues/0392>`_ - Added an ability to configure the font family for SQL editors.
|
||||
| `Issue #4194 <https://github.com/pgadmin-org/pgadmin4/issues/4194>`_ - Added support to automatically open a file after it is downloaded in the desktop mode.
|
||||
| `Issue #4503 <https://github.com/pgadmin-org/pgadmin4/issues/4503>`_ - Added support for post-connection SQL execution, which will be run automatically on each connection made to any database of the server.
|
||||
| `Issue #5871 <https://github.com/pgadmin-org/pgadmin4/issues/5871>`_ - Add support for restoring plain SQL database dumps.
|
||||
| `Issue #8034 <https://github.com/pgadmin-org/pgadmin4/issues/8034>`_ - Added support for creating Directory nodes in EPAS.
|
||||
| `Issue #8449 <https://github.com/pgadmin-org/pgadmin4/issues/8449>`_ - Change icon buttons to show tooltip even when disabled.
|
||||
| `Issue #8540 <https://github.com/pgadmin-org/pgadmin4/issues/8540>`_ - Add an option to load/replace the servers.json file on each container startup.
|
||||
| `Issue #8574 <https://github.com/pgadmin-org/pgadmin4/issues/8574>`_ - Open user management in a separate tab instead of a dialog to enhance UI/UX.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #8545 <https://github.com/pgadmin-org/pgadmin4/issues/8545>`_ - Added Security.md file.
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #8316 <https://github.com/pgadmin-org/pgadmin4/issues/8316>`_ - Ensure that modal dialogs are not triggered more than once to avoid duplicates.
|
||||
| `Issue #8355 <https://github.com/pgadmin-org/pgadmin4/issues/8355>`_ - Change session files garbage collection strategy.
|
||||
| `Issue #8362 <https://github.com/pgadmin-org/pgadmin4/issues/8362>`_ - Fixed an issue where pgAdmin should fallback to main screen if the last opened screen is disconnected.
|
||||
| `Issue #8437 <https://github.com/pgadmin-org/pgadmin4/issues/8437>`_ - Fixed an issue where the PSQL terminal displays keyname for non alphanumeric keys.
|
||||
| `Issue #8462 <https://github.com/pgadmin-org/pgadmin4/issues/8462>`_ - Fixed an issue where geometries in the geometry viewer will render partially when the container was resized.
|
||||
| `Issue #8473 <https://github.com/pgadmin-org/pgadmin4/issues/8473>`_ - Change the stop/terminate icon at all the places for better UX.
|
||||
| `Issue #8479 <https://github.com/pgadmin-org/pgadmin4/issues/8479>`_ - Fixed an issue where the Schema Diff was not displaying the difference query when a table had a UNIQUE NULLS NOT DISTINCT constraint.
|
||||
| `Issue #8483 <https://github.com/pgadmin-org/pgadmin4/issues/8483>`_ - Fixed an issue where the query tool data grid did not respect the default value for columns of domain type when the domain had a default value.
|
||||
| `Issue #8514 <https://github.com/pgadmin-org/pgadmin4/issues/8514>`_ - Ensure the newly added parameters in the server dialog are incorporated into the Import/Export Servers functionality.
|
||||
| `Issue #8546 <https://github.com/pgadmin-org/pgadmin4/issues/8546>`_ - Fixed an issue where updating the grantee was not correctly applying the privileges.
|
||||
| `Issue #8577 <https://github.com/pgadmin-org/pgadmin4/issues/8577>`_ - Fixed an issue where the upgrade_check API returned an unexpected keyword argument 'cafile' due to changes in the urllib package supporting Python v3.13.
|
||||
| `Issue #8597 <https://github.com/pgadmin-org/pgadmin4/issues/8597>`_ - Fixed an issue where delete/rename was done on wrong file after sorting in Storage Manager.
|
||||
| `Issue #8602 <https://github.com/pgadmin-org/pgadmin4/issues/8602>`_ - Fixed an XSS vulnerability issue in the Query Tool and View/Edit Data (CVE-2025-2946).
|
||||
| `Issue #8603 <https://github.com/pgadmin-org/pgadmin4/issues/8603>`_ - Fixed a remote code execution issue in the Query Tool and Cloud Deployment (CVE-2025-2945).
|
||||
| `Issue #8623 <https://github.com/pgadmin-org/pgadmin4/issues/8623>`_ - Fixed an issue where query tool is crashing on macOS 15.4 due to a locale issue.
|
||||
@@ -13,7 +13,7 @@ connected to EDB Postgres Advanced Server; for more information about using
|
||||
resource groups, please see the EDB Postgres Advanced Server Guide, available
|
||||
at:
|
||||
|
||||
http://www.enterprisedb.com/
|
||||
https://www.enterprisedb.com/docs/epas/latest/epas_compat_sql/
|
||||
|
||||
Fields used to create a resource group are located on the *General* tab. The
|
||||
*SQL* tab displays the SQL code generated by your selections on the *Resource
|
||||
|
||||
@@ -27,6 +27,8 @@ restore process:
|
||||
|
||||
* Select *Custom or tar* to restore from a custom archive file to create a
|
||||
copy of the backed-up object.
|
||||
* Select *Plain* to restore a plain SQL backup. When selecting this option
|
||||
all the other options will not be applicable.
|
||||
* Select *Directory* to restore from a compressed directory-format archive.
|
||||
|
||||
* Enter the complete path to the backup file in the *Filename* field.
|
||||
|
||||
@@ -44,6 +44,18 @@ Use the :ref:`Preferences <preferences>` dialog to specify following:
|
||||
* *Schema Diff* should ignore the whitespaces while comparing string objects. Set *Ignore whitespaces* option to true.
|
||||
* *Schema Diff* should ignore the owner while comparing objects. Set *Ignore owner* option to true.
|
||||
|
||||
Schema Diff in Workspace Layout
|
||||
*******************************
|
||||
|
||||
The workspace layout offers a distraction-free, dedicated area for the Schema Diff.
|
||||
By default, the Schema Diff workspace button remains disabled until at least one Schema Diff tab is opened.
|
||||
|
||||
**Note**: In the Workspace layout, all Schema Diff tabs open within the Schema Diff workspace.
|
||||
|
||||
.. image:: images/schema_diff_workspace.png
|
||||
:alt: schema diff workspace
|
||||
:align: center
|
||||
|
||||
|
||||
The *Schema Diff* panel is divided into two panels; an Object Comparison panel
|
||||
and a DDL Comparison panel.
|
||||
|
||||
@@ -35,6 +35,9 @@ Click the *Definition* tab to continue.
|
||||
|
||||
Use the fields in the *Definition* tab to define the sequence:
|
||||
|
||||
* Use the *Current Value* field to specify the sequence object\'s current value.
|
||||
The next nextval will return exactly the specified value, and sequence advancement
|
||||
commences with the following nextval. *This field is only available in the edit mode*.
|
||||
* Use the *Increment* field to specify which value is added to the current
|
||||
sequence value to create a new value.
|
||||
* Provide a value in the *Start* field to specify the beginning value of the
|
||||
|
||||
@@ -206,8 +206,8 @@ Use the fields in the *Advanced* tab to configure a connection:
|
||||
should be generated as a transient authorization token instead of providing a
|
||||
password when connecting in `PAM authentication <https://www.postgresql.org/docs/current/auth-pam.html>`_ scenarios.
|
||||
You can pass server hostname, port and DB username to the password exec command as variable by providing placeholders
|
||||
like ``%HOST%``, ``%PORT%`` and ``%USERNAME%`` which will be replace with the server connection information.
|
||||
Example: ``/path/to/script --hostnmae %HOST% --port %PORT% --username %USERNAME%``
|
||||
like ``%HOSTNAME%``, ``%PORT%`` and ``%USERNAME%`` which will be replace with the server connection information.
|
||||
Example: ``/path/to/script --hostname %HOSTNAME% --port %PORT% --username %USERNAME%``
|
||||
* Use the *Password exec expiration* field to specify a maximum age, in seconds,
|
||||
of the password generated with a *Password exec command*. If not specified,
|
||||
the password will not expire until your pgAdmin session does.
|
||||
@@ -225,14 +225,14 @@ Use the fields in the *Advanced* tab to configure a connection:
|
||||
|
||||
.. note:: The Password exec option is only supported when pgAdmin is run in desktop mode.
|
||||
|
||||
* Click the *Save* button to save your work.
|
||||
* Click the *Close* button to exit without saving your work.
|
||||
* Click the *Reset* button to return the values specified on the Server dialog
|
||||
to their original condition.
|
||||
Click the *Post Connection SQL* tab to continue.
|
||||
|
||||
.. toctree::
|
||||
.. image:: images/server_post_connection_sql.png
|
||||
:alt: Server dialog post connection sql tab
|
||||
:align: center
|
||||
|
||||
clear_saved_passwords
|
||||
* Use the *Post Connection SQL* field to write the SQL queries that will be
|
||||
executed in autocommit mode for each connection made to any database on this server.
|
||||
|
||||
|
||||
Click the *Tags* tab to continue.
|
||||
@@ -245,6 +245,15 @@ Use the table in the *Tags* tab to add tags. The tags will be shown on the right
|
||||
a server node label in the object explorer tree.
|
||||
|
||||
Click on the *+* button to add a new tag. Some of the parameters are:
|
||||
* *Text* field to specify the tag name.
|
||||
* *Color* field to select the accent color of the tag.
|
||||
|
||||
* *Text* field to specify the tag name.
|
||||
* *Color* field to select the accent color of the tag.
|
||||
|
||||
* Click the *Save* button to save your work.
|
||||
* Click the *Close* button to exit without saving your work.
|
||||
* Click the *Reset* button to return the values specified on the Server dialog
|
||||
to their original condition.
|
||||
|
||||
.. toctree::
|
||||
|
||||
clear_saved_passwords
|
||||
@@ -32,7 +32,7 @@ the right pane.
|
||||
Select an icon from the *Quick Links* panel on the *Dashboard* tab to:
|
||||
|
||||
* Click the *Add New Server* button to open the
|
||||
:ref:`Create - Server dialog <server_dialog>` to add a new server definition.
|
||||
:ref:`Register - Server dialog <server_dialog>` to add a new server definition.
|
||||
* Click the *Configure pgAdmin* button to open the
|
||||
:ref:`Preferences dialog <preferences>` to customize your pgAdmin client.
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
.. _user_management:
|
||||
|
||||
*******************************
|
||||
`User Management Dialog`:index:
|
||||
`User Management`:index:
|
||||
*******************************
|
||||
|
||||
When invoking pgAdmin in desktop mode, a password is randomly generated, and
|
||||
@@ -9,12 +9,17 @@ then ignored. If you install pgAdmin in server mode, you will be prompted for
|
||||
an administrator email and password for the pgAdmin client.
|
||||
|
||||
When you authenticate with pgAdmin, the server definitions associated with that
|
||||
login role are made available in the tree control. An administrative user can
|
||||
use the *User Management* dialog to:
|
||||
login role are made available in the tree control.
|
||||
|
||||
* add or delete pgAdmin roles
|
||||
* assign privileges
|
||||
* manage the password associated with a role
|
||||
Users Tab
|
||||
*******************
|
||||
An administrative user can use the *Users* tab to:
|
||||
|
||||
* manage pgAdmin users
|
||||
* change users role
|
||||
* change password for a user
|
||||
* deactivate user
|
||||
* unlock a locked user
|
||||
|
||||
.. image:: images/user.png
|
||||
:alt: pgAdmin user management window
|
||||
@@ -26,7 +31,8 @@ the following criteria types: *Authentication source*, *Username*, or *Email*.
|
||||
For example, you can enter *ldap* in the search box and only the records having
|
||||
*ldap* as authentication source will be displayed in the *User Management* table.
|
||||
|
||||
To add a user, click the Add (+) button at the top right corner.
|
||||
To add a user, click the Add (+) button at the top left corner. It will open a
|
||||
dialog where you can fill in details for the new user.
|
||||
|
||||
.. image:: images/add_user.png
|
||||
:alt: pgAdmin user management window add new user
|
||||
@@ -34,34 +40,30 @@ To add a user, click the Add (+) button at the top right corner.
|
||||
|
||||
Provide information about the new pgAdmin role in the row:
|
||||
|
||||
* Use the drop-down list box next to *Authentication source* field to select the
|
||||
type of authentication that should be used for the user. If authentication
|
||||
source is only 'internal' then *Authentication source* field
|
||||
is disabled. Supported *Authentication source* are internal, ldap, kerberos,
|
||||
oauth2 and webserver.
|
||||
* Click in the *Username* field, and provide a username for the user. This field
|
||||
* Use the *Authentication source* field to select the type of authentication that
|
||||
should be used for the user. If authentication source in the pgAdmin server config
|
||||
has 'internal' only then *Authentication source* field will be disabled. Supported
|
||||
*Authentication source* are internal, ldap, kerberos, oauth2 and webserver.
|
||||
* Use the *Username* field to provide a username for the user. This field
|
||||
is enabled only when you select authentication source except *internal*. If you
|
||||
select *internal* as authentication source, your email address is displayed in the
|
||||
username field.
|
||||
* Click in the *Email* field, and provide an email address for the user.
|
||||
* Use the drop-down list box next to *Role* to select whether a user is an
|
||||
*Administrator* or a *User*.
|
||||
|
||||
select *internal* as authentication source, your email address will be taken as
|
||||
the username.
|
||||
* Use the *Email* field to provide an email address for the user. Email is a
|
||||
mandatory field for authentication source *internal*.
|
||||
* Use the *Role* field to select whether a user is an *Administrator* or a *User*.
|
||||
* Select *Administrator* if the user will have administrative privileges
|
||||
within the pgAdmin client.
|
||||
* Select *User* to create a non-administrative user account.
|
||||
|
||||
* Move the *Active* switch to the *No* position if the account is not currently
|
||||
active; the default is *Yes*. Use this switch to disable account activity
|
||||
without deleting an account.
|
||||
* Use the *Active* switch to enable or disable account activity without deleting an
|
||||
account; by default it is enabled.
|
||||
* Use the *New password* field to provide the password associated with the user
|
||||
specified in the *Email* field. This field is disabled if you select any
|
||||
authentication source except *internal*.
|
||||
* Re-enter the password in the *Confirm password* field. This field is disabled
|
||||
if you select *ldap* as authentication source.
|
||||
* *Locked* switch is disabled by default when set to *False*. It is only enabled
|
||||
when the user is locked by trying unsuccessful login attempts. Move the switch
|
||||
to the *False* position if you want to unlock the account.
|
||||
* *Locked* switch cannot be changed if is turned off. It can only be changed
|
||||
when the user is locked by trying unsuccessful login attempts. Turn off the
|
||||
switch if you want to unlock the account.
|
||||
|
||||
To discard a user, and revoke access to pgAdmin, click the trash icon to the
|
||||
left of the row and confirm deletion in the *Delete user?* dialog. If the user
|
||||
@@ -72,9 +74,8 @@ dialog will appear to change the ownership of a shared server.
|
||||
Users with the *Administrator* role are able to add, edit and remove pgAdmin
|
||||
users, but otherwise have the same capabilities as those with the *User* role.
|
||||
|
||||
* Click the *Refresh* button to get latest users list.
|
||||
* Click the *Help* button (?) to access online help.
|
||||
* Click the *Close* button to save work. You will be prompted to return to the
|
||||
dialog if your selections cannot be saved.
|
||||
|
||||
|
||||
Using 'setup.py' command line script
|
||||
|
||||
@@ -40,9 +40,9 @@ file_env PGADMIN_DEFAULT_PASSWORD
|
||||
export CONFIG_DISTRO_FILE_PATH="${PGADMIN_CUSTOM_CONFIG_DISTRO_FILE:-/pgadmin4/config_distro.py}"
|
||||
# Populate config_distro.py. This has some default config, as well as anything
|
||||
# provided by the user through the PGADMIN_CONFIG_* environment variables.
|
||||
# Only update the file on first launch. The empty file is created during the
|
||||
# Only update the file on first launch. The empty file is created only in default path during the
|
||||
# container build so it can have the required ownership.
|
||||
if [ "$(wc -m "${CONFIG_DISTRO_FILE_PATH}" | awk '{ print $1 }')" = "0" ]; then
|
||||
if [ ! -e "${CONFIG_DISTRO_FILE_PATH}" ] || [ "$(wc -m "${CONFIG_DISTRO_FILE_PATH}" 2>/dev/null | awk '{ print $1 }')" = "0" ]; then
|
||||
cat << EOF > "${CONFIG_DISTRO_FILE_PATH}"
|
||||
CA_FILE = '/etc/ssl/certs/ca-certificates.crt'
|
||||
LOG_FILE = '/dev/null'
|
||||
@@ -53,8 +53,7 @@ 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-13': '/usr/local/pgsql-13'
|
||||
}
|
||||
EOF
|
||||
|
||||
@@ -73,6 +72,27 @@ if [ -n "${PGADMIN_CONFIG_CONFIG_DATABASE_URI}" ]; then
|
||||
external_config_db_exists=$(cd /pgadmin4/pgadmin/utils && /venv/bin/python3 -c "from check_external_config_db import check_external_config_db; val = check_external_config_db("${PGADMIN_CONFIG_CONFIG_DATABASE_URI}"); print(val)")
|
||||
fi
|
||||
|
||||
# DRY of the code to load the PGADMIN_SERVER_JSON_FILE
|
||||
function load_server_json_file() {
|
||||
export PGADMIN_SERVER_JSON_FILE="${PGADMIN_SERVER_JSON_FILE:-/pgadmin4/servers.json}"
|
||||
|
||||
EXTRA_ARGS=""
|
||||
|
||||
if [ "${PGADMIN_REPLACE_SERVERS_ON_STARTUP}" = "True" ]; then
|
||||
EXTRA_ARGS="--replace"
|
||||
fi
|
||||
|
||||
if [ -f "${PGADMIN_SERVER_JSON_FILE}" ]; then
|
||||
# When running in Desktop mode, no user is created
|
||||
# so we have to import servers anonymously
|
||||
if [ "${PGADMIN_CONFIG_SERVER_MODE}" = "False" ]; then
|
||||
/venv/bin/python3 /pgadmin4/setup.py load-servers "${PGADMIN_SERVER_JSON_FILE}" ${EXTRA_ARGS}
|
||||
else
|
||||
/venv/bin/python3 /pgadmin4/setup.py load-servers "${PGADMIN_SERVER_JSON_FILE}" --user "${PGADMIN_DEFAULT_EMAIL}" ${EXTRA_ARGS}
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
if [ ! -f /var/lib/pgadmin/pgadmin4.db ] && [ "${external_config_db_exists}" = "False" ]; then
|
||||
if [ -z "${PGADMIN_DEFAULT_EMAIL}" ] || { [ -z "${PGADMIN_DEFAULT_PASSWORD}" ] && [ -z "${PGADMIN_DEFAULT_PASSWORD_FILE}" ]; }; then
|
||||
echo 'You need to define the PGADMIN_DEFAULT_EMAIL and PGADMIN_DEFAULT_PASSWORD or PGADMIN_DEFAULT_PASSWORD_FILE environment variables.'
|
||||
@@ -88,11 +108,16 @@ if [ ! -f /var/lib/pgadmin/pgadmin4.db ] && [ "${external_config_db_exists}" = "
|
||||
if [ -n "${PGADMIN_CONFIG_ALLOW_SPECIAL_EMAIL_DOMAINS}" ]; then
|
||||
ALLOW_SPECIAL_EMAIL_DOMAINS=${PGADMIN_CONFIG_ALLOW_SPECIAL_EMAIL_DOMAINS}
|
||||
fi
|
||||
email_config="{'CHECK_EMAIL_DELIVERABILITY': ${CHECK_EMAIL_DELIVERABILITY}, 'ALLOW_SPECIAL_EMAIL_DOMAINS': ${ALLOW_SPECIAL_EMAIL_DOMAINS}}"
|
||||
echo "email config is ${email_config}"
|
||||
GLOBALLY_DELIVERABLE="True"
|
||||
if [ -n "${PGADMIN_CONFIG_GLOBALLY_DELIVERABLE}" ]; then
|
||||
GLOBALLY_DELIVERABLE=${PGADMIN_CONFIG_GLOBALLY_DELIVERABLE}
|
||||
fi
|
||||
email_config="{'CHECK_EMAIL_DELIVERABILITY': ${CHECK_EMAIL_DELIVERABILITY}, 'ALLOW_SPECIAL_EMAIL_DOMAINS': ${ALLOW_SPECIAL_EMAIL_DOMAINS}, 'GLOBALLY_DELIVERABLE': ${GLOBALLY_DELIVERABLE}}"
|
||||
echo "email config is ${email_config}"
|
||||
is_valid_email=$(cd /pgadmin4/pgadmin/utils && /venv/bin/python3 -c "from validation_utils import validate_email; val = validate_email('${PGADMIN_DEFAULT_EMAIL}', ${email_config}); print(val)")
|
||||
if echo "${is_valid_email}" | grep "False" > /dev/null; then
|
||||
echo "'${PGADMIN_DEFAULT_EMAIL}' does not appear to be a valid email address. Please reset the PGADMIN_DEFAULT_EMAIL environment variable and try again."
|
||||
echo "Validation output: ${is_valid_email}"
|
||||
exit 1
|
||||
fi
|
||||
# Switch back to root directory for further process
|
||||
@@ -107,19 +132,11 @@ if [ ! -f /var/lib/pgadmin/pgadmin4.db ] && [ "${external_config_db_exists}" = "
|
||||
# Importing pgadmin4 (from this script) is enough
|
||||
/venv/bin/python3 run_pgadmin.py
|
||||
|
||||
export PGADMIN_SERVER_JSON_FILE="${PGADMIN_SERVER_JSON_FILE:-/pgadmin4/servers.json}"
|
||||
export PGADMIN_PREFERENCES_JSON_FILE="${PGADMIN_PREFERENCES_JSON_FILE:-/pgadmin4/preferences.json}"
|
||||
|
||||
# Pre-load any required servers
|
||||
if [ -f "${PGADMIN_SERVER_JSON_FILE}" ]; then
|
||||
# When running in Desktop mode, no user is created
|
||||
# so we have to import servers anonymously
|
||||
if [ "${PGADMIN_CONFIG_SERVER_MODE}" = "False" ]; then
|
||||
/venv/bin/python3 /pgadmin4/setup.py load-servers "${PGADMIN_SERVER_JSON_FILE}"
|
||||
else
|
||||
/venv/bin/python3 /pgadmin4/setup.py load-servers "${PGADMIN_SERVER_JSON_FILE}" --user "${PGADMIN_DEFAULT_EMAIL}"
|
||||
fi
|
||||
fi
|
||||
load_server_json_file
|
||||
|
||||
# Pre-load any required preferences
|
||||
if [ -f "${PGADMIN_PREFERENCES_JSON_FILE}" ]; then
|
||||
if [ "${PGADMIN_CONFIG_SERVER_MODE}" = "False" ]; then
|
||||
@@ -141,7 +158,9 @@ if [ ! -f /var/lib/pgadmin/pgadmin4.db ] && [ "${external_config_db_exists}" = "
|
||||
chmod 600 /var/lib/pgadmin/storage/${PGADMIN_USER_CONFIG_DIR}/.pgpass
|
||||
fi
|
||||
fi
|
||||
|
||||
# If already initialised and PGADMIN_REPLACE_SERVERS_ON_STARTUP is set to true, then load the server json file.
|
||||
elif [ "${PGADMIN_REPLACE_SERVERS_ON_STARTUP}" = "True" ]; then
|
||||
load_server_json_file
|
||||
fi
|
||||
|
||||
# Start Postfix to handle password resets etc.
|
||||
|
||||
@@ -13,10 +13,10 @@ Either build the sources or get them from macports or similar:
|
||||
|
||||
## Building
|
||||
|
||||
1. To bundle a different version of Python from the default of 3.9.2, set the
|
||||
1. To bundle a different version of Python from the default of 3.13.1, set the
|
||||
*PGADMIN_PYTHON_VERSION* environment variable, e.g:
|
||||
|
||||
export PGADMIN_PYTHON_VERSION=3.8.5
|
||||
export PGADMIN_PYTHON_VERSION=3.13.1
|
||||
|
||||
2. If a path different from the default of /usr/local/pgsql for the PostgreSQL
|
||||
installation has been used, set the *PGADMIN_POSTGRES_DIR* environment variable
|
||||
|
||||
@@ -137,8 +137,7 @@ _build_docs() {
|
||||
source "${BUILD_ROOT}/venv/bin/activate"
|
||||
pip3 install --upgrade pip
|
||||
pip3 install -r "${SOURCE_DIR}/requirements.txt"
|
||||
# Due to issue https://github.com/sphinx-doc/sphinx/issues/11739, we have pinned the Sphinx version to 6.1.3.
|
||||
pip3 install sphinx==6.1.3
|
||||
pip3 install sphinx==7.4.7
|
||||
pip3 install sphinxcontrib-youtube
|
||||
|
||||
cd "${SOURCE_DIR}" || exit
|
||||
|
||||
@@ -53,8 +53,8 @@ if [ "${PGADMIN_POSTGRES_DIR}" == "" ]; then
|
||||
fi
|
||||
|
||||
if [ "${PGADMIN_PYTHON_VERSION}" == "" ]; then
|
||||
echo "PGADMIN_PYTHON_VERSION not set. Setting it to the default: 3.11.2"
|
||||
export PGADMIN_PYTHON_VERSION=3.11.2
|
||||
echo "PGADMIN_PYTHON_VERSION not set. Setting it to the default: 3.13.1"
|
||||
export PGADMIN_PYTHON_VERSION=3.13.1
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
\fs22 \
|
||||
\
|
||||
|
||||
\f1\i Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
\f1\i Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
\f0\i0 \
|
||||
\
|
||||
Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies.\
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
#########################################################################
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
@@ -10,7 +10,6 @@
|
||||
import builtins
|
||||
import os
|
||||
import sys
|
||||
import platform
|
||||
from codecs import open
|
||||
from importlib.machinery import SourceFileLoader
|
||||
|
||||
@@ -41,17 +40,7 @@ kerberos_extras = []
|
||||
# gssapi in it's own list
|
||||
for index, req in enumerate(all_requires):
|
||||
if 'psycopg[c]' in req:
|
||||
# Starting from Psycopg 3.1.20, ARM64 macOS binary packages are no
|
||||
# longer available for macOS versions before 14.0.
|
||||
_req = req.replace('psycopg[c]', 'psycopg[binary]')
|
||||
req = "psycopg[binary] == 3.1.19; sys_platform == 'darwin' and" \
|
||||
" platform_machine == 'arm64' and platform_release < '23.0' \n"\
|
||||
+ _req + "; (sys_platform == 'darwin' and" \
|
||||
" platform_machine == 'arm64' and" \
|
||||
" platform_release >= '23.0') or" \
|
||||
" (sys_platform == 'darwin' and" \
|
||||
" platform_machine != 'arm64'" \
|
||||
") or sys_platform != 'darwin'"
|
||||
req = req.replace('psycopg[c]', 'psycopg[binary]')
|
||||
|
||||
if 'gssapi' in req:
|
||||
kerberos_extras.append(req)
|
||||
@@ -91,11 +80,12 @@ setup(
|
||||
'Development Status :: 5 - Production/Stable',
|
||||
|
||||
# Supported programming languages
|
||||
'Programming Language :: Python :: 3.7',
|
||||
'Programming Language :: Python :: 3.8',
|
||||
'Programming Language :: Python :: 3.9',
|
||||
'Programming Language :: Python :: 3.10',
|
||||
'Programming Language :: Python :: 3.11'
|
||||
'Programming Language :: Python :: 3.11',
|
||||
'Programming Language :: Python :: 3.12',
|
||||
'Programming Language :: Python :: 3.13'
|
||||
],
|
||||
|
||||
keywords='pgadmin4,postgresql,postgres',
|
||||
|
||||
@@ -39,18 +39,15 @@ yum groupinstall -y "Development Tools"
|
||||
|
||||
if [ "${OS_VERSION}" == "8" ]; then
|
||||
yum install -y expect fakeroot postgresql15-devel python3.9-devel nodejs yarn rpm-build rpm-sign yum-utils krb5-devel
|
||||
# Due to issue https://github.com/sphinx-doc/sphinx/issues/11739, we have pinned the Sphinx version to 6.1.3.
|
||||
pip3.9 install sphinx==6.1.3
|
||||
pip3.9 install sphinx==7.4.7
|
||||
pip3.9 install sphinxcontrib-youtube
|
||||
elif [ "${OS_VERSION}" == "9" ]; then
|
||||
yum install -y expect libpq5-devel postgresql15-devel python3-devel nodejs yarn rpm-build rpm-sign yum-utils krb5-devel
|
||||
# Due to issue https://github.com/sphinx-doc/sphinx/issues/11739, we have pinned the Sphinx version to 6.1.3.
|
||||
pip3 install sphinx==6.1.3
|
||||
pip3 install sphinx==7.4.7
|
||||
pip3 install sphinxcontrib-youtube
|
||||
else
|
||||
yum install -y expect fakeroot postgresql15-devel python3-devel nodejs yarn rpm-build rpm-sign yum-utils krb5-devel
|
||||
# Due to issue https://github.com/sphinx-doc/sphinx/issues/11739, we have pinned the Sphinx version to 6.1.3.
|
||||
pip3 install sphinx==6.1.3
|
||||
pip3 install sphinx==7.4.7
|
||||
pip3 install sphinxcontrib-youtube
|
||||
fi
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
#########################################################################
|
||||
|
||||
@@ -204,7 +204,7 @@ examples shown below are the defaults for the build system, so if they match
|
||||
your requirements you don't need to set them. For PostgreSQL 16 and below:
|
||||
|
||||
SET "PGADMIN_POSTGRES_DIR=C:\build64\pgsql"
|
||||
SET "PGADMIN_PYTHON_DIR=C:\Python312"
|
||||
SET "PGADMIN_PYTHON_DIR=C:\Python313"
|
||||
SET "PGADMIN_KRB5_DIR=C:\build64\krb5"
|
||||
SET "PGADMIN_INNOTOOL_DIR=C:\Program Files (x86)\Inno Setup 6"
|
||||
SET "PGADMIN_SIGNTOOL_DIR=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64"
|
||||
@@ -214,7 +214,7 @@ your requirements you don't need to set them. For PostgreSQL 16 and below:
|
||||
For PostgreSQL 17 and later:
|
||||
|
||||
SET "PGADMIN_POSTGRES_DIR=C:\build64"
|
||||
SET "PGADMIN_PYTHON_DIR=C:\Python312"
|
||||
SET "PGADMIN_PYTHON_DIR=C:\Python313"
|
||||
SET "PGADMIN_KRB5_DIR=C:\build64"
|
||||
SET "PGADMIN_INNOTOOL_DIR=C:\Program Files (x86)\Inno Setup 6"
|
||||
SET "PGADMIN_SIGNTOOL_DIR=C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64"
|
||||
|
||||
@@ -8,9 +8,8 @@
|
||||
#define MyAppArchitecturesMode "x64"
|
||||
#define MyAppVCDist MYAPP_VCDIST
|
||||
#define MyAppInvalidPath "Please provide a valid path."
|
||||
#define MyAppErrorMsgIsWin32 "You already have a 32 bit installation of pgAdmin 4. Please uninstall this before installing the 64 bit version."
|
||||
#define MyAppErrorMsgIsWin64 "You already have a 64 bit installation of pgAdmin 4. Please uninstall this before installing the 32 bit version."
|
||||
#define MinimumWindowsVer "6.2.9200"
|
||||
#define CheckOldInstallerVersion "v8"
|
||||
|
||||
[Setup]
|
||||
AppId={#MyAppName}{#MyAppVersion}
|
||||
@@ -51,7 +50,7 @@ english.NewerVersionExists=A newer version of {#MyAppName}
|
||||
english.InvalidPath={#MyAppInvalidPath}
|
||||
|
||||
[Icons]
|
||||
Name: {group}\{#MyAppName} {#MyAppVersion}; Filename: {app}\runtime\{#MyAppExeName}; IconFilename: {app}\pgAdmin4.ico; WorkingDir: {app}\runtime;
|
||||
Name: {group}\{#MyAppName}; Filename: {app}\runtime\{#MyAppExeName}; IconFilename: {app}\pgAdmin4.ico; WorkingDir: {app}\runtime;
|
||||
|
||||
[Files]
|
||||
Source: "..\..\win-build\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs;
|
||||
@@ -60,10 +59,10 @@ Source: "..\..\win-build\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdi
|
||||
Filename: "{app}\installer\{#MyAppVCDist}"; StatusMsg: "VC runtime redistributable package"; Parameters: "/passive /verysilent /norestart"; Check: InstallVC;
|
||||
|
||||
[Registry]
|
||||
Root: HKA; Subkey: "Software\{#MyAppName}\{#MyAppVersion}"; Flags: uninsdeletekeyifempty
|
||||
Root: HKA; Subkey: "Software\{#MyAppName}\{#MyAppVersion}"; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\{#MyAppName}\{#MyAppVersion}"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"
|
||||
Root: HKA; Subkey: "Software\{#MyAppName}\{#MyAppVersion}"; ValueType: string; ValueName: "Version"; ValueData: "{#MyAppFullVersion}"
|
||||
Root: HKA; Subkey: "Software\{#MyAppName}"; Flags: uninsdeletekeyifempty
|
||||
Root: HKA; Subkey: "Software\{#MyAppName}"; Flags: uninsdeletekey
|
||||
Root: HKA; Subkey: "Software\{#MyAppName}"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"
|
||||
Root: HKA; Subkey: "Software\{#MyAppName}"; ValueType: string; ValueName: "Version"; ValueData: "{#MyAppFullVersion}"
|
||||
|
||||
[Code]
|
||||
var
|
||||
@@ -145,98 +144,76 @@ begin
|
||||
Result := 0;
|
||||
end;
|
||||
|
||||
function IsPathValid(Path: string): Boolean;
|
||||
// This function is invoked only when the V8 version is already installed.
|
||||
// It retrieves the path of the uninstaller to remove the installed V8 version.
|
||||
function GetUninstallerPath(): String;
|
||||
var
|
||||
I: Integer;
|
||||
Ret: Boolean;
|
||||
sUnInstRegKey: String;
|
||||
sUnInstPath: String;
|
||||
begin
|
||||
Ret := True;
|
||||
Path := Uppercase(Path);
|
||||
Result :=
|
||||
(Length(Path) >= 3) and
|
||||
(Path[1] >= 'A') and (Path[1] <= 'Z') and
|
||||
(Path[2] = ':') and
|
||||
(Path[3] = '\');
|
||||
sUnInstRegKey := 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}{#CheckOldInstallerVersion}_is1';
|
||||
sUnInstPath := '';
|
||||
RegQueryStringValue(HKA, sUnInstRegKey, 'UninstallString', sUnInstPath);
|
||||
Result := sUnInstPath;
|
||||
end;
|
||||
|
||||
if Result then
|
||||
begin
|
||||
for I := 3 to Length(Path) do
|
||||
begin
|
||||
case Path[I] of
|
||||
'0'..'9', 'A'..'Z', '\', ' ', '.', '-', '_', '(', ')':
|
||||
else
|
||||
begin
|
||||
Ret := False;
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
Result := Ret;
|
||||
// This function is invoked only when the V8 version is already installed.
|
||||
// It is used to uninstall the installed V8 version.
|
||||
// Return Values:
|
||||
// 1 - Uninstaller path is empty.
|
||||
// 2 - Error executing the Uninstaller.
|
||||
// 3 - Successfully executed the Uninstaller
|
||||
function UnInstallOldVersion(): Integer;
|
||||
var
|
||||
sUnInstallerPath: String;
|
||||
iResultCode: Integer;
|
||||
begin
|
||||
// default return value
|
||||
Result := 0;
|
||||
|
||||
// get the uninstall path of the old app
|
||||
sUnInstallerPath := GetUninstallerPath();
|
||||
if sUnInstallerPath <> '' then begin
|
||||
sUnInstallerPath := RemoveQuotes(sUnInstallerPath);
|
||||
if Exec(sUnInstallerPath, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then
|
||||
Result := 3
|
||||
else
|
||||
Result := 2;
|
||||
end else
|
||||
Result := 1;
|
||||
end;
|
||||
|
||||
function CheckPgAdminAlreadyInstalled: Boolean;
|
||||
var
|
||||
Version: String;
|
||||
InstallationFound: Boolean;
|
||||
begin
|
||||
InstallationFound := False;
|
||||
// Check the installation mode 64 or 32 bit of installer
|
||||
if Is64BitInstallMode then
|
||||
if RegKeyExists(HKA,'Software\{#MyAppName}\{#CheckOldInstallerVersion}') then
|
||||
begin
|
||||
|
||||
// Check if pgAdmin 32 bit is already installed
|
||||
RegQueryStringValue(HKLM32,'Software\{#MyAppName}\{#MyAppVersion}', 'Version', Version);
|
||||
|
||||
// If version is found then shouldn't install 64bit - abort
|
||||
if Length(Version) > 0 then
|
||||
if UnInstallOldVersion() < 3 then
|
||||
begin
|
||||
MsgBox(ExpandConstant('{#MyAppErrorMsgIsWin32}'), mbCriticalError, MB_OK);
|
||||
Result := False;
|
||||
InstallationFound := True;
|
||||
Result := False;
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
// Suppose system is running a 32-bit version of Windows then no need to check HKLM64 in RegQueryStringValue
|
||||
// So IsWin64 - will make sure its should only execute on 64-bit version of windows.
|
||||
if IsWin64 then
|
||||
begin
|
||||
// Check if pgAdmin 64 bit is already installed
|
||||
RegQueryStringValue(HKLM64,'Software\{#MyAppName}\{#MyAppVersion}', 'Version', Version);
|
||||
|
||||
// If version is found the shouldn't install 32bit - abort
|
||||
if Length(Version) > 0 then
|
||||
begin
|
||||
MsgBox(ExpandConstant('{#MyAppErrorMsgIsWin64}'), mbCriticalError, MB_OK);
|
||||
Result := False;
|
||||
InstallationFound := True;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
if not (InstallationFound) then
|
||||
begin
|
||||
if RegValueExists(HKEY_LOCAL_MACHINE,'Software\{#MyAppName}\{#MyAppVersion}', 'Version') then
|
||||
begin
|
||||
UpgradeMode := True;
|
||||
RegQueryStringValue(HKEY_LOCAL_MACHINE,'Software\{#MyAppName}\{#MyAppVersion}', 'Version', Version);
|
||||
if CompareVersions(Version, '{#MyAppFullVersion}') = 1 then
|
||||
begin
|
||||
MsgBox(ExpandConstant('{cm:NewerVersionExists}' + '(v' + Version + ') is already installed' ), mbInformation, MB_OK);
|
||||
Result := False;
|
||||
end
|
||||
else
|
||||
begin
|
||||
Result := True;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
if ( not (InstallationFound) and not (UpgradeMode) ) then
|
||||
if RegValueExists(HKA,'Software\{#MyAppName}', 'Version') then
|
||||
begin
|
||||
// This is required as it will be passed on to the InitializeSetup function
|
||||
Result := True;
|
||||
UpgradeMode := True;
|
||||
RegQueryStringValue(HKA,'Software\{#MyAppName}', 'Version', Version);
|
||||
if CompareVersions(Version, '{#MyAppFullVersion}') = 1 then
|
||||
begin
|
||||
MsgBox(ExpandConstant('{cm:NewerVersionExists}' + '(v' + Version + ') is already installed' ), mbInformation, MB_OK);
|
||||
Result := False;
|
||||
end
|
||||
else
|
||||
begin
|
||||
Result := True;
|
||||
end;
|
||||
end;
|
||||
|
||||
if ( not (UpgradeMode) ) then
|
||||
begin
|
||||
// This is required as it will be passed on to the InitializeSetup function
|
||||
Result := True;
|
||||
end;
|
||||
end;
|
||||
|
||||
@@ -328,16 +305,6 @@ var
|
||||
begin
|
||||
Ret := True;
|
||||
case CurPageID of
|
||||
wpSelectDir:
|
||||
begin
|
||||
// Validate InstallDir path
|
||||
if Not IsPathValid(ExpandConstant('{app}')) then
|
||||
begin
|
||||
MsgBox(ExpandConstant('{cm:InvalidPath}'), mbError, MB_OK);
|
||||
Ret := False;
|
||||
end;
|
||||
end;
|
||||
|
||||
wpReady:
|
||||
begin
|
||||
if (IsUpgradeMode) then
|
||||
|
||||
@@ -20,15 +20,16 @@ Flask-Paranoid==0.*
|
||||
Flask-Babel==4.0.*
|
||||
Flask-Security-Too==5.5.*; python_version >= '3.10'
|
||||
Flask-Security-Too==5.4.*; python_version <= '3.9'
|
||||
Flask-SocketIO==5.4.*
|
||||
Flask-SocketIO==5.5.*
|
||||
WTForms==3.2.*; python_version >= '3.10'
|
||||
WTForms==3.1.*; python_version <= '3.9'
|
||||
passlib==1.*
|
||||
pytz==2024.*
|
||||
pytz==2024.*; python_version <= '3.8'
|
||||
pytz==2025.*; python_version >= '3.9'
|
||||
speaklater3==1.*
|
||||
sqlparse==0.*
|
||||
psutil==6.1.*
|
||||
psycopg[c]==3.2.3
|
||||
psycopg[c]==3.2.4
|
||||
python-dateutil==2.*
|
||||
SQLAlchemy==2.*
|
||||
bcrypt==4.2.*
|
||||
@@ -38,11 +39,12 @@ ldap3==2.*
|
||||
gssapi==1.9.*
|
||||
user-agents==2.2.0
|
||||
pywinpty==2.0.*; sys_platform=="win32"
|
||||
Authlib==1.3.*
|
||||
Authlib==1.3.*; python_version <= '3.8'
|
||||
Authlib==1.4.*; python_version >= '3.9'
|
||||
pyotp==2.*
|
||||
qrcode==7.*; python_version <= '3.8'
|
||||
qrcode[pil]==8.*; python_version >= '3.9'
|
||||
boto3==1.35.*
|
||||
boto3==1.36.*
|
||||
urllib3==1.26.*
|
||||
azure-mgmt-rdbms==10.1.0
|
||||
azure-mgmt-resource==23.2.0
|
||||
@@ -53,7 +55,7 @@ google-auth-oauthlib==1.2.1
|
||||
keyring==25.*
|
||||
Werkzeug==3.0.*; python_version <= '3.8'
|
||||
Werkzeug==3.1.*; python_version >= '3.9'
|
||||
typer[all]==0.14.*
|
||||
typer[all]==0.15.*
|
||||
setuptools==75.*; python_version >= '3.12'
|
||||
jsonformatter~=0.3.4
|
||||
libgravatar==1.0.*
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// pgAdmin 4 - PostgreSQL Tools
|
||||
//
|
||||
// Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
// Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
// This software is released under the PostgreSQL Licence
|
||||
//
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -12,12 +12,13 @@
|
||||
},
|
||||
"packageManager": "yarn@3.8.7",
|
||||
"devDependencies": {
|
||||
"electron": "latest",
|
||||
"eslint": "^9.16.0"
|
||||
"electron": "35.0.3",
|
||||
"eslint": "^9.23.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^1.7.8",
|
||||
"electron-context-menu": "^4.0.4",
|
||||
"axios": "^1.8.4",
|
||||
"electron-context-menu": "^4.0.5",
|
||||
"electron-dl": "^4.0.0",
|
||||
"electron-store": "^10.0.0"
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// pgAdmin 4 - PostgreSQL Tools
|
||||
//
|
||||
// Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
// Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
// This software is released under the PostgreSQL Licence
|
||||
//
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// pgAdmin 4 - PostgreSQL Tools
|
||||
//
|
||||
// Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
// Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
// This software is released under the PostgreSQL Licence
|
||||
//
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// pgAdmin 4 - PostgreSQL Tools
|
||||
//
|
||||
// Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
// Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
// This software is released under the PostgreSQL Licence
|
||||
//
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
//
|
||||
// pgAdmin 4 - PostgreSQL Tools
|
||||
//
|
||||
// Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
// Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
// This software is released under the PostgreSQL Licence
|
||||
//
|
||||
//////////////////////////////////////////////////////////////
|
||||
import { app, BrowserWindow, dialog, ipcMain, Menu, shell } from 'electron';
|
||||
import { app, BrowserWindow, dialog, ipcMain, Menu, shell, screen } from 'electron';
|
||||
import axios from 'axios';
|
||||
import Store from 'electron-store';
|
||||
import fs from 'fs';
|
||||
@@ -16,6 +16,7 @@ import { spawn } from 'child_process';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { setupMenu } from './menu.js';
|
||||
import contextMenu from 'electron-context-menu';
|
||||
import { CancelError, download } from 'electron-dl';
|
||||
|
||||
const configStore = new Store({
|
||||
defaults: {
|
||||
@@ -30,6 +31,9 @@ let startPageUrl = null;
|
||||
let serverCheckUrl = null;
|
||||
let pgAdminMainScreen = null;
|
||||
|
||||
let configureWindow = null,
|
||||
viewLogWindow = null;
|
||||
|
||||
let serverPort = 5050;
|
||||
let appStartTime = (new Date()).getTime();
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
@@ -75,22 +79,45 @@ contextMenu({
|
||||
|
||||
Menu.setApplicationMenu(null);
|
||||
|
||||
// Check if the given position is within the display bounds.
|
||||
// pgAdmin tried to open the window on the display where the it
|
||||
// was last closed.
|
||||
function isWithinDisplayBounds(pos) {
|
||||
const displays = screen.getAllDisplays();
|
||||
return displays.reduce((result, display) => {
|
||||
const area = display.workArea;
|
||||
return (
|
||||
result ||
|
||||
(pos.x >= area.x &&
|
||||
pos.y >= area.y &&
|
||||
pos.x < area.x + area.width &&
|
||||
pos.y < area.y + area.height)
|
||||
);
|
||||
}, false);
|
||||
}
|
||||
|
||||
function openConfigure() {
|
||||
const win = new BrowserWindow({
|
||||
show: false,
|
||||
width: 600,
|
||||
height: 580,
|
||||
position: 'center',
|
||||
resizable: false,
|
||||
icon: '../../assets/pgAdmin4.png',
|
||||
webPreferences: {
|
||||
preload: path.join(__dirname, 'other_preload.js'),
|
||||
},
|
||||
});
|
||||
win.loadFile('./src/html/configure.html');
|
||||
win.once('ready-to-show', ()=>{
|
||||
win.show();
|
||||
});
|
||||
if (configureWindow === null || configureWindow?.isDestroyed()) {
|
||||
configureWindow = new BrowserWindow({
|
||||
show: false,
|
||||
width: 600,
|
||||
height: 580,
|
||||
position: 'center',
|
||||
resizable: false,
|
||||
parent: pgAdminMainScreen,
|
||||
icon: '../../assets/pgAdmin4.png',
|
||||
webPreferences: {
|
||||
preload: path.join(__dirname, 'other_preload.js'),
|
||||
},
|
||||
});
|
||||
configureWindow.loadFile('./src/html/configure.html');
|
||||
configureWindow.once('ready-to-show', ()=>{
|
||||
configureWindow.show();
|
||||
});
|
||||
} else {
|
||||
configureWindow.hide();
|
||||
configureWindow.show();
|
||||
}
|
||||
}
|
||||
|
||||
function showErrorDialog(intervalID) {
|
||||
@@ -126,6 +153,28 @@ function reloadApp() {
|
||||
currWin.webContents.reload();
|
||||
}
|
||||
|
||||
async function desktopFileDownload(payload) {
|
||||
const currWin = BrowserWindow.getFocusedWindow();
|
||||
try {
|
||||
await download(currWin, payload.downloadUrl, {
|
||||
filename: payload.fileName,
|
||||
saveAs: payload.prompt_for_download_location,
|
||||
onProgress: (progress) => {
|
||||
currWin.webContents.send('download-progress', progress);
|
||||
},
|
||||
onCompleted: (item) => {
|
||||
currWin.webContents.send('download-complete', item);
|
||||
if (payload.automatically_open_downloaded_file)
|
||||
shell.openPath(item.path);
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
if (!(error instanceof CancelError)) {
|
||||
misc.writeServerLog(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This functions is used to start the pgAdmin4 server by spawning a
|
||||
// separate process.
|
||||
function startDesktopMode() {
|
||||
@@ -281,28 +330,39 @@ function launchPgAdminWindow() {
|
||||
|
||||
setupMenu(pgAdminMainScreen, {
|
||||
'view_logs': ()=>{
|
||||
const win = new BrowserWindow({
|
||||
show: false,
|
||||
width: 800,
|
||||
height: 460,
|
||||
position: 'center',
|
||||
resizable: false,
|
||||
icon: '../../assets/pgAdmin4.png',
|
||||
webPreferences: {
|
||||
preload: path.join(__dirname, 'other_preload.js'),
|
||||
},
|
||||
});
|
||||
win.loadFile('./src/html/view_log.html');
|
||||
win.once('ready-to-show', ()=>{
|
||||
win.show();
|
||||
});
|
||||
if(viewLogWindow === null || viewLogWindow?.isDestroyed()) {
|
||||
viewLogWindow = new BrowserWindow({
|
||||
show: false,
|
||||
width: 800,
|
||||
height: 460,
|
||||
position: 'center',
|
||||
resizable: false,
|
||||
parent: pgAdminMainScreen,
|
||||
icon: '../../assets/pgAdmin4.png',
|
||||
webPreferences: {
|
||||
preload: path.join(__dirname, 'other_preload.js'),
|
||||
},
|
||||
});
|
||||
viewLogWindow.loadFile('./src/html/view_log.html');
|
||||
viewLogWindow.once('ready-to-show', ()=>{
|
||||
viewLogWindow.show();
|
||||
});
|
||||
} else {
|
||||
viewLogWindow.hide();
|
||||
viewLogWindow.show();
|
||||
}
|
||||
},
|
||||
'configure': openConfigure,
|
||||
'reloadApp': reloadApp,
|
||||
});
|
||||
|
||||
pgAdminMainScreen.loadURL(startPageUrl);
|
||||
pgAdminMainScreen.setBounds(configStore.get('bounds'));
|
||||
|
||||
const bounds = configStore.get('bounds');
|
||||
|
||||
(bounds && isWithinDisplayBounds({x: bounds.x, y: bounds.y})) ? pgAdminMainScreen.setBounds(bounds) :
|
||||
pgAdminMainScreen.setBounds({x: 0, y: 0, width: 1024, height: 768});
|
||||
|
||||
pgAdminMainScreen.show();
|
||||
|
||||
pgAdminMainScreen.webContents.setWindowOpenHandler(({url})=>{
|
||||
@@ -369,6 +429,7 @@ ipcMain.on('log', (text) => ()=>{
|
||||
misc.writeServerLog(text);
|
||||
});
|
||||
ipcMain.on('reloadApp', reloadApp);
|
||||
ipcMain.on('onFileDownload', (_, payload) => desktopFileDownload(payload));
|
||||
ipcMain.handle('checkPortAvailable', async (_e, fixedPort)=>{
|
||||
try {
|
||||
await misc.getAvailablePort(fixedPort);
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// pgAdmin 4 - PostgreSQL Tools
|
||||
//
|
||||
// Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
// Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
// This software is released under the PostgreSQL Licence
|
||||
//
|
||||
//////////////////////////////////////////////////////////////
|
||||
@@ -24,4 +24,5 @@ contextBridge.exposeInMainWorld('electronUI', {
|
||||
showSaveDialog: (options) => ipcRenderer.invoke('showSaveDialog', options),
|
||||
log: (text)=> ipcRenderer.send('log', text),
|
||||
reloadApp: ()=>{ipcRenderer.send('reloadApp');},
|
||||
onFileDownload: (payload) => ipcRenderer.send('onFileDownload', payload),
|
||||
});
|
||||
@@ -25,13 +25,13 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@eslint-community/eslint-utils@npm:^4.2.0":
|
||||
version: 4.4.1
|
||||
resolution: "@eslint-community/eslint-utils@npm:4.4.1"
|
||||
version: 4.5.1
|
||||
resolution: "@eslint-community/eslint-utils@npm:4.5.1"
|
||||
dependencies:
|
||||
eslint-visitor-keys: ^3.4.3
|
||||
peerDependencies:
|
||||
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
|
||||
checksum: a7ffc838eb6a9ef594cda348458ccf38f34439ac77dc090fa1c120024bcd4eb911dfd74d5ef44d42063e7949fa7c5123ce714a015c4abb917d4124be1bd32bfe
|
||||
checksum: 853e681fd134e96ce88066b0cfb3ce8b7a87afc9ea207139059f51e302eb9e6de4ab73c9eeb3995407bd6c08f836aade9fce47e91124c254a4eea24a5465c2ac
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -42,27 +42,36 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@eslint/config-array@npm:^0.19.0":
|
||||
version: 0.19.0
|
||||
resolution: "@eslint/config-array@npm:0.19.0"
|
||||
"@eslint/config-array@npm:^0.19.2":
|
||||
version: 0.19.2
|
||||
resolution: "@eslint/config-array@npm:0.19.2"
|
||||
dependencies:
|
||||
"@eslint/object-schema": ^2.1.4
|
||||
"@eslint/object-schema": ^2.1.6
|
||||
debug: ^4.3.1
|
||||
minimatch: ^3.1.2
|
||||
checksum: ceeddd3733316cbc7f1e61fc2906fedeaefdf1b3cf363726714dea0e9dece378a2b233cb6429d7d87534707a1dd2e5efb0197749553834ee30aee817820a71aa
|
||||
checksum: 1c707e04fc2951079b32d2cb1c939ce25e863cd1329c1bd363a285b2a5caaaf88b97ddbf354cc46d1334097dc749f79b0fae33151dc2dfb9a60ba14288c65b39
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@eslint/core@npm:^0.9.0":
|
||||
version: 0.9.0
|
||||
resolution: "@eslint/core@npm:0.9.0"
|
||||
checksum: ea8ded3eba82d9451eca7e989c4ebf1dca95bc705e70cd2f3e55cc576e851183778344632de410d8cd9f85e862fd88fb8fda510aad00698765aec3110533af82
|
||||
"@eslint/config-helpers@npm:^0.2.0":
|
||||
version: 0.2.0
|
||||
resolution: "@eslint/config-helpers@npm:0.2.0"
|
||||
checksum: 36e857165f1d4661ce1dd31e739135e49b3fc0cf1dcbd64e07e53475441640ab0b7abefa3e9718a598c570ee05a91b2f91cd74c008fa30fc3db8b05d07645fb2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@eslint/eslintrc@npm:^3.2.0":
|
||||
version: 3.2.0
|
||||
resolution: "@eslint/eslintrc@npm:3.2.0"
|
||||
"@eslint/core@npm:^0.12.0":
|
||||
version: 0.12.0
|
||||
resolution: "@eslint/core@npm:0.12.0"
|
||||
dependencies:
|
||||
"@types/json-schema": ^7.0.15
|
||||
checksum: 3979af324102a3af2742060360563ba6b9525b8e1e524ad3d3e31e65af27db554b61d1cdfeaa42e15fb7d9ce9097c44225fd9e4f8193576accc1772457b88c12
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@eslint/eslintrc@npm:^3.3.1":
|
||||
version: 3.3.1
|
||||
resolution: "@eslint/eslintrc@npm:3.3.1"
|
||||
dependencies:
|
||||
ajv: ^6.12.4
|
||||
debug: ^4.3.2
|
||||
@@ -73,30 +82,31 @@ __metadata:
|
||||
js-yaml: ^4.1.0
|
||||
minimatch: ^3.1.2
|
||||
strip-json-comments: ^3.1.1
|
||||
checksum: c898e4d12f4c9a79a61ee3c91e38eea5627a04e021cb749191e8537445858bfe32f810eca0cb2dc9902b8ad8b65ca07ef7221dc4bad52afe60cbbf50ec56c236
|
||||
checksum: 8241f998f0857abf5a615072273b90b1244d75c1c45d217c6a8eb444c6e12bbb5506b4879c14fb262eb72b7d8e3d2f0542da2db1a7f414a12496ebb790fb4d62
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@eslint/js@npm:9.16.0":
|
||||
version: 9.16.0
|
||||
resolution: "@eslint/js@npm:9.16.0"
|
||||
checksum: ba2d7f7266df827df72cec069df9284ad5e7edb4894a8c58c41db0d489136b22815dc76cd34cf565284979feb4d3a8197b511e08529c03f30c80b5235d25030b
|
||||
"@eslint/js@npm:9.23.0":
|
||||
version: 9.23.0
|
||||
resolution: "@eslint/js@npm:9.23.0"
|
||||
checksum: 5ce796f9fd4cb7b8995062bd7697bf4406560089af039fe1f548b9d0948570763fa6d9f848f87fb13558ab85d4d88152d94d82fb9f6cf091b0dc4b4d6e15cfba
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@eslint/object-schema@npm:^2.1.4":
|
||||
version: 2.1.4
|
||||
resolution: "@eslint/object-schema@npm:2.1.4"
|
||||
checksum: 5a03094115bcdab7991dbbc5d17a9713f394cebb4b44d3eaf990d7487b9b8e1877b817997334ab40be52e299a0384595c6f6ba91b389901e5e1d21efda779271
|
||||
"@eslint/object-schema@npm:^2.1.6":
|
||||
version: 2.1.6
|
||||
resolution: "@eslint/object-schema@npm:2.1.6"
|
||||
checksum: e32e565319f6544d36d3fa69a3e163120722d12d666d1a4525c9a6f02e9b54c29d9b1f03139e25d7e759e08dda8da433590bc23c09db8d511162157ef1b86a4c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@eslint/plugin-kit@npm:^0.2.3":
|
||||
version: 0.2.3
|
||||
resolution: "@eslint/plugin-kit@npm:0.2.3"
|
||||
"@eslint/plugin-kit@npm:^0.2.7":
|
||||
version: 0.2.7
|
||||
resolution: "@eslint/plugin-kit@npm:0.2.7"
|
||||
dependencies:
|
||||
"@eslint/core": ^0.12.0
|
||||
levn: ^0.4.1
|
||||
checksum: b93b9c3f5b1722d09cc4e609abd4510130f659f70f6417b68ac7c4ad9fbf9e3d4f0ef5b6f2bad106eb8c1c1b2146bd0391e0a1c00ddeae46c917f175b8c0da4b
|
||||
checksum: e5d9be6ae54c7abd4605025e5831ac16dd0636ac5d41fbfcd8898a5d29711a2fb1fc8c784aa68a1469e66c8d41965da70d7a7516f9c2bca1c84342dd344bbb8e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -131,10 +141,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@humanwhocodes/retry@npm:^0.4.1":
|
||||
version: 0.4.1
|
||||
resolution: "@humanwhocodes/retry@npm:0.4.1"
|
||||
checksum: f11167c28e8266faba470fd273cbaafe2827523492bc18c5623015adb7ed66f46b2e542e3d756fed9ca614300249267814220c2f5f03a59e07fdfa64fc14ad52
|
||||
"@humanwhocodes/retry@npm:^0.4.2":
|
||||
version: 0.4.2
|
||||
resolution: "@humanwhocodes/retry@npm:0.4.2"
|
||||
checksum: 764127449a9f97d807b9c47f898fce8d7e0e8e8438366116b9ddcaacded99b2c285b8eed2cfdd5fdcb68be47728218db949f9618a58c0d3898d9fd14a6d6671e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -167,9 +177,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@types/estree@npm:^1.0.6":
|
||||
version: 1.0.6
|
||||
resolution: "@types/estree@npm:1.0.6"
|
||||
checksum: 8825d6e729e16445d9a1dd2fb1db2edc5ed400799064cd4d028150701031af012ba30d6d03fe9df40f4d7a437d0de6d2b256020152b7b09bde9f2e420afdffd9
|
||||
version: 1.0.7
|
||||
resolution: "@types/estree@npm:1.0.7"
|
||||
checksum: d9312b7075bdd08f3c9e1bb477102f5458aaa42a8eec31a169481ce314ca99ac716645cff4fca81ea65a2294b0276a0de63159d1baca0f8e7b5050a92de950ad
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -196,21 +206,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/node@npm:*":
|
||||
version: 22.10.1
|
||||
resolution: "@types/node@npm:22.10.1"
|
||||
"@types/node@npm:*, @types/node@npm:^22.7.7":
|
||||
version: 22.13.13
|
||||
resolution: "@types/node@npm:22.13.13"
|
||||
dependencies:
|
||||
undici-types: ~6.20.0
|
||||
checksum: 5a9b81500f288a8fb757b61bd939f99f72b6cb59347a5bae52dd1c2c87100ebbaa9da4256ef3cb9add2090e8704cda1d9a1ffc14ccd5db47a6466c8bae10ebcb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/node@npm:^20.9.0":
|
||||
version: 20.17.9
|
||||
resolution: "@types/node@npm:20.17.9"
|
||||
dependencies:
|
||||
undici-types: ~6.19.2
|
||||
checksum: 2fc67ba937d2c4e7a52f0ccf71b8b4c616dcfa1ad6cd5a726582fd3cbf4f409c2eb44595592580f782c2ade05f8130df072dd04ac064fe150cfcd7849e643500
|
||||
checksum: 763c120725c4817227d3043095fd1e764744b2f3632e3e3c8242e1620a8e6fe1c9eeae38074dee3e39af6b890de142c3b6067f9b31e36635c44f3f5f4f2bb8cf
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -242,11 +243,11 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"acorn@npm:^8.14.0":
|
||||
version: 8.14.0
|
||||
resolution: "acorn@npm:8.14.0"
|
||||
version: 8.14.1
|
||||
resolution: "acorn@npm:8.14.1"
|
||||
bin:
|
||||
acorn: bin/acorn
|
||||
checksum: 8755074ba55fff94e84e81c72f1013c2d9c78e973c31231c8ae505a5f966859baf654bddd75046bffd73ce816b149298977fff5077a3033dedba0ae2aad152d4
|
||||
checksum: 260d9bb6017a1b6e42d31364687f0258f78eb20210b36ef2baad38fd619d78d4e95ff7dde9b3dbe0d81f137f79a8d651a845363a26e6985997f7b71145dc5e94
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -276,7 +277,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ajv@npm:^8.0.0, ajv@npm:^8.16.0":
|
||||
"ajv@npm:^8.0.0, ajv@npm:^8.17.1":
|
||||
version: 8.17.1
|
||||
resolution: "ajv@npm:8.17.1"
|
||||
dependencies:
|
||||
@@ -335,14 +336,14 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"axios@npm:^1.7.8":
|
||||
version: 1.7.8
|
||||
resolution: "axios@npm:1.7.8"
|
||||
"axios@npm:^1.8.4":
|
||||
version: 1.8.4
|
||||
resolution: "axios@npm:1.8.4"
|
||||
dependencies:
|
||||
follow-redirects: ^1.15.6
|
||||
form-data: ^4.0.0
|
||||
proxy-from-env: ^1.1.0
|
||||
checksum: 3d21652faf8e29fb36c47517d2872bb5e2285127a24f5c53ce23082c4eac7f5a88de84dd49d4a1a83068e5301dcfd9067b41e5fbd00b0d20ab7b0a843559273d
|
||||
checksum: e901dc1730bdcd769839b3d93ae6d6457a53d79b19a0eb623ebfea333441259ab51e63ca118baa47a5156567401466ac739f31087b4ee5e6770ab2e227484538
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -399,16 +400,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"call-bind@npm:^1.0.7":
|
||||
version: 1.0.7
|
||||
resolution: "call-bind@npm:1.0.7"
|
||||
"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2":
|
||||
version: 1.0.2
|
||||
resolution: "call-bind-apply-helpers@npm:1.0.2"
|
||||
dependencies:
|
||||
es-define-property: ^1.0.0
|
||||
es-errors: ^1.3.0
|
||||
function-bind: ^1.1.2
|
||||
get-intrinsic: ^1.2.4
|
||||
set-function-length: ^1.2.1
|
||||
checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029
|
||||
checksum: b2863d74fcf2a6948221f65d95b91b4b2d90cfe8927650b506141e669f7d5de65cea191bf788838bc40d13846b7886c5bc5c84ab96c3adbcf88ad69a72fcdc6b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -481,23 +479,23 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"conf@npm:^13.0.0":
|
||||
version: 13.0.1
|
||||
resolution: "conf@npm:13.0.1"
|
||||
version: 13.1.0
|
||||
resolution: "conf@npm:13.1.0"
|
||||
dependencies:
|
||||
ajv: ^8.16.0
|
||||
ajv: ^8.17.1
|
||||
ajv-formats: ^3.0.1
|
||||
atomically: ^2.0.3
|
||||
debounce-fn: ^6.0.0
|
||||
dot-prop: ^9.0.0
|
||||
env-paths: ^3.0.0
|
||||
json-schema-typed: ^8.0.1
|
||||
semver: ^7.6.2
|
||||
uint8array-extras: ^1.1.0
|
||||
checksum: 3e6a5cd26007c66aa5e461dfa65fe8bfee97cb6d95614ac358c8a5d7ba234b0b24f1a40a60069b48ef5bdd4309517bda95716a0b7a2ae4f5e23889cc789741bc
|
||||
semver: ^7.6.3
|
||||
uint8array-extras: ^1.4.0
|
||||
checksum: 621fb7d5ed9ff22e7e3b0315b67b38a8ad074d479816383189e75279dab92e760df0644f93762c4a84e644768d9370611744e017f4c6d6dae86ddbb035756127
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cross-spawn@npm:^7.0.5":
|
||||
"cross-spawn@npm:^7.0.6":
|
||||
version: 7.0.6
|
||||
resolution: "cross-spawn@npm:7.0.6"
|
||||
dependencies:
|
||||
@@ -518,14 +516,14 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2":
|
||||
version: 4.3.7
|
||||
resolution: "debug@npm:4.3.7"
|
||||
version: 4.4.0
|
||||
resolution: "debug@npm:4.4.0"
|
||||
dependencies:
|
||||
ms: ^2.1.3
|
||||
peerDependenciesMeta:
|
||||
supports-color:
|
||||
optional: true
|
||||
checksum: 822d74e209cd910ef0802d261b150314bbcf36c582ccdbb3e70f0894823c17e49a50d3e66d96b633524263975ca16b6a833f3e3b7e030c157169a5fabac63160
|
||||
checksum: fb42df878dd0e22816fc56e1fdca9da73caa85212fbe40c868b1295a6878f9101ae684f4eeef516c13acfc700f5ea07f1136954f43d4cd2d477a811144136479
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -552,7 +550,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4":
|
||||
"define-data-property@npm:^1.0.1":
|
||||
version: 1.1.4
|
||||
resolution: "define-data-property@npm:1.1.4"
|
||||
dependencies:
|
||||
@@ -597,14 +595,25 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"electron-context-menu@npm:^4.0.4":
|
||||
version: 4.0.4
|
||||
resolution: "electron-context-menu@npm:4.0.4"
|
||||
"dunder-proto@npm:^1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "dunder-proto@npm:1.0.1"
|
||||
dependencies:
|
||||
call-bind-apply-helpers: ^1.0.1
|
||||
es-errors: ^1.3.0
|
||||
gopd: ^1.2.0
|
||||
checksum: 149207e36f07bd4941921b0ca929e3a28f1da7bd6b6ff8ff7f4e2f2e460675af4576eeba359c635723dc189b64cdd4787e0255897d5b135ccc5d15cb8685fc90
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"electron-context-menu@npm:^4.0.5":
|
||||
version: 4.0.5
|
||||
resolution: "electron-context-menu@npm:4.0.5"
|
||||
dependencies:
|
||||
cli-truncate: ^4.0.0
|
||||
electron-dl: ^4.0.0
|
||||
electron-is-dev: ^3.0.1
|
||||
checksum: 43bb4d940f092f143484a02413087671ef2969b7daebc79b6fff544cb912259c4892a342a4c3d6a0aa2c1c4fc9aa07ee7b1c1b86b757e7ae6730f39284d88e68
|
||||
checksum: 4b486b65af658489661685414d605a388c433ca5f8543767310516509351043ffac242a34a66785d9cc68eee90640d765e49fba1237cbaa5c50490dc5509b9af
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -627,25 +636,25 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"electron-store@npm:^10.0.0":
|
||||
version: 10.0.0
|
||||
resolution: "electron-store@npm:10.0.0"
|
||||
version: 10.0.1
|
||||
resolution: "electron-store@npm:10.0.1"
|
||||
dependencies:
|
||||
conf: ^13.0.0
|
||||
type-fest: ^4.20.0
|
||||
checksum: 1e624d0fc0f62bac7cacc210e09b0aa9706c9661d1c7a7b428731b9af728d58dcadaf1b690a769ff6c6e2e7e2224855233d88b658fcbb092d0345e2d5a469dfd
|
||||
checksum: f80a02a226128f89bed0e6ba9ae28e75ba86acb7a922697ddc16b1014c9a6925dbb5f9024ee7fc500f74a4e389e158ee4889c84d91dcb861bd68f4934276af6c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"electron@npm:latest":
|
||||
version: 33.2.1
|
||||
resolution: "electron@npm:33.2.1"
|
||||
"electron@npm:35.0.3":
|
||||
version: 35.0.3
|
||||
resolution: "electron@npm:35.0.3"
|
||||
dependencies:
|
||||
"@electron/get": ^2.0.0
|
||||
"@types/node": ^20.9.0
|
||||
"@types/node": ^22.7.7
|
||||
extract-zip: ^2.0.1
|
||||
bin:
|
||||
electron: cli.js
|
||||
checksum: c5b7d5fe56f831da5d14be9d24d0a29fdb392d5b4e593b31200a9c01e6260d87bba1216c4cc17297b2f4838e0893428464b9e2ca71c3eaff499dbff1981c0670
|
||||
checksum: 90f4b6cb8b664c28b679f4a07523baf639c1213692ecae12423dff533e18390571303e2d74e122bbe5f1ecdfe66623e5523daa85bd3bd8c84f2ec9d81d82d50b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -679,12 +688,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"es-define-property@npm:^1.0.0":
|
||||
version: 1.0.0
|
||||
resolution: "es-define-property@npm:1.0.0"
|
||||
dependencies:
|
||||
get-intrinsic: ^1.2.4
|
||||
checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6
|
||||
"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "es-define-property@npm:1.0.1"
|
||||
checksum: 0512f4e5d564021c9e3a644437b0155af2679d10d80f21adaf868e64d30efdfbd321631956f20f42d655fedb2e3a027da479fad3fa6048f768eb453a80a5f80a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -695,6 +702,27 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1":
|
||||
version: 1.1.1
|
||||
resolution: "es-object-atoms@npm:1.1.1"
|
||||
dependencies:
|
||||
es-errors: ^1.3.0
|
||||
checksum: 214d3767287b12f36d3d7267ef342bbbe1e89f899cfd67040309fc65032372a8e60201410a99a1645f2f90c1912c8c49c8668066f6bdd954bcd614dda2e3da97
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"es-set-tostringtag@npm:^2.1.0":
|
||||
version: 2.1.0
|
||||
resolution: "es-set-tostringtag@npm:2.1.0"
|
||||
dependencies:
|
||||
es-errors: ^1.3.0
|
||||
get-intrinsic: ^1.2.6
|
||||
has-tostringtag: ^1.0.2
|
||||
hasown: ^2.0.2
|
||||
checksum: 789f35de4be3dc8d11fdcb91bc26af4ae3e6d602caa93299a8c45cf05d36cc5081454ae2a6d3afa09cceca214b76c046e4f8151e092e6fc7feeb5efb9e794fc6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"es6-error@npm:^4.1.1":
|
||||
version: 4.1.1
|
||||
resolution: "es6-error@npm:4.1.1"
|
||||
@@ -723,13 +751,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"eslint-scope@npm:^8.2.0":
|
||||
version: 8.2.0
|
||||
resolution: "eslint-scope@npm:8.2.0"
|
||||
"eslint-scope@npm:^8.3.0":
|
||||
version: 8.3.0
|
||||
resolution: "eslint-scope@npm:8.3.0"
|
||||
dependencies:
|
||||
esrecurse: ^4.3.0
|
||||
estraverse: ^5.2.0
|
||||
checksum: 750eff4672ca2bf274ec0d1bbeae08aadd53c1907d5c6aff5564d8e047a5f49afa8ae6eee333cab637fd3ebcab2141659d8f2f040f6fdc982b0f61f8bf03136f
|
||||
checksum: 57a58b6716533e25d527089826c4add89a047aecf75e4a88fee05f113ef5a72b85392b304a69bf670646cc3e068354aec70361b9718c2453949a05fc4d9bfe73
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -747,28 +775,29 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"eslint@npm:^9.16.0":
|
||||
version: 9.16.0
|
||||
resolution: "eslint@npm:9.16.0"
|
||||
"eslint@npm:^9.23.0":
|
||||
version: 9.23.0
|
||||
resolution: "eslint@npm:9.23.0"
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils": ^4.2.0
|
||||
"@eslint-community/regexpp": ^4.12.1
|
||||
"@eslint/config-array": ^0.19.0
|
||||
"@eslint/core": ^0.9.0
|
||||
"@eslint/eslintrc": ^3.2.0
|
||||
"@eslint/js": 9.16.0
|
||||
"@eslint/plugin-kit": ^0.2.3
|
||||
"@eslint/config-array": ^0.19.2
|
||||
"@eslint/config-helpers": ^0.2.0
|
||||
"@eslint/core": ^0.12.0
|
||||
"@eslint/eslintrc": ^3.3.1
|
||||
"@eslint/js": 9.23.0
|
||||
"@eslint/plugin-kit": ^0.2.7
|
||||
"@humanfs/node": ^0.16.6
|
||||
"@humanwhocodes/module-importer": ^1.0.1
|
||||
"@humanwhocodes/retry": ^0.4.1
|
||||
"@humanwhocodes/retry": ^0.4.2
|
||||
"@types/estree": ^1.0.6
|
||||
"@types/json-schema": ^7.0.15
|
||||
ajv: ^6.12.4
|
||||
chalk: ^4.0.0
|
||||
cross-spawn: ^7.0.5
|
||||
cross-spawn: ^7.0.6
|
||||
debug: ^4.3.2
|
||||
escape-string-regexp: ^4.0.0
|
||||
eslint-scope: ^8.2.0
|
||||
eslint-scope: ^8.3.0
|
||||
eslint-visitor-keys: ^4.2.0
|
||||
espree: ^10.3.0
|
||||
esquery: ^1.5.0
|
||||
@@ -792,7 +821,7 @@ __metadata:
|
||||
optional: true
|
||||
bin:
|
||||
eslint: bin/eslint.js
|
||||
checksum: d7b77caed2e319dba9bdf5fd3275c643332e4c79fcfe62cf19031fc430c27fe691daa718474d29a1050b83348085f8df50e04f260e081e5b1fbee1d2ca9c5c74
|
||||
checksum: 5ace40f8e508f296bfa9d3f70a78a5082b7c9d230de0e53c0dc35f7b20bb2a9c0ce99eefaa6fa01766058f2eebaa86b8fc69ab7e0fb76b6b85b6e29af88063bb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -897,9 +926,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"fast-uri@npm:^3.0.1":
|
||||
version: 3.0.3
|
||||
resolution: "fast-uri@npm:3.0.3"
|
||||
checksum: c52e6c86465f5c240e84a4485fb001088cc743d261a4b54b0050ce4758b1648bdbe53da1328ef9620149dca1435e3de64184f226d7c0a3656cb5837b3491e149
|
||||
version: 3.0.6
|
||||
resolution: "fast-uri@npm:3.0.6"
|
||||
checksum: 7161ba2a7944778d679ba8e5f00d6a2bb479a2142df0982f541d67be6c979b17808f7edbb0ce78161c85035974bde3fa52b5137df31da46c0828cb629ba67c4e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -942,9 +971,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"flatted@npm:^3.2.9":
|
||||
version: 3.3.2
|
||||
resolution: "flatted@npm:3.3.2"
|
||||
checksum: ac3c159742e01d0e860a861164bcfd35bb567ccbebb8a0dd041e61cf3c64a435b917dd1e7ed1c380c2ebca85735fb16644485ec33665bc6aafc3b316aa1eed44
|
||||
version: 3.3.3
|
||||
resolution: "flatted@npm:3.3.3"
|
||||
checksum: 8c96c02fbeadcf4e8ffd0fa24983241e27698b0781295622591fc13585e2f226609d95e422bcf2ef044146ffacb6b68b1f20871454eddf75ab3caa6ee5f4a1fe
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -959,13 +988,14 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"form-data@npm:^4.0.0":
|
||||
version: 4.0.1
|
||||
resolution: "form-data@npm:4.0.1"
|
||||
version: 4.0.2
|
||||
resolution: "form-data@npm:4.0.2"
|
||||
dependencies:
|
||||
asynckit: ^0.4.0
|
||||
combined-stream: ^1.0.8
|
||||
es-set-tostringtag: ^2.1.0
|
||||
mime-types: ^2.1.12
|
||||
checksum: ccee458cd5baf234d6b57f349fe9cc5f9a2ea8fd1af5ecda501a18fd1572a6dd3bf08a49f00568afd995b6a65af34cb8dec083cf9d582c4e621836499498dd84
|
||||
checksum: e887298b22c13c7c9c5a8ba3716f295a479a13ca78bfd855ef11cbce1bcf22bc0ae2062e94808e21d46e5c667664a1a1a8a7f57d7040193c1fefbfb11af58aab
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -994,16 +1024,31 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"get-intrinsic@npm:^1.2.4":
|
||||
version: 1.2.4
|
||||
resolution: "get-intrinsic@npm:1.2.4"
|
||||
"get-intrinsic@npm:^1.2.6":
|
||||
version: 1.3.0
|
||||
resolution: "get-intrinsic@npm:1.3.0"
|
||||
dependencies:
|
||||
call-bind-apply-helpers: ^1.0.2
|
||||
es-define-property: ^1.0.1
|
||||
es-errors: ^1.3.0
|
||||
es-object-atoms: ^1.1.1
|
||||
function-bind: ^1.1.2
|
||||
has-proto: ^1.0.1
|
||||
has-symbols: ^1.0.3
|
||||
hasown: ^2.0.0
|
||||
checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951
|
||||
get-proto: ^1.0.1
|
||||
gopd: ^1.2.0
|
||||
has-symbols: ^1.1.0
|
||||
hasown: ^2.0.2
|
||||
math-intrinsics: ^1.1.0
|
||||
checksum: 301008e4482bb9a9cb49e132b88fee093bff373b4e6def8ba219b1e96b60158a6084f273ef5cafe832e42cd93462f4accb46a618d35fe59a2b507f2388c5b79d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"get-proto@npm:^1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "get-proto@npm:1.0.1"
|
||||
dependencies:
|
||||
dunder-proto: ^1.0.1
|
||||
es-object-atoms: ^1.0.0
|
||||
checksum: 4fc96afdb58ced9a67558698b91433e6b037aaa6f1493af77498d7c85b141382cf223c0e5946f334fb328ee85dfe6edd06d218eaf09556f4bc4ec6005d7f5f7b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1056,12 +1101,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"gopd@npm:^1.0.1":
|
||||
version: 1.1.0
|
||||
resolution: "gopd@npm:1.1.0"
|
||||
dependencies:
|
||||
get-intrinsic: ^1.2.4
|
||||
checksum: ed09ffe54ef841e9de35a56f9d249495c1149dc611f05a242c476cc538f13b2228ac1ee3970f9bfca2cadd6f9785efe854419eeef6050e7de3f02fbee9292ad4
|
||||
"gopd@npm:^1.0.1, gopd@npm:^1.2.0":
|
||||
version: 1.2.0
|
||||
resolution: "gopd@npm:1.2.0"
|
||||
checksum: cc6d8e655e360955bdccaca51a12a474268f95bb793fc3e1f2bdadb075f28bfd1fd988dab872daf77a61d78cbaf13744bc8727a17cfb1d150d76047d805375f3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1098,7 +1141,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2":
|
||||
"has-property-descriptors@npm:^1.0.0":
|
||||
version: 1.0.2
|
||||
resolution: "has-property-descriptors@npm:1.0.2"
|
||||
dependencies:
|
||||
@@ -1107,23 +1150,23 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"has-proto@npm:^1.0.1":
|
||||
version: 1.1.0
|
||||
resolution: "has-proto@npm:1.1.0"
|
||||
dependencies:
|
||||
call-bind: ^1.0.7
|
||||
checksum: 0335b8acd01a0de9bb6f7f89c4ef4f1512b48cec25f1c23e847a68d65afb8c579f168907e79969b01dc7025d707b48c71d481bca140579a40d735b071b2cc1bc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"has-symbols@npm:^1.0.3":
|
||||
"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0":
|
||||
version: 1.1.0
|
||||
resolution: "has-symbols@npm:1.1.0"
|
||||
checksum: b2316c7302a0e8ba3aaba215f834e96c22c86f192e7310bdf689dd0e6999510c89b00fbc5742571507cebf25764d68c988b3a0da217369a73596191ac0ce694b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"hasown@npm:^2.0.0":
|
||||
"has-tostringtag@npm:^1.0.2":
|
||||
version: 1.0.2
|
||||
resolution: "has-tostringtag@npm:1.0.2"
|
||||
dependencies:
|
||||
has-symbols: ^1.0.3
|
||||
checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"hasown@npm:^2.0.2":
|
||||
version: 2.0.2
|
||||
resolution: "hasown@npm:2.0.2"
|
||||
dependencies:
|
||||
@@ -1157,12 +1200,12 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"import-fresh@npm:^3.2.1":
|
||||
version: 3.3.0
|
||||
resolution: "import-fresh@npm:3.3.0"
|
||||
version: 3.3.1
|
||||
resolution: "import-fresh@npm:3.3.1"
|
||||
dependencies:
|
||||
parent-module: ^1.0.0
|
||||
resolve-from: ^4.0.0
|
||||
checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa
|
||||
checksum: a06b19461b4879cc654d46f8a6244eb55eb053437afd4cbb6613cad6be203811849ed3e4ea038783092879487299fda24af932b86bdfff67c9055ba3612b8c87
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1326,6 +1369,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"math-intrinsics@npm:^1.1.0":
|
||||
version: 1.1.0
|
||||
resolution: "math-intrinsics@npm:1.1.0"
|
||||
checksum: 0e513b29d120f478c85a70f49da0b8b19bc638975eca466f2eeae0071f3ad00454c621bf66e16dd435896c208e719fc91ad79bbfba4e400fe0b372e7c1c9c9a2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"mime-db@npm:1.52.0":
|
||||
version: 1.52.0
|
||||
resolution: "mime-db@npm:1.52.0"
|
||||
@@ -1334,9 +1384,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"mime-db@npm:^1.28.0":
|
||||
version: 1.53.0
|
||||
resolution: "mime-db@npm:1.53.0"
|
||||
checksum: 3fd9380bdc0b085d0b56b580e4f89ca4fc3b823722310d795c248f0806b9a80afd5d8f4347f015ad943b9ecfa7cc0b71dffa0db96fa776d01a13474821a2c7fb
|
||||
version: 1.54.0
|
||||
resolution: "mime-db@npm:1.54.0"
|
||||
checksum: e99aaf2f23f5bd607deb08c83faba5dd25cf2fec90a7cc5b92d8260867ee08dab65312e1a589e60093dc7796d41e5fae013268418482f1db4c7d52d0a0960ac9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1496,11 +1546,12 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "pgadmin4@workspace:."
|
||||
dependencies:
|
||||
axios: ^1.7.8
|
||||
electron: latest
|
||||
electron-context-menu: ^4.0.4
|
||||
axios: ^1.8.4
|
||||
electron: 35.0.3
|
||||
electron-context-menu: ^4.0.5
|
||||
electron-dl: ^4.0.0
|
||||
electron-store: ^10.0.0
|
||||
eslint: ^9.16.0
|
||||
eslint: ^9.23.0
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
@@ -1618,12 +1669,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"semver@npm:^7.3.2, semver@npm:^7.6.2":
|
||||
version: 7.6.3
|
||||
resolution: "semver@npm:7.6.3"
|
||||
"semver@npm:^7.3.2, semver@npm:^7.6.3":
|
||||
version: 7.7.1
|
||||
resolution: "semver@npm:7.7.1"
|
||||
bin:
|
||||
semver: bin/semver.js
|
||||
checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8
|
||||
checksum: 586b825d36874007c9382d9e1ad8f93888d8670040add24a28e06a910aeebd673a2eb9e3bf169c6679d9245e66efb9057e0852e70d9daa6c27372aab1dda7104
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1636,20 +1687,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"set-function-length@npm:^1.2.1":
|
||||
version: 1.2.2
|
||||
resolution: "set-function-length@npm:1.2.2"
|
||||
dependencies:
|
||||
define-data-property: ^1.1.4
|
||||
es-errors: ^1.3.0
|
||||
function-bind: ^1.1.2
|
||||
get-intrinsic: ^1.2.4
|
||||
gopd: ^1.0.1
|
||||
has-property-descriptors: ^1.0.2
|
||||
checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"shebang-command@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "shebang-command@npm:2.0.0"
|
||||
@@ -1770,26 +1807,19 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"type-fest@npm:^4.18.2, type-fest@npm:^4.20.0":
|
||||
version: 4.30.0
|
||||
resolution: "type-fest@npm:4.30.0"
|
||||
checksum: 2ce3b08265acbdf864267e1468cdcc8dbfa4e86c2fd5e4622a20a83358b5e21fcb49a41beada95d29d8ff1ed8aacb27d10ec0b7623d546f9399b529a153724b0
|
||||
version: 4.38.0
|
||||
resolution: "type-fest@npm:4.38.0"
|
||||
checksum: 85fd7f3feff42bab6eac99f9f056d67932c36f834da87d68b0e89c040671415a902848c81be4d0f02919d157d7eae70dccf42c42dd2e2000d80e3ae1b97a9101
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"uint8array-extras@npm:^1.1.0":
|
||||
"uint8array-extras@npm:^1.4.0":
|
||||
version: 1.4.0
|
||||
resolution: "uint8array-extras@npm:1.4.0"
|
||||
checksum: 791c07e1f632cb6b4d5c0275dcac2efa4689be523f021cc78b66377872e500dbe5b4c56749367cc97892f6952bc5bccd34cf9147a2a16ccb253f3b7f94588398
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"undici-types@npm:~6.19.2":
|
||||
version: 6.19.8
|
||||
resolution: "undici-types@npm:6.19.8"
|
||||
checksum: de51f1b447d22571cf155dfe14ff6d12c5bdaec237c765085b439c38ca8518fc360e88c70f99469162bf2e14188a7b0bcb06e1ed2dc031042b984b0bb9544017
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"undici-types@npm:~6.20.0":
|
||||
version: 6.20.0
|
||||
resolution: "undici-types@npm:6.20.0"
|
||||
@@ -1824,9 +1854,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"when-exit@npm:^2.1.1":
|
||||
version: 2.1.3
|
||||
resolution: "when-exit@npm:2.1.3"
|
||||
checksum: d4242a15148df89e08e518b4c372580516d45a6ab527f14643a3789c6edb9ccfc788b1d717728c1a33c85dc53badefb511a3ee704ea61c4e86f693f3bf7666f2
|
||||
version: 2.1.4
|
||||
resolution: "when-exit@npm:2.1.4"
|
||||
checksum: d77635a0ed43bb63b3b41930637db16fb1e4e8630f5c6efd4aa669322c32b36ba750b7484991f806d3ac56f4e21cdf3925f82fff289b90706cc21e6745038a26
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2024, The pgAdmin Development Team
|
||||
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||