Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe264aafa7 | ||
|
|
88aebb64f9 | ||
|
|
6d1f67f3be | ||
|
|
50a423b142 | ||
|
|
b716800474 | ||
|
|
b695329d2d | ||
|
|
fbee63085c | ||
|
|
99d1068f70 | ||
|
|
18748846ef | ||
|
|
b80784f5a1 | ||
|
|
76eb3e9b67 | ||
|
|
0f6abcc7fa | ||
|
|
ed106e3577 | ||
|
|
3c9aed4d6f | ||
|
|
9daa7c7a7c | ||
|
|
b7dad25d3e | ||
|
|
64a26b560b | ||
|
|
d5bfc726c0 | ||
|
|
0dcb448f2e | ||
|
|
ccafde604e | ||
|
|
ef58d277ca | ||
|
|
6642860d51 | ||
|
|
aec64aa582 | ||
|
|
6de1d3f7de | ||
|
|
90849fe29b | ||
|
|
17129b259b | ||
|
|
dfb74904ed | ||
|
|
2b5c90e379 | ||
|
|
2e29f3fd6d | ||
|
|
637c80c38b | ||
|
|
c76732e3e7 | ||
|
|
870bcbd932 | ||
|
|
b0464500ca | ||
|
|
5e91ed2bb1 | ||
|
|
6e5dbf7beb | ||
|
|
553eeb034d | ||
|
|
858294f36e | ||
|
|
4c616f32eb | ||
|
|
b29bc6868c | ||
|
|
07f72252d7 | ||
|
|
f289dfb762 | ||
|
|
8d4f3c07c7 | ||
|
|
7e30a99937 | ||
|
|
3d516101a4 | ||
|
|
b0b60da84a | ||
|
|
05abb9e430 | ||
|
|
dc4571a3c8 | ||
|
|
7361470b64 | ||
|
|
f282b26883 | ||
|
|
4692b21bcf | ||
|
|
36a3d4e53b | ||
|
|
8bdfa18efb | ||
|
|
52d031f2d0 | ||
|
|
d8ad0b8faf | ||
|
|
c6deb9393c | ||
|
|
d35433d0b8 | ||
|
|
0ce4f49e08 | ||
|
|
dc1e32a632 | ||
|
|
c0a2f1f24d | ||
|
|
0dd1cb3fc1 | ||
|
|
eec2cfd5dd | ||
|
|
d6cab7b421 | ||
|
|
8254e9f030 | ||
|
|
7493649893 | ||
|
|
738c421edf | ||
|
|
c41da41efe | ||
|
|
ed0a596286 | ||
|
|
31a929388b | ||
|
|
0424f7d962 | ||
|
|
8654d6cf43 | ||
|
|
25553b11ed | ||
|
|
74b3495542 | ||
|
|
ee29e64039 | ||
|
|
3a4641889c | ||
|
|
d9c84edf9a | ||
|
|
a930c6617b | ||
|
|
6c5883bce0 | ||
|
|
414e336852 | ||
|
|
d226ffbd1f | ||
|
|
65bc196eba | ||
|
|
12530cd973 | ||
|
|
a0fcb38e68 | ||
|
|
a05acb4f99 | ||
|
|
21cb1a0166 | ||
|
|
41521a9b98 | ||
|
|
781b766ac4 | ||
|
|
df11f28593 | ||
|
|
030741bba5 | ||
|
|
41be5479af | ||
|
|
9c93e93cb4 | ||
|
|
b427a87724 | ||
|
|
077589e08b | ||
|
|
4de6b93ba8 | ||
|
|
014ce31589 | ||
|
|
d9574f3caa | ||
|
|
6a9af07f7a | ||
|
|
e238ecf182 | ||
|
|
c8646f99c0 | ||
|
|
31f255b541 | ||
|
|
fecf3915c5 | ||
|
|
8a550b569f | ||
|
|
1a34f61b24 | ||
|
|
775e61c248 | ||
|
|
aa7ced4ef1 | ||
|
|
d9f6baac72 | ||
|
|
8fe687eb55 | ||
|
|
6c693d158e | ||
|
|
6b3e1f1e65 | ||
|
|
8fe344c268 | ||
|
|
c7afa30d0c | ||
|
|
14f21921bb | ||
|
|
29ae6dfbf6 | ||
|
|
a6c03a6b75 | ||
|
|
068b812245 | ||
|
|
a84a62def8 | ||
|
|
7f0847b95d | ||
|
|
073e310a5a | ||
|
|
d9e95d13e6 | ||
|
|
f4607885e1 | ||
|
|
03f4109ac4 | ||
|
|
bd0aaf7665 | ||
|
|
134c1802e7 | ||
|
|
33deacacee | ||
|
|
d6bc3ccc8b | ||
|
|
e1f990190e | ||
|
|
f77aa3284f | ||
|
|
8ceeb39268 | ||
|
|
4f71dae598 | ||
|
|
4da327088c | ||
|
|
e26a9a25d5 | ||
|
|
99e4c3350f | ||
|
|
99a72e529b | ||
|
|
824e3866d8 | ||
|
|
ce89ae3c1d | ||
|
|
4036f2a0f2 | ||
|
|
37f55ccc25 | ||
|
|
358c5d0a0f | ||
|
|
a09ada18ee | ||
|
|
88a1e03314 | ||
|
|
75b6341a84 | ||
|
|
e538a4f710 | ||
|
|
af00296ffe | ||
|
|
dd7d3c6e23 | ||
|
|
e576a886d0 | ||
|
|
f0d077fed8 | ||
|
|
37e39ca089 | ||
|
|
7c2b218076 | ||
|
|
002fdb33fc | ||
|
|
13b65c9a6a | ||
|
|
e6118a06e8 | ||
|
|
63ac71190b | ||
|
|
37542ae706 | ||
|
|
89d4d835ba | ||
|
|
9f0ea70945 | ||
|
|
86e4a88201 | ||
|
|
c002881f66 | ||
|
|
f17d4530a3 | ||
|
|
94a76cc9e0 | ||
|
|
4c0b229b14 | ||
|
|
17d0d5e0a2 | ||
|
|
f97d29243d | ||
|
|
94864104e4 | ||
|
|
6988ce96d7 | ||
|
|
98492e7718 | ||
|
|
becb453e7d | ||
|
|
35644fdd35 | ||
|
|
5ab056759b | ||
|
|
e1aeaba942 | ||
|
|
e256fc32d9 | ||
|
|
a7ba446703 | ||
|
|
26d0a3e5cb | ||
|
|
7f571fa7d8 | ||
|
|
cb600549c3 | ||
|
|
e1cb6d92c5 | ||
|
|
8812a7db69 | ||
|
|
96361656e4 | ||
|
|
83785da1bc | ||
|
|
4fe69e825e | ||
|
|
6105fc861d | ||
|
|
f156696339 | ||
|
|
b6c8707a4d | ||
|
|
3031c5055a | ||
|
|
44c0d76541 | ||
|
|
0b101d9efd | ||
|
|
b69995b34d | ||
|
|
ef6c9fbd6d | ||
|
|
e43f58d11f | ||
|
|
a684b48fb3 | ||
|
|
7cc30e3216 | ||
|
|
6586be5158 | ||
|
|
1bd14895c3 | ||
|
|
82155cd859 | ||
|
|
0ed3cd248b |
No files matched your search
@@ -1,8 +1,6 @@
|
||||
*.autosave
|
||||
*.db
|
||||
*.diff
|
||||
*.o
|
||||
*.patch
|
||||
*.psp
|
||||
*.pyc
|
||||
*.pyo
|
||||
@@ -11,14 +9,18 @@
|
||||
.DS_Store
|
||||
.idea
|
||||
.vscode
|
||||
/*.diff
|
||||
/*.patch
|
||||
/dist
|
||||
/debian-build
|
||||
/docker-build
|
||||
/mac-build
|
||||
/pip-build
|
||||
/redhat-build
|
||||
/src-build
|
||||
/win-build
|
||||
_build
|
||||
build-*
|
||||
/build-*
|
||||
pgadmin4.log
|
||||
pkg/win32/installer.iss
|
||||
pkg/mac/codesign.conf
|
||||
|
||||
@@ -270,11 +270,14 @@ REM Main build sequence Ends
|
||||
COPY "%QTDIR%\bin\Qt5Gui.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%QTDIR%\bin\Qt5Widgets.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%QTDIR%\bin\Qt5Network.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
COPY "%QTDIR%\bin\Qt5Svg.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%QTDIR%\bin\libgcc_s_dw2-1.dll" COPY "%QTDIR%\bin\libgcc_s_dw2-1.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%QTDIR%\bin\libstdc++-6.dll" COPY "%QTDIR%\bin\libstdc++-6.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
IF EXIST "%QTDIR%\bin\libwinpthread-1.dll" COPY "%QTDIR%\bin\libwinpthread-1.dll" "%PGBUILDPATH%\runtime" > nul || EXIT /B 1
|
||||
MKDIR "%PGBUILDPATH%\runtime\platforms" > nul || EXIT /B 1
|
||||
COPY "%QTDIR%\plugins\platforms\qwindows.dll" "%PGBUILDPATH%\runtime\platforms" > nul || EXIT /B 1
|
||||
MKDIR "%PGBUILDPATH%\runtime\imageformats" > nul || EXIT /B 1
|
||||
COPY "%QTDIR%\plugins\imageformats\qsvg.dll" "%PGBUILDPATH%\runtime\imageformats" > nul || EXIT /B 1
|
||||
ECHO [Paths] > "%PGBUILDPATH%\runtime\qt.conf"
|
||||
ECHO Plugins=plugins >> "%PGBUILDPATH%\runtime\qt.conf"
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ runtime:
|
||||
cd runtime && qmake CONFIG+=release && make
|
||||
|
||||
# Include all clean sub-targets in clean
|
||||
clean: clean-appbundle clean-dist clean-docs clean-node clean-pip clean-src clean-runtime
|
||||
clean: clean-appbundle clean-debian clean-dist clean-docs clean-node clean-pip clean-redhat clean-src clean-runtime
|
||||
rm -rf web/pgadmin/static/js/generated/*
|
||||
rm -rf web/pgadmin/static/js/generated/.cache
|
||||
rm -rf web/pgadmin/static/css/generated/*
|
||||
@@ -104,6 +104,9 @@ clean-runtime:
|
||||
clean-appbundle:
|
||||
rm -rf mac-build/
|
||||
|
||||
clean-debian:
|
||||
rm -rf debian-build/
|
||||
|
||||
clean-dist:
|
||||
rm -rf dist/
|
||||
|
||||
@@ -116,9 +119,15 @@ clean-node:
|
||||
clean-pip:
|
||||
rm -rf pip-build/
|
||||
|
||||
clean-redhat:
|
||||
rm -rf redhat-build/
|
||||
|
||||
clean-src:
|
||||
rm -rf src-build/
|
||||
|
||||
debian:
|
||||
./pkg/debian/build.sh
|
||||
|
||||
docker:
|
||||
echo $(APP_NAME)
|
||||
docker build -t ${APP_NAME} -t $(APP_NAME):latest -t $(APP_NAME):$(APP_RELEASE) -t $(APP_NAME):$(APP_RELEASE).$(APP_REVISION) .
|
||||
@@ -148,5 +157,8 @@ msg-update:
|
||||
pip: docs
|
||||
./pkg/pip/build.sh
|
||||
|
||||
redhat:
|
||||
./pkg/redhat/build.sh
|
||||
|
||||
src:
|
||||
./pkg/src/build.sh
|
||||
@@ -71,6 +71,12 @@ The configuration settings:
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| ConnectionTimeout | Integer | The number of seconds to wait for application server startup. |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| FixedPort | Boolean | Use a fixed network port number rather than a random one. |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| OpenTabAtStartup | Boolean | Open a browser tab at startup. |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| PortNumber | Integer | The port number to use, if using a fixed port. |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
| PythonPath | String | The Python module search path |
|
||||
+--------------------------+--------------------+---------------------------------------------------------------+
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
.. _enabling_ldap_authentication:
|
||||
|
||||
**************************************************
|
||||
`Enabling LDAP Authentication for pgAdmin`:index:
|
||||
**************************************************
|
||||
|
||||
To enable LDAP authentication for pgAdmin, you must configure the LDAP
|
||||
settings in the *config_local.py* or *config_distro.py* file on the system where
|
||||
pgAdmin is installed in Server mode. You can copy these settings from *config.py*
|
||||
file and modify the values for the following parameters:
|
||||
|
||||
.. csv-table::
|
||||
:header: "**Parameter**", "**Description**"
|
||||
:class: longtable
|
||||
:widths: 35, 55
|
||||
|
||||
"AUTHENTICATION_SOURCES","The default value for this parameter is *internal*.
|
||||
To enable LDAP authentication, you must include *ldap* in the list of values
|
||||
for this parameter. you can modify the value as follows:
|
||||
|
||||
* [‘ldap’]: pgAdmin will use only LDAP authentication.
|
||||
|
||||
* [‘ldap’, ‘internal’]: pgAdmin will first try to authenticate the user through
|
||||
LDAP. If that authentication fails, then internal user entries of pgAdmin will be used for authentication.
|
||||
|
||||
* [‘internal’, ‘ldap’]: pgAdmin will first try to authenticate the user through internal user entries. If that authentication fails, then LDAP authentication will be used."
|
||||
"LDAP_AUTO_CREATE_USER", "Specifies if you want to automatically create a pgAdmin
|
||||
user corresponding to the LDAP user credentials. Please note that LDAP password
|
||||
is not stored in the pgAdmin database."
|
||||
"LDAP_CONNECTION_TIMEOUT","Specifies the connection timeout (in seconds) for LDAP
|
||||
authentication."
|
||||
"LDAP_SERVER_URI", "An LDAP URI is a combination of connection protocol
|
||||
(ldap or ldaps), IP address/hostname and port of the directory server that you
|
||||
want to connect to. For example, 'ldap://172.16.209.35:389' is a valid
|
||||
LDAP_SERVER_URI where ldap is the connection protocol, 172.16.209.35 is the IP
|
||||
address and 389 is the port. Port 636 is used for the ldaps communication protocol."
|
||||
"LDAP_BASE_DN","Specifies the base DN from where a server will start the search
|
||||
for users. For example, an LDAP search for any user will be performed by the server
|
||||
starting at the base DN (dc=example,dc=com). When the base DN matches, the full
|
||||
DN (cn=admin,dc=example,dc=com) is used to bind with the supplied password."
|
||||
"LDAP_USERNAME_ATTRIBUTE","Specifies the LDAP attribute that contains the
|
||||
usernames. For LDAP authentication, you need to enter the value of that
|
||||
particular attribute as username. For example, if you set the value of
|
||||
LDAP_USERNAME_ATTRIBUTE as ‘cn’ and you have defined 'cn=admin' in your LDAP server
|
||||
entries, you should be able to authenticate by entering ‘admin’ in the
|
||||
*Email Address / Username* field and its corresponding password in the *Password*
|
||||
field."
|
||||
"LDAP_SEARCH_BASE_DN","Specifies an element of the search request that works in
|
||||
conjunction with the LDAP search scope to define the subtree of entries that
|
||||
should be considered when processing the search request. You can use this parameter
|
||||
for limiting the search request to a specific group of users."
|
||||
"LDAP_SEARCH_FILTER","Defines the criteria to retrieve matching entries in an
|
||||
LDAP search request. For example, LDAP_SEARCH_FILTER = '(objectclass=HR)’ setting
|
||||
searches only for users having HR as their objectClass attribute."
|
||||
"LDAP_SEARCH_SCOPE","Indicates the set of entries at or below the Base DN that
|
||||
maybe considered as potential matches for a search request. You can specify the
|
||||
scope of a search as either a *base*, *level*, or *subtree* search. A *base* search
|
||||
limits the search to the base object. A *level* search is restricted to the immediate
|
||||
children of a base object, but excludes the base object itself. A *subtree* search
|
||||
includes all child objects as well as the base object."
|
||||
"LDAP_USE_STARTTLS","Specifies if you want to use Transport Layer Security (TLS)
|
||||
for secure communication between LDAP clients and LDAP servers. If you specify
|
||||
the connection protocol in *LDAP_SERVER_URI* as *ldaps*, this parameter is ignored."
|
||||
"LDAP_CA_CERT_FILE","Specifies the path to the trusted CA certificate file. This
|
||||
parameter is applicable only if you are using *ldaps* as connection protocol and
|
||||
you have set *LDAP_USE_STARTTLS* parameter to *True*."
|
||||
"LDAP_CERT_FILE","Specifies the path to the server certificate file. This parameter
|
||||
is applicable only if you are using *ldaps* as connection protocol and you have
|
||||
set *LDAP_USE_STARTTLS* parameter to *True*."
|
||||
"LDAP_KEY_FILE","Specifies the path to the server private key file. This parameter
|
||||
is applicable only if you are using *ldaps* as connection protocol and you have
|
||||
set *LDAP_USE_STARTTLS* parameter to *True*."
|
||||
@@ -35,6 +35,7 @@ Mode is pre-configured for security.
|
||||
login
|
||||
user_management
|
||||
change_user_password
|
||||
enabling_ldap_authentication
|
||||
|
||||
|
||||
.. note:: Pre-compiled and configured installation packages are available for
|
||||
@@ -64,6 +65,8 @@ display. To open the *Preferences* dialog, select *Preferences* from the *File*
|
||||
for the dialog. You can access additional Postgres help by navigating through
|
||||
the *Help* menu, and selecting the name of the resource that you wish to open.
|
||||
|
||||
You can search for objects in the database using the :ref:`Search objects <search_objects>`
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
@@ -74,6 +77,7 @@ the *Help* menu, and selecting the name of the resource that you wish to open.
|
||||
tree_control
|
||||
preferences
|
||||
keyboard_shortcuts
|
||||
search_objects
|
||||
|
||||
Before using pgAdmin to manage objects that reside on a server, you must define a
|
||||
connection to the server; for more information please see *Connecting to a Server*
|
||||
|
||||
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 179 KiB |
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 185 KiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 135 KiB |
|
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 135 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 136 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 109 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 163 KiB |
|
Before Width: | Height: | Size: 184 KiB After Width: | Height: | Size: 217 KiB |
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 203 KiB |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 184 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 52 KiB |
@@ -10,13 +10,28 @@ Use the *Login* dialog to log in to pgAdmin:
|
||||
:alt: pgAdmin login dialog
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Login* dialog to authenticate your connection:
|
||||
Use the fields in the *Login* dialog to authenticate your connection. There are
|
||||
two ways to authenticate your connection:
|
||||
|
||||
* Provide the email address associated with your account in the *Email Address*
|
||||
field.
|
||||
* Provide your password in the *Password* field.
|
||||
* Click the *Login* button to securely log into pgAdmin.
|
||||
* Please note that, if the pgAdmin server is restarted then you will be logged out. You need to re-login to continue.
|
||||
- From pgAdmin version 4.21 onwards, support for LDAP authentication
|
||||
has been added. If LDAP authentication has been enabled for your pgAdmin
|
||||
application, you can use your LDAP credentials to log in to pgAdmin:
|
||||
|
||||
* Provide the LDAP username in the *Email Address/Username* field.
|
||||
|
||||
* Provide your LDAP password in the Password field.
|
||||
|
||||
- Alternatively, you can use the following information to log in to pgAdmin:
|
||||
|
||||
* Provide the email address associated with your account in the
|
||||
*Email Address/Username* field.
|
||||
|
||||
* Provide your password in the *Password* field.
|
||||
|
||||
Click the *Login* button to securely log into pgAdmin.
|
||||
|
||||
Please note that if the pgAdmin server is restarted, then you will be logged
|
||||
out. You need to re-login to continue.
|
||||
|
||||
Recovering a Lost Password
|
||||
**************************
|
||||
@@ -37,3 +52,7 @@ to launch a password recovery utility.
|
||||
If you have forgotten the email associated with your account, please contact
|
||||
your administrator.
|
||||
|
||||
Please note that your LDAP password cannot be recovered using this dialog. If
|
||||
you enter your LDAP username in the *Email Address/Username* field, and then
|
||||
enter your email to recover your password, an error message will be displayed
|
||||
asking you to contact the LDAP administrator to recover your LDAP password.
|
||||
@@ -247,14 +247,14 @@ Use the fields on the *Auto Completion* panel to set the auto completion options
|
||||
:alt: Preferences dialog sqleditor csv output option
|
||||
:align: center
|
||||
|
||||
Use the fields on the *CSV Output* panel to control the CSV output.
|
||||
Use the fields on the *CSV/TXT Output* panel to control the CSV/TXT output.
|
||||
|
||||
* Use the *CSV field separator* drop-down listbox to specify the separator
|
||||
character that will be used in CSV output.
|
||||
character that will be used in CSV/TXT output.
|
||||
* Use the *CSV quote character* drop-down listbox to specify the quote character
|
||||
that will be used in CSV output.
|
||||
that will be used in CSV/TXT output.
|
||||
* Use the *CSV quoting* drop-down listbox to select the fields that will be
|
||||
quoted in the CSV output; select *Strings*, *All*, or *None*.
|
||||
quoted in the CSV/TXT output; select *Strings*, *All*, or *None*.
|
||||
* Use the *Replace null values with* option to replace null values with
|
||||
specified string in the output file. Default is set to 'NULL'.
|
||||
|
||||
@@ -355,6 +355,11 @@ Use the fields on the *Options* panel to manage editor preferences.
|
||||
*True*, the editor will prompt the user to commit or rollback changes when
|
||||
exiting the Query Tool while the current transaction is not committed.
|
||||
|
||||
* When the *Sort View Data results by primary key columns?* If set to *True*,
|
||||
data returned when using the View/Edit Data - All Rows option will be sorted
|
||||
by the Primary Key columns by default. When using the First/Last 100 Rows options,
|
||||
data is always sorted.
|
||||
|
||||
.. image:: images/preferences_sql_results_grid.png
|
||||
:alt: Preferences dialog sql results grid section
|
||||
:align: center
|
||||
|
||||
@@ -36,6 +36,21 @@ Use the fields in the *Definition* tab to define the procedure:
|
||||
|
||||
* Use the drop-down listbox next to *Language* to select a language. The default
|
||||
is *edbspl*.
|
||||
* Use the fields in the *Arguments* section to define an argument. Click *Add* to set
|
||||
parameters and values for the argument:
|
||||
* Use the drop-down listbox next to *Data type* to select a data type.
|
||||
* Use the drop-down listbox next to *Mode* to select a mode. Select *IN* for an
|
||||
input parameter; select *OUT* for an output parameter; select *INOUT* for both
|
||||
an input and an output parameter; or, select *VARIADIC* to specify a VARIADIC
|
||||
parameter.
|
||||
* Write a name for the argument in the *Argument Name* field.
|
||||
* Specify a default value for the argument in the *Default Value* field.
|
||||
|
||||
Click *Add* to define another argument; to discard an argument, click the trash
|
||||
icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
|
||||
Click the *Code* tab to continue.
|
||||
|
||||
* Use the *Code* field to specify the code that will execute when the procedure
|
||||
is called.
|
||||
|
||||
@@ -73,26 +88,6 @@ procedure:
|
||||
effects — it reveals no information about its arguments other than by its
|
||||
return value. The default is *No*.
|
||||
|
||||
Click the *Arguments* tab to continue.
|
||||
|
||||
.. image:: images/procedure_arguments.png
|
||||
:alt: Procedure dialog arguments tab
|
||||
:align: center
|
||||
|
||||
Use the fields in the *Arguments* tab to define an argument. Click *Add* to set
|
||||
parameters and values for the argument:
|
||||
|
||||
* Use the drop-down listbox next to *Data type* to select a data type.
|
||||
* Use the drop-down listbox next to *Mode* to select a mode. Select *IN* for an
|
||||
input parameter; select *OUT* for an output parameter; select *INOUT* for both
|
||||
an input and an output parameter; or, select *VARIADIC* to specify a VARIADIC
|
||||
parameter.
|
||||
* Write a name for the argument in the *Argument Name* field.
|
||||
* Specify a default value for the argument in the *Default Value* field.
|
||||
|
||||
Click *Add* to define another argument; to discard an argument, click the trash
|
||||
icon to the left of the row and confirm deletion in the *Delete Row* popup.
|
||||
|
||||
Click the *Parameters* tab to continue.
|
||||
|
||||
.. image:: images/procedure_parameters.png
|
||||
|
||||
@@ -122,7 +122,7 @@ You can:
|
||||
* Select and copy from the displayed result set.
|
||||
* Use the *Execute/Refresh* options to retrieve query execution information and
|
||||
set query execution options.
|
||||
* Use the *Download as CSV* icon to download the content of the *Data Output*
|
||||
* Use the *Download as CSV/TXT* icon to download the content of the *Data Output*
|
||||
tab as a comma-delimited file.
|
||||
* Edit the data in the result set of a SELECT query if it is updatable.
|
||||
|
||||
|
||||
@@ -177,7 +177,8 @@ Query Execution
|
||||
| | | |
|
||||
| | * Select *Clear History* to erase the content of the *History* tab. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
| *Download as CSV* | Click the *Download as CSV* icon to download the result set of the current query to a | F8 |
|
||||
| | comma-separated list. You can specify the CSV settings through | |
|
||||
| | *Preferences -> SQL Editor -> CSV output* dialogue. | |
|
||||
| *Download as CSV/TXT*| Click the *Download as CSV/TXT* icon to download the result set of the current query as a *.csv* | F8 |
|
||||
| | or as a *.txt* file. if *CSV field seperator* set to comma(,) else as a *.txt* file. | |
|
||||
| | You can specify the CSV/TXT settings through *Preferences -> SQL Editor -> CSV/TXT output* | |
|
||||
| | dialogue. | |
|
||||
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
|
||||
@@ -11,6 +11,8 @@ notes for it.
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
release_notes_4_21
|
||||
release_notes_4_20
|
||||
release_notes_4_19
|
||||
release_notes_4_18
|
||||
release_notes_4_17
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
************
|
||||
Version 4.20
|
||||
************
|
||||
|
||||
Release date: 2020-04-02
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin4 4.19.
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #5261 <https://redmine.postgresql.org/issues/5261>`_ - Added support of Collation, FTS Configuration, FTS Dictionary, FTS Parser and FTS Template to the Schema Diff.
|
||||
| `Issue #5262 <https://redmine.postgresql.org/issues/5262>`_ - Added support of Domain, Domain Constraints and Types to the Schema Diff.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #5271 <https://redmine.postgresql.org/issues/5271>`_ - Enhance the color of switch control for both light and dark theme.
|
||||
| `Issue #5284 <https://redmine.postgresql.org/issues/5284>`_ - Added and fixed gettext usage for better translation coverage.
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #4237 <https://redmine.postgresql.org/issues/4237>`_ - Fix an issue where the user can not change the value of DateTime picker control using keyboard.
|
||||
| `Issue #4608 <https://redmine.postgresql.org/issues/4608>`_ - Fixed some accessibility issues in the dialogs.
|
||||
| `Issue #4942 <https://redmine.postgresql.org/issues/4942>`_ - Fixed chrome driver download utility issue for Ubuntu.
|
||||
| `Issue #5128 <https://redmine.postgresql.org/issues/5128>`_ - Change some colors and opacity to comply with WCAG color contrast standards.
|
||||
| `Issue #5143 <https://redmine.postgresql.org/issues/5143>`_ - Fix an accessibility issue to maximize the panel for all alertify dialog.
|
||||
| `Issue #5221 <https://redmine.postgresql.org/issues/5221>`_ - Improve logic to get the DDL statements as a part of the comparison.
|
||||
| `Issue #5241 <https://redmine.postgresql.org/issues/5241>`_ - Fixed tab key navigation issue for Grant Wizard.
|
||||
| `Issue #5279 <https://redmine.postgresql.org/issues/5279>`_ - Fixed Unicode character issue causing error on Python2 environment.
|
||||
| `Issue #5292 <https://redmine.postgresql.org/issues/5292>`_ - Fixed focus color issue for Alertify dialog buttons.
|
||||
@@ -0,0 +1,96 @@
|
||||
************
|
||||
Version 4.21
|
||||
************
|
||||
|
||||
Release date: 2020-04-30
|
||||
|
||||
This release contains a number of bug fixes and new features since the release of pgAdmin4 4.20.
|
||||
|
||||
New features
|
||||
************
|
||||
|
||||
| `Issue #2172 <https://redmine.postgresql.org/issues/2172>`_ - Added search object functionality.
|
||||
| `Issue #2186 <https://redmine.postgresql.org/issues/2186>`_ - Added LDAP authentication support.
|
||||
| `Issue #4636 <https://redmine.postgresql.org/issues/4636>`_ - Added job step and job schedule disable icons to identify it quickly within the browser tree.
|
||||
| `Issue #5181 <https://redmine.postgresql.org/issues/5181>`_ - Added support for parameter toast_tuple_target and parallel_workers of the table.
|
||||
| `Issue #5263 <https://redmine.postgresql.org/issues/5263>`_ - Added support of Foreign Tables to the Schema Diff.
|
||||
| `Issue #5264 <https://redmine.postgresql.org/issues/5264>`_ - Added support of Packages, Sequences and Synonyms to the Schema Diff.
|
||||
| `Issue #5348 <https://redmine.postgresql.org/issues/5348>`_ - Documentation of LDAP authentication support.
|
||||
| `Issue #5353 <https://redmine.postgresql.org/issues/5353>`_ - Added an option to prevent a browser tab being opened at startup.
|
||||
| `Issue #5399 <https://redmine.postgresql.org/issues/5399>`_ - Warn the user if an unsupported, deprecated or unknown browser is detected.
|
||||
|
||||
Housekeeping
|
||||
************
|
||||
|
||||
| `Issue #4620 <https://redmine.postgresql.org/issues/4620>`_ - Add Reverse Engineered and Modified SQL tests for procedures.
|
||||
| `Issue #4623 <https://redmine.postgresql.org/issues/4623>`_ - Add Reverse Engineered and Modified SQL tests for pgAgent jobs.
|
||||
|
||||
Bug fixes
|
||||
*********
|
||||
|
||||
| `Issue #1257 <https://redmine.postgresql.org/issues/1257>`_ - Ensure all object types have a "System XXX?" property.
|
||||
| `Issue #2813 <https://redmine.postgresql.org/issues/2813>`_ - Ensure that the password prompt should not be visible if the database server is in trust authentication mode.
|
||||
| `Issue #3495 <https://redmine.postgresql.org/issues/3495>`_ - Fixed an issue where the query tool unable to load the file which contains the BOM marker.
|
||||
| `Issue #3523 <https://redmine.postgresql.org/issues/3523>`_ - Fixed an issue where right-clicking a browser object does not apply to the object on which right-click was fired.
|
||||
| `Issue #3645 <https://redmine.postgresql.org/issues/3645>`_ - Ensure that the start and end date should be deleted when clear the selection for pgAgent Job.
|
||||
| `Issue #3900 <https://redmine.postgresql.org/issues/3900>`_ - Added multiple drop/delete functionality for the table constraints.
|
||||
| `Issue #3947 <https://redmine.postgresql.org/issues/3947>`_ - Fixed copy-paste row issues in View/Edit Data.
|
||||
| `Issue #3972 <https://redmine.postgresql.org/issues/3972>`_ - Modified keyboard shortcuts in Query Tool for OSX native support.
|
||||
| `Issue #3988 <https://redmine.postgresql.org/issues/3988>`_ - Fixed cursor disappeared issue in the query editor for some of the characters when zoomed out.
|
||||
| `Issue #4180 <https://redmine.postgresql.org/issues/4180>`_ - Fixed mouse click issue where it does not select an object in Browser unless the pointer is over the object.
|
||||
| `Issue #4206 <https://redmine.postgresql.org/issues/4206>`_ - Ensure that the grant wizard should be closed on pressing the ESC key.
|
||||
| `Issue #4292 <https://redmine.postgresql.org/issues/4292>`_ - Added dark mode support for the configuration dialog on Windows/macOS runtime.
|
||||
| `Issue #4440 <https://redmine.postgresql.org/issues/4440>`_ - Ensure the DROP statements in reverse engineered SQL are properly quoted for all objects.
|
||||
| `Issue #4445 <https://redmine.postgresql.org/issues/4445>`_ - Ensure all object names in the title line of the reverse-engineered SQL are not quoted.
|
||||
| `Issue #4504 <https://redmine.postgresql.org/issues/4504>`_ - Fixed an issue where like options should be disabled if the relation is not selected while creating a table.
|
||||
| `Issue #4512 <https://redmine.postgresql.org/issues/4512>`_ - Fixed calendar opening issue on the exception tab inside the schedules tab of pgAgent.
|
||||
| `Issue #4545 <https://redmine.postgresql.org/issues/4545>`_ - Fixed an issue wherein grant wizard the last object is not selectable.
|
||||
| `Issue #4573 <https://redmine.postgresql.org/issues/4573>`_ - Ensure that if the delimiter is set other than comma then download the file as '.txt' file.
|
||||
| `Issue #4684 <https://redmine.postgresql.org/issues/4684>`_ - Fixed encoding issue while saving data in encoded charset other than 'utf-8'.
|
||||
| `Issue #4709 <https://redmine.postgresql.org/issues/4709>`_ - Added schema-qualified dictionary names in FTS configuration to avoid confusion of duplicate names.
|
||||
| `Issue #4856 <https://redmine.postgresql.org/issues/4856>`_ - Enable the save button by default when a query tool is opened with CREATE or other scripts.
|
||||
| `Issue #4858 <https://redmine.postgresql.org/issues/4858>`_ - Fixed python exception error when user tries to download the CSV and there is a connection issue.
|
||||
| `Issue #4864 <https://redmine.postgresql.org/issues/4864>`_ - Make the configuration window in runtime to auto-resize.
|
||||
| `Issue #4873 <https://redmine.postgresql.org/issues/4873>`_ - Fixed an issue when changing the comments of the procedure with arguments gives error in case of overloading.
|
||||
| `Issue #4946 <https://redmine.postgresql.org/issues/4946>`_ - Fixed an issue when the user creates a temporary table with 'on commit drop as' clause.
|
||||
| `Issue #4957 <https://redmine.postgresql.org/issues/4957>`_ - Ensure that Constraint Trigger, Deferrable, Deferred option should be disabled when the user selects EDB-SPL function for the trigger.
|
||||
| `Issue #4969 <https://redmine.postgresql.org/issues/4969>`_ - Fixed an issue where changing the values of columns with JSONB or JSON types to NULL.
|
||||
| `Issue #5007 <https://redmine.postgresql.org/issues/5007>`_ - Ensure index dropdown should have existing indexes while creating unique constraints.
|
||||
| `Issue #5043 <https://redmine.postgresql.org/issues/5043>`_ - Fixed an issue where columns names should be visible in the order of their creation in the browser tree.
|
||||
| `Issue #5053 <https://redmine.postgresql.org/issues/5053>`_ - Fixed an issue where changing the columns in the existing view throws an error.
|
||||
| `Issue #5157 <https://redmine.postgresql.org/issues/5157>`_ - Ensure that default sort order should be using the primary key in View/Edit data.
|
||||
| `Issue #5180 <https://redmine.postgresql.org/issues/5180>`_ - Fixed an issue where the autovacuum_enabled parameter is added automatically in the RE-SQL when the table has been created using the WITH clause.
|
||||
| `Issue #5210 <https://redmine.postgresql.org/issues/5210>`_ - Ensure that text larger than underlying field size should not be truncated automatically.
|
||||
| `Issue #5213 <https://redmine.postgresql.org/issues/5213>`_ - Fixed an issue when the user performs refresh on a large size materialized view.
|
||||
| `Issue #5227 <https://redmine.postgresql.org/issues/5227>`_ - Fixed an issue where user cannot be added if many users are already exists.
|
||||
| `Issue #5268 <https://redmine.postgresql.org/issues/5268>`_ - Fixed generated SQL when any token in FTS Configuration or any option in FTS Dictionary is changed.
|
||||
| `Issue #5270 <https://redmine.postgresql.org/issues/5270>`_ - Ensure that OID should be shown in properties for Synonyms.
|
||||
| `Issue #5275 <https://redmine.postgresql.org/issues/5275>`_ - Fixed tab key navigation issue for parameters in table dialog.
|
||||
| `Issue #5302 <https://redmine.postgresql.org/issues/5302>`_ - Fixed an issue where difference SQL is not seen in the schema diff tool for Types.
|
||||
| `Issue #5314 <https://redmine.postgresql.org/issues/5314>`_ - Ensure that switch cell is in sync with switch control for accessibility.
|
||||
| `Issue #5315 <https://redmine.postgresql.org/issues/5315>`_ - Fixed an issue where schema diff showing changes in the identical domain constraints.
|
||||
| `Issue #5350 <https://redmine.postgresql.org/issues/5350>`_ - Fixed an issue where schema diff marks an identical table as different.
|
||||
| `Issue #5351 <https://redmine.postgresql.org/issues/5351>`_ - Fixed compilation warnings while building pgAdmin.
|
||||
| `Issue #5352 <https://redmine.postgresql.org/issues/5352>`_ - Fixed the rightmost and bottom tooltip crop issues in the explain query plan.
|
||||
| `Issue #5356 <https://redmine.postgresql.org/issues/5356>`_ - Fixed modified SQL issue while adding an exception in pgAgent job schedule.
|
||||
| `Issue #5361 <https://redmine.postgresql.org/issues/5361>`_ - Fixes an issue where pgAdmin4 GUI does not display properly in IE 11.
|
||||
| `Issue #5362 <https://redmine.postgresql.org/issues/5362>`_ - Fixed an issue where the identical packages and sequences visible as different in the schema diff tool.
|
||||
| `Issue #5366 <https://redmine.postgresql.org/issues/5366>`_ - Added alert message to Reset Layout if any of the panels from Query Tool failed to load.
|
||||
| `Issue #5371 <https://redmine.postgresql.org/issues/5371>`_ - Fixed tab key navigation for some dialogs.
|
||||
| `Issue #5375 <https://redmine.postgresql.org/issues/5375>`_ - Fixed an issue where the Mode cell of argument grid does not appear completely in the Functions dialog.
|
||||
| `Issue #5383 <https://redmine.postgresql.org/issues/5383>`_ - Fixed syntax error while refreshing the existing synonyms.
|
||||
| `Issue #5387 <https://redmine.postgresql.org/issues/5387>`_ - Fixed an issue where the mode is not shown in the properties dialog of functions/procedures if all the arguments are "IN" arguments.
|
||||
| `Issue #5396 <https://redmine.postgresql.org/issues/5396>`_ - Fixed an issue where the search object module unable to locate the object in the browser tree.
|
||||
| `Issue #5400 <https://redmine.postgresql.org/issues/5400>`_ - Fixed internal server error when the database server is logged in with non-super user.
|
||||
| `Issue #5401 <https://redmine.postgresql.org/issues/5401>`_ - Fixed search object issue when the object name contains special characters.
|
||||
| `Issue #5402 <https://redmine.postgresql.org/issues/5402>`_ - Fixed an issue where the checkbox is not visible on Configuration dialog in runtime for the dark theme.
|
||||
| `Issue #5409 <https://redmine.postgresql.org/issues/5409>`_ - Fixed validation issue in Synonyms node.
|
||||
| `Issue #5410 <https://redmine.postgresql.org/issues/5410>`_ - Fixed an issue while removing the package body showing wrong modified SQL.
|
||||
| `Issue #5415 <https://redmine.postgresql.org/issues/5415>`_ - Ensure that the query tool context menu should work on the collection nodes.
|
||||
| `Issue #5419 <https://redmine.postgresql.org/issues/5419>`_ - Ensure that the user should not be able to change the authentication source.
|
||||
| `Issue #5420 <https://redmine.postgresql.org/issues/5420>`_ - Ensure error should be handled properly when LDAP user is created with the same name.
|
||||
| `Issue #5430 <https://redmine.postgresql.org/issues/5430>`_ - Added title to the login page.
|
||||
| `Issue #5432 <https://redmine.postgresql.org/issues/5432>`_ - Fixed an issue where an internal user is not created if the authentication source is set to internal and ldap.
|
||||
| `Issue #5439 <https://redmine.postgresql.org/issues/5439>`_ - Fixed an issue where the user is not able to create a server if login with an LDAP account.
|
||||
| `Issue #5441 <https://redmine.postgresql.org/issues/5441>`_ - Fixed an issue where the search object not able to locate pg_toast_* tables in the pg_toast schema.
|
||||
| `Issue #5447 <https://redmine.postgresql.org/issues/5447>`_ - Fixed failed to fetch utility error when click on refresh(any option) materialized view.
|
||||
@@ -0,0 +1,34 @@
|
||||
.. _search_objects:
|
||||
|
||||
***********************
|
||||
`Search objects`:index:
|
||||
***********************
|
||||
|
||||
.. image:: images/search_objects.png
|
||||
:alt: Search objects dialog
|
||||
:align: center
|
||||
|
||||
With this dialog, you can search for almost any kind of objects in a
|
||||
database.
|
||||
|
||||
You can access it by right clicking a database or any of its child nodes
|
||||
and select "Search objects". You can also access it by hitting the
|
||||
shortcut (default ALT+SHIFT+S).
|
||||
|
||||
The minimum pattern length are 3 characters. The search performed is
|
||||
non-casesensitive and will find all objets whose name contains the pattern.
|
||||
You can only search for object names.
|
||||
|
||||
The result is presented in the grid with object name, object type and
|
||||
the object tree path in the :ref:`browser <tree_control>`. You can double
|
||||
click on a result row to select the object in the
|
||||
:ref:`browser <tree_control>`. If the object is greyed out, this means that you
|
||||
have not enabled those object types in the :ref:`preferences <preferences>`,
|
||||
so you can't double click on it.
|
||||
|
||||
You can filter based on a particular object type by selecting one from the
|
||||
object type dropdown. If the search button is hit when one of the object type
|
||||
is selected then only those types will be fetch from the database.
|
||||
An object type will not be visible in the dropdown if the database server
|
||||
does not support it or if it is not enabled from the
|
||||
:ref:`preferences <preferences>`.
|
||||
@@ -395,6 +395,14 @@ Use the fields in the *Advanced* tab to define advanced features for the table:
|
||||
* Use the *Fill Factor* field to specify a fill factor for the table. The fill
|
||||
factor for a table is a percentage between 10 and 100. 100 (complete packing)
|
||||
is the default.
|
||||
* Use the *Toast tuple target* field to set toast_tuple_target storage
|
||||
parameter of the table. The toast_tuple_target value is in bytes and has
|
||||
minimum value of 128. This field will be enabled only for
|
||||
PostgreSQL version >= 11
|
||||
* Use the *Parallel workers* field to set parallel_workers storage
|
||||
parameter of the table. The parallel_workers sets the number of workers that
|
||||
should be used to assist a parallel scan of the table. This field will be
|
||||
enabled only for PostgreSQL version >= 9.6
|
||||
* Move the *Has OIDs?* switch to the *Yes* position to specify that each row
|
||||
within a table has a system-assigned object identifier. The default is *No*.
|
||||
* Move the *Unlogged?* switch to the *Yes* position to disable logging for the
|
||||
|
||||
@@ -18,4 +18,6 @@ the selected browser node.
|
||||
* Use the :ref:`View Data <editgrid>` button to view/edit the data stored in a
|
||||
selected table.
|
||||
* Use the :ref:`Filtered Rows <viewdata_filter>` button to access the Data Filter popup
|
||||
to apply a filter to a set of data for viewing/editing.
|
||||
to apply a filter to a set of data for viewing/editing.
|
||||
* Use the :ref:`Search objects <search_objects>` button to access the search objects
|
||||
dialog. It helps you search any database object.
|
||||
@@ -5,12 +5,12 @@
|
||||
*******************************
|
||||
|
||||
When invoking pgAdmin in desktop mode, a password is randomly generated, and
|
||||
then ignored. If you install pgAdmin in server mode, you will be prompted for
|
||||
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
|
||||
use the *User Management* dialog to:
|
||||
|
||||
* add or delete pgAdmin roles
|
||||
* assign privileges
|
||||
@@ -20,11 +20,13 @@ use the *User Management* dialog to
|
||||
:alt: pgAdmin user management window
|
||||
:align: center
|
||||
|
||||
Use the *Filter by email* search field to find a user; enter a user's email
|
||||
address to find a user. If the user exists, the *User Management* table will
|
||||
display the user's current information.
|
||||
Use the *Search* field to specify a criteria and review a list of users
|
||||
that matches with the specified criteria. You can enter a value that matches
|
||||
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 *Add* to add new role.
|
||||
To add a user, click the Add (+) button at the top right corner.
|
||||
|
||||
.. image:: images/add_user.png
|
||||
:alt: pgAdmin user management window add new user
|
||||
@@ -32,10 +34,16 @@ To add a user, click *Add* to add new role.
|
||||
|
||||
Provide information about the new pgAdmin role in the row:
|
||||
|
||||
* Click in the *Email* field, and provide an email address for the user; this
|
||||
address will be used to recover the password associated with the role should
|
||||
the password be lost.
|
||||
* Use the drop-down listbox next to *Role* to select whether a user is an
|
||||
* 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 LDAP
|
||||
authentication is not enabled for pgAdmin, then *Authentication source* field
|
||||
is disabled.
|
||||
* Click in the *Username* field, and provide a username for the user. This field
|
||||
is enabled only if you select *ldap* as authentication source. 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 *Administrator* if the user will have administrative privileges
|
||||
@@ -46,8 +54,10 @@ Provide information about the new pgAdmin role in the row:
|
||||
active; the default is *Yes*. Use this switch to disable account activity
|
||||
without deleting an account.
|
||||
* Use the *New password* field to provide the password associated with the user
|
||||
specified in the *Email* field.
|
||||
* Re-enter the password in the *Confirm password* field.
|
||||
specified in the *Email* field. This field is disabled if you select *ldap*
|
||||
as authentication source since LDAP password is not stored in the pgAdmin database.
|
||||
* Re-enter the password in the *Confirm password* field. This field is disabled
|
||||
if you select *ldap* as authentication source.
|
||||
|
||||
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.
|
||||
@@ -58,5 +68,3 @@ users, but otherwise have the same capabilities as those with the *User* role.
|
||||
* 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.
|
||||
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
This directory contains the build runner script for creating .DEB packages for
|
||||
Debian and Ubuntu.
|
||||
|
||||
Build configuration
|
||||
===================
|
||||
|
||||
To build Debian/Ubuntu packages, first run the setup.sh script as root to
|
||||
install the required pre-requisites, e.g.
|
||||
|
||||
# pkg/debian/setup.sh
|
||||
|
||||
Building packages
|
||||
=================
|
||||
|
||||
To build a set of packages, from the top-level source directory run:
|
||||
|
||||
$ make debian
|
||||
|
||||
or
|
||||
|
||||
$ pkg/debian/build.sh
|
||||
|
||||
Four .deb packages will be created in the dist/ directory:
|
||||
|
||||
pgadmin4_<version>_<distro>_<distro_version>_all.deb
|
||||
A convenience package that depends on all the others.
|
||||
|
||||
pgadmin4-server_<version>_<distro>_<distro_version>_<arch>.deb
|
||||
The core server, e.g. the Python and JS code and the online documentation.
|
||||
|
||||
pgadmin4-desktop_<version>_<distro>_<distro_version>_<arch>.deb
|
||||
The desktop runtime. Requires the server package.
|
||||
|
||||
pgadmin4-web_<version>_<distro>_<distro_version>_<arch>.deb
|
||||
The server mode setup script for configuring Apache HTTPD. Requires the
|
||||
server package.
|
||||
|
||||
Supported platforms
|
||||
===================
|
||||
|
||||
Debian 9 & 10
|
||||
Ubuntu 16.04, 18.04, 19.04 & 19.10
|
||||
|
||||
Warning
|
||||
=======
|
||||
|
||||
These scripts are experimental - use at your own risk!
|
||||
@@ -0,0 +1,108 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Exit when any command fails
|
||||
set -e
|
||||
|
||||
# Debugging shizz
|
||||
trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG
|
||||
trap 'if [ $? -ne 0 ]; then echo "\"${last_command}\" command filed with exit code $?."; fi' EXIT
|
||||
|
||||
OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_NAME=$(cat /etc/os-release | grep "^ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_ARCH=$(dpkg-architecture -qDEB_HOST_ARCH)
|
||||
|
||||
# Common Linux build functions
|
||||
source pkg/linux/build-functions.sh
|
||||
|
||||
# Assemble the "standard" installation footprint
|
||||
_setup_env $0 "debian"
|
||||
_cleanup "deb"
|
||||
_setup_dirs
|
||||
_create_python_virtualenv "debian"
|
||||
_build_runtime
|
||||
_build_docs "debian"
|
||||
_copy_code
|
||||
|
||||
#
|
||||
# Server package
|
||||
#
|
||||
|
||||
# Create the Debian packaging stuffs for the server
|
||||
echo "Creating the server package..."
|
||||
mkdir "${SERVERROOT}/DEBIAN"
|
||||
|
||||
cat << EOF > "${SERVERROOT}/DEBIAN/control"
|
||||
Package: ${APP_NAME}-server
|
||||
Version: ${APP_LONG_VERSION}
|
||||
Architecture: ${OS_ARCH}
|
||||
Depends: python3, libpq5
|
||||
Recommends: postgresql-client | postgresql-client-12 | postgresql-client-11 | postgresql-client-10
|
||||
Maintainer: pgAdmin Development Team <pgadmin-hackers@postgresql.org>
|
||||
Description: The core server package for pgAdmin. pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.
|
||||
EOF
|
||||
|
||||
# Build the Debian package for the server
|
||||
fakeroot dpkg-deb --build "${SERVERROOT}" "${DISTROOT}/${APP_NAME}-server_${APP_LONG_VERSION}_${OS_ARCH}.deb"
|
||||
|
||||
#
|
||||
# Desktop package
|
||||
#
|
||||
|
||||
# Create the Debian packaging stuffs for the desktop
|
||||
echo "Creating the desktop package..."
|
||||
mkdir "${DESKTOPROOT}/DEBIAN"
|
||||
|
||||
cat << EOF > "${DESKTOPROOT}/DEBIAN/control"
|
||||
Package: ${APP_NAME}-desktop
|
||||
Version: ${APP_LONG_VERSION}
|
||||
Architecture: ${OS_ARCH}
|
||||
Depends: ${APP_NAME}-server, libqt5gui5
|
||||
Maintainer: pgAdmin Development Team <pgadmin-hackers@postgresql.org>
|
||||
Description: The desktop user interface for pgAdmin. pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.
|
||||
EOF
|
||||
|
||||
# Build the Debian package for the server
|
||||
fakeroot dpkg-deb --build "${DESKTOPROOT}" "${DISTROOT}/${APP_NAME}-desktop_${APP_LONG_VERSION}_${OS_ARCH}.deb"
|
||||
|
||||
#
|
||||
# Web package
|
||||
#
|
||||
|
||||
# Create the Debian packaging stuffs for the web
|
||||
echo "Creating the web package..."
|
||||
mkdir "${WEBROOT}/DEBIAN"
|
||||
|
||||
cat << EOF > "${WEBROOT}/DEBIAN/control"
|
||||
Package: ${APP_NAME}-web
|
||||
Version: ${APP_LONG_VERSION}
|
||||
Architecture: all
|
||||
Depends: ${APP_NAME}-server, apache2, libapache2-mod-wsgi-py3
|
||||
Maintainer: pgAdmin Development Team <pgadmin-hackers@postgresql.org>
|
||||
Description: The web interface for pgAdmin, hosted under Apache HTTPD. pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.
|
||||
EOF
|
||||
|
||||
mkdir -p "${WEBROOT}/etc/apache2/conf-available"
|
||||
cp "${SOURCEDIR}/pkg/debian/pgadmin4.conf" "${WEBROOT}/etc/apache2/conf-available"
|
||||
|
||||
# Build the Debian package for the web
|
||||
fakeroot dpkg-deb --build "${WEBROOT}" "${DISTROOT}/${APP_NAME}-web_${APP_LONG_VERSION}_all.deb"
|
||||
|
||||
#
|
||||
# Meta package
|
||||
#
|
||||
|
||||
# Create the Debian packaging stuffs for the meta package
|
||||
echo "Creating the meta package..."
|
||||
mkdir "${METAROOT}/DEBIAN"
|
||||
|
||||
cat << EOF > "${METAROOT}/DEBIAN/control"
|
||||
Package: ${APP_NAME}
|
||||
Version: ${APP_LONG_VERSION}
|
||||
Architecture: all
|
||||
Depends: ${APP_NAME}-server, ${APP_NAME}-desktop, ${APP_NAME}-web
|
||||
Maintainer: pgAdmin Development Team <pgadmin-hackers@postgresql.org>
|
||||
Description: Installs all required components to run pgAdmin in desktop and web modes. pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.
|
||||
EOF
|
||||
|
||||
# Build the Debian meta package
|
||||
fakeroot dpkg-deb --build "${METAROOT}" "${DISTROOT}/${APP_NAME}_${APP_LONG_VERSION}_all.deb"
|
||||
@@ -0,0 +1,9 @@
|
||||
WSGIDaemonProcess pgadmin processes=1 threads=25 python-home=/usr/pgadmin4/venv
|
||||
WSGIScriptAlias /pgadmin4 /usr/pgadmin4/web/pgAdmin4.wsgi
|
||||
|
||||
<Directory /usr/pgadmin4/web/>
|
||||
WSGIProcessGroup pgadmin
|
||||
WSGIApplicationGroup %{GLOBAL}
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "$EUID" -ne 0 ]
|
||||
then echo "This script must be run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Installing system pre-requisites..."
|
||||
apt install -y curl apt-transport-https ca-certificates
|
||||
|
||||
echo "Removing yarn (which may not be the package we expect)..."
|
||||
dpkg -r yarn
|
||||
|
||||
# Node repo
|
||||
echo "Setting up the NodeJS repo..."
|
||||
curl -sL https://deb.nodesource.com/setup_12.x | bash -
|
||||
|
||||
# Yarn repo
|
||||
echo "Setting up the Yarn repo..."
|
||||
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
|
||||
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
|
||||
|
||||
echo "Running apt update..."
|
||||
apt update
|
||||
|
||||
# Install pre-reqs
|
||||
echo "Installing build pre-requisites..."
|
||||
apt install -y build-essential python3-dev python3-venv python3-sphinx libpq-dev libffi-dev qt5-default nodejs yarn
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
This directory contains package build scripts and assets that are common to various Linux distributions.
|
||||
|
||||
You should not use them directly!
|
||||
@@ -0,0 +1,161 @@
|
||||
_setup_env() {
|
||||
echo "Setting up the environment..."
|
||||
WD=$(cd `dirname "$1"` && pwd)
|
||||
SOURCEDIR=$(realpath "${WD}/../..")
|
||||
BUILDROOT=$(realpath "${WD}/../../$2-build")
|
||||
DESKTOPROOT=${BUILDROOT}/desktop
|
||||
METAROOT=${BUILDROOT}/meta
|
||||
SERVERROOT=${BUILDROOT}/server
|
||||
WEBROOT=${BUILDROOT}/web
|
||||
DISTROOT=$(realpath "${WD}/../../dist")
|
||||
APP_RELEASE=`grep "^APP_RELEASE" web/config.py | cut -d"=" -f2 | sed 's/ //g'`
|
||||
APP_REVISION=`grep "^APP_REVISION" web/config.py | cut -d"=" -f2 | sed 's/ //g'`
|
||||
APP_NAME=`grep "^APP_NAME" web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //' | sed 's/ //g' | tr '[:upper:]' '[:lower:]'`
|
||||
APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
|
||||
APP_SHORT_VERSION=`echo ${APP_LONG_VERSION} | cut -d . -f1,2`
|
||||
APP_SUFFIX=`grep "^APP_SUFFIX" web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g"`
|
||||
if [ ! -z ${APP_SUFFIX} ]; then
|
||||
APP_LONG_VERSION=${APP_LONG_VERSION}-${APP_SUFFIX}
|
||||
fi
|
||||
}
|
||||
|
||||
_cleanup() {
|
||||
echo "Cleaning up the old environment and app..."
|
||||
if test -f ${SOURCEDIR}/runtime/pgAdmin4; then
|
||||
rm -rf ${SOURCEDIR}/runtime/pgAdmin4
|
||||
fi
|
||||
if test -d ${BUILDROOT}; then
|
||||
rm -rf ${BUILDROOT}
|
||||
fi
|
||||
rm -f ${DISTROOT}/pgadmin4*.$1
|
||||
}
|
||||
|
||||
_setup_dirs() {
|
||||
echo "Creating output directories..."
|
||||
test -d ${BUILDROOT} || mkdir ${BUILDROOT}
|
||||
test -d ${DESKTOPROOT} || mkdir ${DESKTOPROOT}
|
||||
test -d ${METAROOT} || mkdir ${METAROOT}
|
||||
test -d ${SERVERROOT} || mkdir ${SERVERROOT}
|
||||
test -d ${WEBROOT} || mkdir ${WEBROOT}
|
||||
test -d ${DISTROOT} || mkdir ${DISTROOT}
|
||||
}
|
||||
|
||||
_create_python_virtualenv() {
|
||||
echo "Creating the virtual environment..."
|
||||
|
||||
cd ${SERVERROOT}
|
||||
|
||||
# Create the required directories
|
||||
mkdir -p "usr/${APP_NAME}"
|
||||
cd "usr/${APP_NAME}"
|
||||
|
||||
# Create the blank venv
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
|
||||
pip3 install --no-cache-dir --no-binary psycopg2 -r ${SOURCEDIR}/requirements.txt
|
||||
|
||||
# Figure out some paths for use when completing the venv
|
||||
# Use "python3" here as we want the venv path
|
||||
PYMODULES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
|
||||
DIR_PYMODULES_PATH=`dirname ${PYMODULES_PATH}`
|
||||
|
||||
# Use /usr/bin/python3 here as we want the system path
|
||||
if [ $1 == "debian" ]; then
|
||||
PYSYSLIB_PATH=$(/usr/bin/python3 -c "import sys; print('%s/lib/python%d.%.d' % (sys.prefix, sys.version_info.major, sys.version_info.minor))")
|
||||
else
|
||||
PYSYSLIB_PATH=$(/usr/bin/python3 -c "import sys; print('%s/lib64/python%d.%.d' % (sys.prefix, sys.version_info.major, sys.version_info.minor))")
|
||||
fi
|
||||
|
||||
# Symlink in the rest of the Python libs. This is required because the runtime
|
||||
# will clear PYTHONHOME for safety, which has the side-effect of preventing
|
||||
# it from finding modules that are not explicitly included in the venv
|
||||
cd ${DIR_PYMODULES_PATH}
|
||||
|
||||
# Files
|
||||
for FULLPATH in ${PYSYSLIB_PATH}/*.py; do
|
||||
FILE=${FULLPATH##*/}
|
||||
if [ ! -e ${FILE} ]; then
|
||||
ln -s ${FULLPATH} ${FILE}
|
||||
fi
|
||||
done
|
||||
|
||||
# Paths
|
||||
for FULLPATH in ${PYSYSLIB_PATH}/*/; do
|
||||
FULLPATH=${FULLPATH%*/}
|
||||
FILE=${FULLPATH##*/}
|
||||
if [ ! -e ${FILE} ]; then
|
||||
ln -s ${FULLPATH} ${FILE}
|
||||
fi
|
||||
done
|
||||
|
||||
# Remove tests
|
||||
cd site-packages
|
||||
find . -name "test" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "tests" -type d -print0 | xargs -0 rm -rf
|
||||
|
||||
# Link the python<version> directory to python so that the private environment path is found by the application.
|
||||
if test -d ${DIR_PYMODULES_PATH}; then
|
||||
ln -s $(basename ${DIR_PYMODULES_PATH}) ${DIR_PYMODULES_PATH}/../python
|
||||
fi
|
||||
}
|
||||
|
||||
_build_runtime() {
|
||||
echo "Building the desktop runtime..."
|
||||
cd ${SOURCEDIR}/runtime
|
||||
if [ -f Makefile ]; then
|
||||
make clean
|
||||
fi
|
||||
if hash qmake-qt5 2>/dev/null; then
|
||||
qmake-qt5
|
||||
else
|
||||
qmake
|
||||
fi
|
||||
make
|
||||
mkdir -p "${DESKTOPROOT}/usr/${APP_NAME}/bin"
|
||||
cp pgAdmin4 "${DESKTOPROOT}/usr/${APP_NAME}/bin/pgadmin4"
|
||||
mkdir -p "${DESKTOPROOT}/usr/${APP_NAME}/share"
|
||||
cp pgAdmin4.ico "${DESKTOPROOT}/usr/${APP_NAME}/share/pgadmin4.ico"
|
||||
mkdir -p "${DESKTOPROOT}/usr/share/applications"
|
||||
cp ../pkg/linux/pgadmin4.desktop "${DESKTOPROOT}/usr/share/applications"
|
||||
}
|
||||
|
||||
_build_docs() {
|
||||
echo "Building the documentation..."
|
||||
cd "${SERVERROOT}" && mkdir -p "usr/${APP_NAME}/share/docs/en_US/html"
|
||||
cd "${SOURCEDIR}/docs/en_US"
|
||||
python3 build_code_snippet.py
|
||||
SYS_PYTHONPATH=$(/usr/bin/python3 -c "import sys; print(':'.join([p for p in sys.path if p]))")
|
||||
if [ $1 == "redhat" -a "${OS_VERSION}" == "7" ]; then
|
||||
PYTHONPATH=$PYTHONPATH:${SYS_PYTHONPATH} python3 /usr/local/bin/sphinx-build . "${SERVERROOT}/usr/${APP_NAME}/share/docs/en_US/html"
|
||||
else
|
||||
PYTHONPATH=$PYTHONPATH:${SYS_PYTHONPATH} python3 -msphinx . "${SERVERROOT}/usr/${APP_NAME}/share/docs/en_US/html"
|
||||
fi
|
||||
}
|
||||
|
||||
_copy_code() {
|
||||
echo "Copying the server code..."
|
||||
|
||||
# Remove any TCL-related files that may cause us problems
|
||||
find "${SERVERROOT}/usr/${APP_NAME}/venv/" -name "_tkinter*" -print0 | xargs -0 rm -rf
|
||||
|
||||
pushd ${SOURCEDIR}/web
|
||||
yarn install
|
||||
yarn run bundle
|
||||
popd
|
||||
|
||||
# copy the web directory to the bundle as it is required by runtime
|
||||
cp -r "${SOURCEDIR}/web" "${SERVERROOT}/usr/${APP_NAME}/web/"
|
||||
cp "${SOURCEDIR}/pkg/linux/config_distro.py" "${SERVERROOT}/usr/${APP_NAME}/web/"
|
||||
cd "${SERVERROOT}/usr/${APP_NAME}/web/"
|
||||
rm -f pgadmin4.db config_local.*
|
||||
rm -rf karma.conf.js package.json node_modules/ regression/ tools/ pgadmin/static/js/generated/.cache
|
||||
find . -name "tests" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "feature_tests" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "__pycache__" -type d -print0 | xargs -0 rm -rf
|
||||
|
||||
# Web setup script
|
||||
mkdir -p "${WEBROOT}/usr/${APP_NAME}/bin/"
|
||||
cp "${SOURCEDIR}/pkg/linux/setup-web.sh" "${WEBROOT}/usr/${APP_NAME}/bin/"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
HELP_PATH = '../../../share/docs/en_US/html/'
|
||||
DEFAULT_BINARY_PATHS = {
|
||||
'pg': '/usr/bin',
|
||||
'ppas': ''
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Name=pgAdmin 4
|
||||
Exec=/usr/pgadmin4/bin/pgadmin4
|
||||
Icon=/usr/pgadmin4/share/pgadmin4.ico
|
||||
Type=Application
|
||||
Categories=Application;Development;
|
||||
MimeType=text/html
|
||||
Comment=Management tools for PostgreSQL
|
||||
Keywords=database;db;sql;query;administration;development;
|
||||
@@ -0,0 +1,107 @@
|
||||
#!/bin/bash
|
||||
|
||||
#
|
||||
# Setup pgadmin4 in server mode
|
||||
#
|
||||
|
||||
if [ "$EUID" -ne 0 ]
|
||||
then echo "This script must be run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get the distro
|
||||
IS_REDHAT=0
|
||||
IS_DEBIAN=0
|
||||
UNAME=$(uname -a)
|
||||
|
||||
if [ -f /etc/redhat-release ]; then
|
||||
IS_REDHAT=1
|
||||
APACHE=httpd
|
||||
echo "Setting up pgAdmin 4 in web mode on a Redhat platform..."
|
||||
elif [[ ${UNAME} =~ "Ubuntu" ]] || [[ ${UNAME} =~ "debian" ]]; then
|
||||
IS_DEBIAN=1
|
||||
APACHE=apache2
|
||||
echo "Setting up pgAdmin 4 in web mode on a Debian platform..."
|
||||
fi
|
||||
|
||||
# Run setup script first:
|
||||
echo "Creating configuration database..."
|
||||
/usr/pgadmin4/venv/bin/python3 /usr/pgadmin4/web/setup.py
|
||||
|
||||
if [ $? != 0 ]
|
||||
then
|
||||
echo "Error setting up server mode. Please examine the output above."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create and own directories:
|
||||
echo "Creating storage and log directories..."
|
||||
mkdir -p /var/log/pgadmin /var/lib/pgadmin
|
||||
|
||||
if [ ${IS_REDHAT} == 1 ]; then
|
||||
chown apache: /var/log/pgadmin /var/lib/pgadmin -R
|
||||
else
|
||||
chown www-data: /var/log/pgadmin /var/lib/pgadmin -R
|
||||
fi
|
||||
|
||||
# Set SELinux up:
|
||||
if [ ${IS_REDHAT} == 1 ]; then
|
||||
echo "Configuring SELinux..."
|
||||
setsebool -P httpd_can_network_connect 1
|
||||
setsebool -P httpd_can_network_connect_db 1
|
||||
semanage fcontext -a -t httpd_var_lib_t '/var/lib/pgadmin(/.*)?'
|
||||
restorecon -R -v /var/lib/pgadmin
|
||||
semanage fcontext -a -t httpd_log_t '/var/log/pgadmin(/.*)?'
|
||||
restorecon -R -v /var/log/pgadmin
|
||||
fi
|
||||
|
||||
# Setup Apache on Debian/Ubuntu
|
||||
if [ ${IS_DEBIAN} == 1 ]; then
|
||||
read -p "We can now configure the Apache Web server for you. This involves enabling the wsgi module and configuring the pgAdmin 4 application to mount at /pgadmin4. Do you wish to continue (y/n)? " RESPONSE
|
||||
case ${RESPONSE} in
|
||||
y|Y )
|
||||
a2enmod wsgi 1> /dev/null
|
||||
a2enconf pgadmin4 1> /dev/null
|
||||
;;
|
||||
* )
|
||||
exit 1;;
|
||||
esac
|
||||
fi
|
||||
|
||||
APACHE_STATUS=`ps cax | grep ${APACHE}`
|
||||
if [ $? -eq 0 ]; then
|
||||
read -p "The Apache web server is running. A restart is required for the pgAdmin 4 installation to complete. Would you like to continue (y/n)? " RESPONSE
|
||||
case ${RESPONSE} in
|
||||
y|Y )
|
||||
systemctl restart ${APACHE}
|
||||
if [ $? != 0 ]; then
|
||||
echo "Error restarting ${APACHE}. Please check the systemd logs"
|
||||
else
|
||||
echo "Apache successfully restarted. You can now start using pgAdmin 4 in web mode"
|
||||
fi;;
|
||||
* )
|
||||
exit 1;;
|
||||
esac
|
||||
else
|
||||
read -p "The Apache web server is not running. We can enable and start the web server for you to finish pgAdmin 4 installation. Would you like to continue (y/n)? " RESPONSE
|
||||
case ${RESPONSE} in
|
||||
y|Y )
|
||||
systemctl enable ${APACHE}
|
||||
if [ $? != 0 ]; then
|
||||
echo "Error enabling ${APACHE}. Please check the systemd logs"
|
||||
else
|
||||
echo "Apache successfully enabled."
|
||||
fi
|
||||
|
||||
systemctl start ${APACHE}
|
||||
if [ $? != 0 ]; then
|
||||
echo "Error starting ${APACHE}. Please check the systemd logs"
|
||||
else
|
||||
echo "Apache successfully started. You can now start using pgAdmin 4 in web mode"
|
||||
fi;;
|
||||
* )
|
||||
exit 1;;
|
||||
esac
|
||||
fi
|
||||
|
||||
exit 0
|
||||
@@ -137,8 +137,8 @@ _create_python_virtualenv() {
|
||||
|
||||
# Remove tests
|
||||
cd site-packages
|
||||
find . -name "test" -type d -exec rm -rf "{}" \;
|
||||
find . -name "tests" -type d -exec rm -rf "{}" \;
|
||||
find . -name "test" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "tests" -type d -print0 | xargs -0 rm -rf
|
||||
|
||||
# Link the python<version> directory to python so that the private environment path is found by the application.
|
||||
if test -d ${DIR_PYMODULES_PATH}; then
|
||||
@@ -185,7 +185,7 @@ _complete_bundle() {
|
||||
fi
|
||||
|
||||
# Remove any TCL-related files that may cause us problems
|
||||
find "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/Resources/${VIRTUALENV}/" -name "_tkinter*" -exec rm -f "{}" \;
|
||||
find "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/Resources/${VIRTUALENV}/" -name "_tkinter*" -print0 | xargs -0 rm -f
|
||||
|
||||
# run complete-bundle to copy the dependent libraries and frameworks and fix the rpaths
|
||||
./complete-bundle.sh "${BUILDROOT}/${APP_BUNDLE_NAME}" || { echo complete-bundle.sh failed; exit 1; }
|
||||
@@ -202,9 +202,9 @@ _complete_bundle() {
|
||||
cd "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/Resources/web"
|
||||
rm -f pgadmin4.db config_local.*
|
||||
rm -rf karma.conf.js package.json node_modules/ regression/ tools/ pgadmin/static/js/generated/.cache
|
||||
find . -name "tests" -type d -exec rm -rf "{}" \;
|
||||
find . -name "feature_tests" -type d -exec rm -rf "{}" \;
|
||||
find . -name ".DS_Store" -exec rm -f "{}" \;
|
||||
find . -name "tests" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name "feature_tests" -type d -print0 | xargs -0 rm -rf
|
||||
find . -name ".DS_Store" -print0 | xargs -0 rm -f
|
||||
|
||||
echo "SERVER_MODE = False" > config_distro.py
|
||||
echo "HELP_PATH = '../../../docs/en_US/html/'" >> config_distro.py
|
||||
@@ -215,7 +215,7 @@ _complete_bundle() {
|
||||
|
||||
# Remove the .pyc files if any
|
||||
cd "${BUILDROOT}/${APP_BUNDLE_NAME}"
|
||||
find . -name *.pyc | xargs rm -f
|
||||
find . -name *.pyc -print0 | xargs -0 rm -f
|
||||
}
|
||||
|
||||
_framework_config() {
|
||||
|
||||
@@ -23,7 +23,9 @@ EOF
|
||||
|
||||
test -d "${bundle}/Contents/Frameworks" || mkdir -p "${bundle}/Contents/Frameworks" || exit 1
|
||||
test -d "${bundle}/Contents/PlugIns/platforms" || mkdir -p "${bundle}/Contents/PlugIns/platforms" || exit 1
|
||||
test -d "${bundle}/Contents/PlugIns/imageformats" || mkdir -p "${bundle}/Contents/PlugIns/imageformats" || exit 1
|
||||
cp -f ${QTDIR}/plugins/platforms/libqcocoa.dylib "${bundle}/Contents/PlugIns/platforms" || { echo libqcocoa.dylib not found in ${QTDIR}/plugins/platforms; exit 1; }
|
||||
cp -f ${QTDIR}/plugins/imageformats/libqsvg.dylib "${bundle}/Contents/PlugIns/imageformats" || { echo libqsvg.dylib not found in ${QTDIR}/plugins/imageformats; exit 1; }
|
||||
cp -f ${PGDIR}/lib/libpq.5.dylib "${bundle}/Contents/Frameworks" || { echo libpq.5.dylib not found in ${PGDIR}; exit 1; }
|
||||
|
||||
function CompleteSingleApp() {
|
||||
@@ -59,6 +61,8 @@ function CompleteSingleApp() {
|
||||
); do
|
||||
if echo ${lib} | grep "PlugIns\|libqcocoa" > /dev/null; then
|
||||
lib_loc="Contents/PlugIns/platforms"
|
||||
elif echo ${lib} | grep "PlugIns\|libqsvg" > /dev/null; then
|
||||
lib_loc="Contents/PlugIns/imageformats"
|
||||
elif echo ${lib} | grep "Qt" > /dev/null; then
|
||||
qtfw_path="$(dirname ${lib} | sed 's|.*\(Qt.*framework\)|\1|')"
|
||||
lib_loc="Contents/Frameworks/${qtfw_path}"
|
||||
|
||||
@@ -90,7 +90,8 @@ setup(
|
||||
'Programming Language :: Python :: 3.4',
|
||||
'Programming Language :: Python :: 3.5',
|
||||
'Programming Language :: Python :: 3.6',
|
||||
'Programming Language :: Python :: 3.7'
|
||||
'Programming Language :: Python :: 3.7',
|
||||
'Programming Language :: Python :: 3.8'
|
||||
],
|
||||
|
||||
keywords='pgadmin4,postgresql,postgres',
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
This directory contains the build runner script for creating .RPM packages for
|
||||
Redhat distributions.
|
||||
|
||||
Build configuration
|
||||
===================
|
||||
|
||||
To build RPM packages, first run the setup.sh script as root to install the
|
||||
required pre-requisites, e.g.
|
||||
|
||||
# pkg/redhat/setup.sh
|
||||
|
||||
Building packages
|
||||
=================
|
||||
|
||||
To build a set of packages, from the top-level source directory run:
|
||||
|
||||
$ make redhat
|
||||
|
||||
or
|
||||
|
||||
$ pkg/redhat/build.sh
|
||||
|
||||
Four .rpm packages will be created in the dist/ directory:
|
||||
|
||||
pgadmin4-<version>.<distro>_noarch.rpm
|
||||
A convenience package that depends on all the others.
|
||||
|
||||
pgadmin4-server-<version>.<distro>.<arch>.rpm
|
||||
The core server, e.g. the Python and JS code and the online documentation.
|
||||
|
||||
pgadmin4-desktop-<version>.<distro>.<arch>.rpm
|
||||
The desktop runtime. Requires the server package.
|
||||
|
||||
pgadmin4-web-<version>.<distro>.<arch>.rpm
|
||||
The server mode setup script for configuring Apache HTTPD. Requires the
|
||||
server package.
|
||||
|
||||
pgadmin4-python3-mod_wsgi-4.7.1-2.el7.<arch>.rpm
|
||||
The Python 3 build of mod_wsgi for the Apache HTTPD server. Only built
|
||||
on RHEL/CentOS 7.
|
||||
|
||||
Supported platforms
|
||||
===================
|
||||
|
||||
Fedora 30 & 31
|
||||
RHEL/CentOS 7 & 8
|
||||
|
||||
Warning
|
||||
=======
|
||||
|
||||
These scripts are experimental - use at your own risk!
|
||||
@@ -0,0 +1,214 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Exit when any command fails
|
||||
set -e
|
||||
|
||||
# Debugging shizz
|
||||
trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG
|
||||
trap 'if [ $? -ne 0 ]; then echo "\"${last_command}\" command filed with exit code $?."; fi' EXIT
|
||||
|
||||
OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_NAME=$(cat /etc/os-release | grep "^ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
OS_ARCH=$(arch)
|
||||
|
||||
# Common Linux build functions
|
||||
source pkg/linux/build-functions.sh
|
||||
|
||||
# Assemble the "standard" installation footprint
|
||||
_setup_env $0 "redhat"
|
||||
_cleanup "rpm"
|
||||
_setup_dirs
|
||||
_create_python_virtualenv "redhat"
|
||||
_build_runtime
|
||||
_build_docs "redhat"
|
||||
_copy_code
|
||||
|
||||
#
|
||||
# Server package
|
||||
#
|
||||
|
||||
# Create the Redhat packaging stuffs for the server
|
||||
echo "Creating the server package..."
|
||||
|
||||
cat << EOF > "${BUILDROOT}/server.spec"
|
||||
%global __requires_exclude_from ^/.*$
|
||||
%global __provides_exclude_from ^/.*$
|
||||
|
||||
# Bytecompiling Python 3 doesn't work on RHEL/CentOS 7, so make it a no-op
|
||||
%if 0%{?rhel} && 0%{?rhel} == 7
|
||||
%define __python /bin/true
|
||||
%endif
|
||||
|
||||
%undefine __brp_mangle_shebangs
|
||||
%undefine __brp_ldconfig
|
||||
|
||||
Name: ${APP_NAME}-server
|
||||
Version: ${APP_LONG_VERSION}
|
||||
Release: 1%{?dist}
|
||||
Summary: The core server package for pgAdmin.
|
||||
License: PostgreSQL
|
||||
URL: https://www.pgadmin.org/
|
||||
%if 0%{?rhel} && 0%{?rhel} != 7
|
||||
Requires: python3, libpq
|
||||
Recommends: postgresql
|
||||
%else
|
||||
Requires: python3, postgresql
|
||||
%endif
|
||||
|
||||
%description
|
||||
The core server package for pgAdmin. pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.
|
||||
|
||||
%build
|
||||
|
||||
%install
|
||||
cp -rfa %{pga_build_root}/server/* \${RPM_BUILD_ROOT}
|
||||
|
||||
%files
|
||||
/usr/pgadmin4/*
|
||||
EOF
|
||||
|
||||
# Build the Redhat package for the server
|
||||
rpmbuild --define "pga_build_root ${BUILDROOT}" -bb "${BUILDROOT}/server.spec"
|
||||
|
||||
#
|
||||
# Desktop package
|
||||
#
|
||||
|
||||
# Create the Redhat packaging stuffs for the desktop
|
||||
echo "Creating the desktop package..."
|
||||
|
||||
cat << EOF > "${BUILDROOT}/desktop.spec"
|
||||
%global __requires_exclude_from ^/.*$
|
||||
%global __provides_exclude_from ^/.*$
|
||||
|
||||
%undefine __brp_mangle_shebangs
|
||||
%undefine __brp_ldconfig
|
||||
|
||||
Name: ${APP_NAME}-desktop
|
||||
Version: ${APP_LONG_VERSION}
|
||||
Release: 1%{?dist}
|
||||
Summary: The desktop user interface for pgAdmin.
|
||||
License: PostgreSQL
|
||||
URL: https://www.pgadmin.org/
|
||||
Requires: ${APP_NAME}-server, qt5-qtbase, qt5-qtbase-gui
|
||||
|
||||
%description
|
||||
The desktop user interface for pgAdmin. pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.
|
||||
|
||||
%build
|
||||
|
||||
%install
|
||||
cp -rfa %{pga_build_root}/desktop/* \${RPM_BUILD_ROOT}
|
||||
|
||||
%files
|
||||
/usr/pgadmin4/bin/*
|
||||
/usr/pgadmin4/share/*
|
||||
/usr/share/applications/*
|
||||
EOF
|
||||
|
||||
# Build the Redhat package for the server
|
||||
rpmbuild --define "pga_build_root ${BUILDROOT}" -bb "${BUILDROOT}/desktop.spec"
|
||||
|
||||
|
||||
#
|
||||
# Web package
|
||||
#
|
||||
|
||||
# Create the Redhat packaging stuffs for the web
|
||||
echo "Creating the web package..."
|
||||
|
||||
cat << EOF > "${BUILDROOT}/web.spec"
|
||||
%global __requires_exclude_from ^/.*$
|
||||
%global __provides_exclude_from ^/.*$
|
||||
|
||||
%undefine __brp_mangle_shebangs
|
||||
%undefine __brp_ldconfig
|
||||
|
||||
Name: ${APP_NAME}-web
|
||||
Version: ${APP_LONG_VERSION}
|
||||
Release: 1%{?dist}
|
||||
BuildArch: noarch
|
||||
Summary: The web interface for pgAdmin, hosted under Apache HTTPD.
|
||||
License: PostgreSQL
|
||||
URL: https://www.pgadmin.org/
|
||||
%if 0%{?rhel} && 0%{?rhel} == 7
|
||||
Requires: ${APP_NAME}-server, httpd, pgadmin4-python3-mod_wsgi
|
||||
%else
|
||||
Requires: ${APP_NAME}-server, httpd, python3-mod_wsgi
|
||||
%endif
|
||||
|
||||
%description
|
||||
The web interface for pgAdmin, hosted under Apache HTTPD. pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.
|
||||
|
||||
%build
|
||||
|
||||
%install
|
||||
cp -rfa %{pga_build_root}/web/* \${RPM_BUILD_ROOT}
|
||||
|
||||
%files
|
||||
/usr/pgadmin4/bin/*
|
||||
/etc/httpd/conf.d/*
|
||||
EOF
|
||||
|
||||
mkdir -p "${WEBROOT}/etc/httpd/conf.d"
|
||||
cp "${SOURCEDIR}/pkg/redhat/pgadmin4.conf" "${WEBROOT}/etc/httpd/conf.d"
|
||||
|
||||
# Build the Redhat package for the web
|
||||
rpmbuild --define "pga_build_root ${BUILDROOT}" -bb "${BUILDROOT}/web.spec"
|
||||
|
||||
#
|
||||
# Meta package
|
||||
#
|
||||
|
||||
|
||||
# Create the Redhat packaging stuffs for the meta package
|
||||
echo "Creating the meta package..."
|
||||
|
||||
cat << EOF > "${BUILDROOT}/meta.spec"
|
||||
%global __requires_exclude_from ^/.*$
|
||||
%global __provides_exclude_from ^/.*$
|
||||
|
||||
%undefine __brp_mangle_shebangs
|
||||
%undefine __brp_ldconfig
|
||||
|
||||
Name: ${APP_NAME}
|
||||
Version: ${APP_LONG_VERSION}
|
||||
Release: 1%{?dist}
|
||||
BuildArch: noarch
|
||||
Summary: Installs all required components to run pgAdmin in desktop and web modes.
|
||||
License: PostgreSQL
|
||||
URL: https://www.pgadmin.org/
|
||||
Requires: ${APP_NAME}-server, ${APP_NAME}-desktop, ${APP_NAME}-web
|
||||
|
||||
%description
|
||||
Installs all required components to run pgAdmin in desktop and web modes. pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.
|
||||
|
||||
%build
|
||||
|
||||
%install
|
||||
|
||||
%files
|
||||
|
||||
EOF
|
||||
|
||||
# Build the Redhat package for the meta package
|
||||
rpmbuild --define "pga_build_root ${BUILDROOT}" -bb "${BUILDROOT}/meta.spec"
|
||||
|
||||
#
|
||||
# mod_wsgi for CentOS 7
|
||||
#
|
||||
if [ ${OS_VERSION} == 7 ]; then
|
||||
cp "${SOURCEDIR}/pkg/redhat/pgadmin4-python3-mod_wsgi-exports.patch" ${HOME}/rpmbuild/SOURCES
|
||||
cp "${SOURCEDIR}/pkg/redhat/pgadmin4-python3-mod_wsgi.conf" ${HOME}/rpmbuild/SOURCES
|
||||
curl -o ${HOME}/rpmbuild/SOURCES/mod_wsgi-4.7.1.tar.gz https://codeload.github.com/GrahamDumpleton/mod_wsgi/tar.gz/4.7.1
|
||||
rpmbuild -bb "${SOURCEDIR}/pkg/redhat/pgadmin4-python-mod_wsgi.spec"
|
||||
fi
|
||||
|
||||
#
|
||||
# Get the results!
|
||||
#
|
||||
cp ${HOME}/rpmbuild/RPMS/${OS_ARCH}/${APP_NAME}-*${APP_LONG_VERSION}-*.${OS_ARCH}.rpm "${DISTROOT}/"
|
||||
cp ${HOME}/rpmbuild/RPMS/noarch/${APP_NAME}-*${APP_LONG_VERSION}-*.noarch.rpm "${DISTROOT}/"
|
||||
if [ ${OS_VERSION} == 7 ]; then
|
||||
cp ${HOME}/rpmbuild/RPMS/${OS_ARCH}/pgadmin4-python3-mod_wsgi-4.7.1-2.el7.x86_64.rpm "${DISTROOT}/"
|
||||
fi
|
||||
@@ -0,0 +1,71 @@
|
||||
%global sname mod_wsgi
|
||||
|
||||
%{!?_httpd_apxs: %{expand: %%global _httpd_apxs %%{_sbindir}/apxs}}
|
||||
|
||||
%{!?_httpd_mmn: %{expand: %%global _httpd_mmn %%(cat %{_includedir}/httpd/.mmn 2>/dev/null || echo 0-0)}}
|
||||
%{!?_httpd_confdir: %{expand: %%global _httpd_confdir %%{_sysconfdir}/httpd/conf.d}}
|
||||
# /etc/httpd/conf.d with httpd < 2.4 and defined as /etc/httpd/conf.modules.d with httpd >= 2.4
|
||||
%{!?_httpd_modconfdir: %{expand: %%global _httpd_modconfdir %%{_sysconfdir}/httpd/conf.d}}
|
||||
%{!?_httpd_moddir: %{expand: %%global _httpd_moddir %%{_libdir}/httpd/modules}}
|
||||
|
||||
%global debug_package %{nil}
|
||||
|
||||
Name: pgadmin4-python3-%{sname}
|
||||
Version: 4.7.1
|
||||
Release: 2%{?dist}
|
||||
Summary: A WSGI interface for Python web applications in Apache (customized for pgAdmin4)
|
||||
License: ASL 2.0
|
||||
URL: https://modwsgi.readthedocs.io/
|
||||
Source0: https://github.com/GrahamDumpleton/%{sname}/archive/%{version}.tar.gz#/mod_wsgi-%{version}.tar.gz
|
||||
Source2: %{name}.conf
|
||||
Patch1: %{name}-exports.patch
|
||||
|
||||
Requires: httpd-mmn = %{_httpd_mmn}
|
||||
BuildRequires: python3-devel
|
||||
BuildRequires: httpd-devel
|
||||
BuildRequires: gcc
|
||||
|
||||
# Suppress auto-provides for module DSO
|
||||
%{?filter_provides_in: %filter_provides_in %{_httpd_moddir}/.*\.so$}
|
||||
%{?filter_setup}
|
||||
|
||||
%global _description\
|
||||
The mod_wsgi adapter is an Apache module that provides a WSGI compliant\
|
||||
interface for hosting Python based web applications within Apache. The\
|
||||
adapter is written completely in C code against the Apache C runtime and\
|
||||
for hosting WSGI applications within Apache has a lower overhead than using\
|
||||
existing WSGI adapters for mod_python or CGI.\
|
||||
|
||||
%description %_description
|
||||
|
||||
%prep
|
||||
%autosetup -p1 -n %{sname}-%{version}
|
||||
|
||||
%build
|
||||
export LDFLAGS="$RPM_LD_FLAGS -L%{_libdir}"
|
||||
export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
|
||||
|
||||
%configure --enable-shared --with-apxs=%{_httpd_apxs} --with-python=python3
|
||||
%{__make} %{?_smp_mflags}
|
||||
%{_bindir}/python3 setup.py build
|
||||
|
||||
%install
|
||||
%{__make} install DESTDIR=%{buildroot} LIBEXECDIR=%{_httpd_moddir}
|
||||
%{__install} -d -m 755 %{buildroot}%{_httpd_modconfdir}
|
||||
%{__install} -p -m 644 %{SOURCE2} %{buildroot}%{_httpd_modconfdir}/10-pgadmin4-python3-mod_wsgi.conf
|
||||
%{_bindir}/python3 setup.py install -O1 --skip-build --root %{buildroot}
|
||||
%{__mv} %{buildroot}%{_httpd_moddir}/mod_wsgi.so %{buildroot}%{_httpd_moddir}/pgadmin4-python3-mod_wsgi.so
|
||||
%{__mv} %{buildroot}%{_bindir}/mod_wsgi-express %{buildroot}%{_bindir}/pgadmin4-mod_wsgi-express-3
|
||||
|
||||
%files
|
||||
%license LICENSE
|
||||
%doc CREDITS.rst README.rst
|
||||
%config(noreplace) %{_httpd_modconfdir}/*pgadmin4-python3-mod_wsgi.conf
|
||||
%{_httpd_moddir}/pgadmin4-python3-mod_wsgi.so
|
||||
%{python3_sitearch}/mod_wsgi-*.egg-info
|
||||
%{python3_sitearch}/mod_wsgi
|
||||
%{_bindir}/pgadmin4-mod_wsgi-express-3
|
||||
|
||||
%changelog
|
||||
* Fri Mar 6 2020 Devrim Gündüz <devrim@gunduz.org> - 4.6.8-2
|
||||
- Initial packaging for the PostgreSQL YUM repository
|
||||
@@ -0,0 +1,11 @@
|
||||
--- mod_wsgi-4.5.20/Makefile.in.exports
|
||||
+++ mod_wsgi-4.5.20/Makefile.in
|
||||
@@ -28,7 +28,7 @@
|
||||
all : src/server/mod_wsgi.la
|
||||
|
||||
src/server/mod_wsgi.la : $(SRCFILES)
|
||||
- $(APXS) -c $(CPPFLAGS) $(CFLAGS) $(SRCFILES) $(LDFLAGS) $(LDLIBS)
|
||||
+ $(APXS) -Wl,-export-symbols-regex -Wl,wsgi_module -c $(CPPFLAGS) $(CFLAGS) $(SRCFILES) $(LDFLAGS) $(LDLIBS)
|
||||
|
||||
$(DESTDIR)$(LIBEXECDIR) :
|
||||
mkdir -p $@
|
||||
@@ -0,0 +1,4 @@
|
||||
<IfModule !wsgi_module>
|
||||
LoadModule wsgi_module modules/pgadmin4-python3-mod_wsgi.so
|
||||
</IfModule>
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
LoadModule wsgi_module modules/mod_wsgi.so
|
||||
WSGIDaemonProcess pgadmin processes=1 threads=25 python-home=/usr/pgadmin4/venv
|
||||
WSGIScriptAlias /pgadmin4 /usr/pgadmin4/web/pgAdmin4.wsgi
|
||||
|
||||
<Directory /usr/pgadmin4/web/>
|
||||
WSGIProcessGroup pgadmin
|
||||
WSGIApplicationGroup %{GLOBAL}
|
||||
<IfModule mod_authz_core.c>
|
||||
# Apache 2.4
|
||||
Require all granted
|
||||
</IfModule>
|
||||
<IfModule !mod_authz_core.c>
|
||||
# Apache 2.2
|
||||
Order Deny,Allow
|
||||
Deny from All
|
||||
Allow from 127.0.0.1
|
||||
Allow from ::1
|
||||
</IfModule>
|
||||
</Directory>
|
||||
@@ -0,0 +1,53 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "$EUID" -ne 0 ]
|
||||
then echo "This script must be run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OS_VERSION=$(cat /etc/os-release | grep "^VERSION_ID=" | awk -F "=" '{ print $2 }' | sed 's/"//g')
|
||||
|
||||
# EPEL & other repos
|
||||
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-${OS_VERSION}.noarch.rpm
|
||||
if [ ${OS_VERSION} == 8 ]; then
|
||||
yum config-manager --enable PowerTools AppStream BaseOS *epel
|
||||
fi
|
||||
|
||||
# Node repo
|
||||
echo "Setting up the NodeJS repo..."
|
||||
curl -sL https://rpm.nodesource.com/setup_12.x | bash -
|
||||
|
||||
# Yarn repo
|
||||
echo "Setting up the Yarn repo..."
|
||||
curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
|
||||
|
||||
# Install pre-reqs
|
||||
echo "Installing build pre-requisites..."
|
||||
yum groupinstall -y "Development Tools"
|
||||
|
||||
if [ ${OS_VERSION} == 7 ]; then
|
||||
yum install -y expect fakeroot httpd-devel qt5-qtbase-devel postgresql-devel python3-devel nodejs yarn rpm-build rpm-sign
|
||||
pip3 install sphinx
|
||||
else
|
||||
yum install -y expect fakeroot qt5-qtbase-devel libpq-devel python3-devel python3-sphinx nodejs yarn rpm-build rpm-sign
|
||||
fi
|
||||
|
||||
# Setup RPM macros for signing
|
||||
echo "Please add the following macros to ~/.rpmmacros for the user that will sign the RPMs if required:"
|
||||
echo
|
||||
cat << EOF
|
||||
# Macros for signing RPMs.
|
||||
|
||||
%_signature gpg
|
||||
%_gpg_path ~/.gnupg
|
||||
%_gpg_name Package Manager
|
||||
%_gpgbin /usr/bin/gpg2
|
||||
%__gpg_sign_cmd %{__gpg} gpg --force-v3-sigs --batch --verbose --no-armor --passphrase-fd 3 --no-secmem-warning -u "%{_gpg_name}" -sbo %{__signature_filename} --digest-algo sha256 %{__plaintext_filename}'
|
||||
EOF
|
||||
echo
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -33,9 +33,10 @@ speaklater==1.3
|
||||
sqlparse==0.2.4
|
||||
WTForms==2.2.1
|
||||
Flask-Paranoid==0.2.0
|
||||
psutil==5.5.1
|
||||
psutil>=5.7.0
|
||||
psycopg2>=2.8
|
||||
python-dateutil>=2.8.0
|
||||
SQLAlchemy>=1.3.13
|
||||
Flask-Security-Too>=3.0.0
|
||||
sshtunnel>=0.1.4
|
||||
ldap3>=2.5.1
|
||||
@@ -6,6 +6,7 @@ moc_*.h
|
||||
pgAdmin4
|
||||
pgAdmin4.app/
|
||||
pgAdmin4.pro.user*
|
||||
qrc_breeze.cpp
|
||||
qrc_pgAdmin4.cpp
|
||||
ui_*.h
|
||||
object_script.*
|
||||
@@ -57,6 +57,11 @@ int ConfigWindow::getPortNumber()
|
||||
return ui->spinPortNumber->value();
|
||||
}
|
||||
|
||||
bool ConfigWindow::getOpenTabAtStartup()
|
||||
{
|
||||
return ui->chkOpenTabAtStartup->isChecked();
|
||||
}
|
||||
|
||||
QString ConfigWindow::getPythonPath()
|
||||
{
|
||||
return ui->pythonPathLineEdit->text();
|
||||
@@ -92,6 +97,18 @@ void ConfigWindow::setPortNumber(int port)
|
||||
ui->spinPortNumber->setValue(port);
|
||||
}
|
||||
|
||||
void ConfigWindow::setOpenTabAtStartup(bool openTabAtStartup)
|
||||
{
|
||||
if (openTabAtStartup)
|
||||
{
|
||||
ui->chkOpenTabAtStartup->setCheckState(Qt::Checked);
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->chkOpenTabAtStartup->setCheckState(Qt::Unchecked);
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigWindow::setPythonPath(QString path)
|
||||
{
|
||||
ui->pythonPathLineEdit->setText(path);
|
||||
|
||||
@@ -29,12 +29,14 @@ public:
|
||||
QString getBrowserCommand();
|
||||
bool getFixedPort();
|
||||
int getPortNumber();
|
||||
bool getOpenTabAtStartup();
|
||||
QString getPythonPath();
|
||||
QString getApplicationPath();
|
||||
|
||||
void setBrowserCommand(QString command);
|
||||
void setFixedPort(bool fixedPort);
|
||||
void setPortNumber(int port);
|
||||
void setOpenTabAtStartup(bool openTabAtStartup);
|
||||
void setPythonPath(QString path);
|
||||
void setApplicationPath(QString path);
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>731</width>
|
||||
<height>300</height>
|
||||
<width>975</width>
|
||||
<height>398</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
@@ -18,7 +18,7 @@
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>625</width>
|
||||
<width>975</width>
|
||||
<height>300</height>
|
||||
</size>
|
||||
</property>
|
||||
@@ -51,7 +51,7 @@
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>589</width>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
@@ -61,6 +61,9 @@
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>4</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@@ -71,7 +74,7 @@
|
||||
<item>
|
||||
<widget class="QLabel" name="pythonPathLabel_2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
@@ -84,7 +87,7 @@
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>150</width>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
@@ -93,6 +96,22 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="browserCommandLineEdit">
|
||||
<property name="placeholderText">
|
||||
@@ -107,6 +126,9 @@
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
@@ -143,7 +165,7 @@
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>150</width>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
@@ -228,6 +250,82 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>By default, when the pgAdmin server is started a browser tab will be automatically opened to display the user interface. Un-check this option to run the server without automatically opening the browser.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="text">
|
||||
<string>Open a Browser Window/Tab at Startup?</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="chkOpenTabAtStartup">
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::RightToLeft</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_6">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -236,18 +334,50 @@
|
||||
<attribute name="title">
|
||||
<string>Python</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>The options below are intended for expert users only, and may not behave as expected as they modify fixed search paths and are not alternate values. Modify with care!</string>
|
||||
<spacer name="verticalSpacer_7">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>13</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>450</width>
|
||||
<height>28</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>The options below are intended for expert users only, and may not behave as expected as they modify fixed search paths and are not alternate values. Modify with care!</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_3">
|
||||
@@ -259,77 +389,199 @@
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>5</height>
|
||||
<width>17</width>
|
||||
<height>13</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="5" column="1">
|
||||
<widget class="QLineEdit" name="applicationPathLineEdit">
|
||||
<property name="placeholderText">
|
||||
<string>/usr/pgadmin4/web</string>
|
||||
</property>
|
||||
</widget>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<widget class="QLabel" name="pythonPathLabel">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>50</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Python Path</string>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_9">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="pythonPathLineEdit">
|
||||
<property name="placeholderText">
|
||||
<string>/usr/pgadmin4/lib/python2.7;/usr/pgadmin4/lib/python2.7/site-packages</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Enter the path to the directory containing pgAdmin.py if desired.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="pythonPathLabel">
|
||||
<property name="text">
|
||||
<string>Python Path</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="applicationPathLabel">
|
||||
<property name="text">
|
||||
<string>Application Path</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Enter a PYTHONPATH if desired. Path elements should be semi-colon delimited.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<spacer name="verticalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Expanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>60</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="pythonPathLineEdit">
|
||||
<property name="placeholderText">
|
||||
<string>/usr/pgadmin4/lib/python2.7;/usr/pgadmin4/lib/python2.7/site-packages</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>300</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enter a PYTHONPATH if desired. Path elements should be semi-colon delimited.</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::AutoText</enum>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>13</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<widget class="QLabel" name="applicationPathLabel">
|
||||
<property name="text">
|
||||
<string>Application Path</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="applicationPathLineEdit">
|
||||
<property name="placeholderText">
|
||||
<string>/usr/pgadmin4/web</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>300</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enter the path to the directory containing pgAdmin.py if desired.</string>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_8">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Expanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>60</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
<key>CFBundleName</key>
|
||||
<string>pgAdmin 4</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>4.19.0</string>
|
||||
<string>4.21.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>4.19.0</string>
|
||||
<string>4.21.0</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.10</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
|
||||
@@ -79,6 +79,7 @@ void MenuActions::onConfig()
|
||||
dlg->setBrowserCommand(settings.value("BrowserCommand").toString());
|
||||
dlg->setFixedPort(settings.value("FixedPort").toBool());
|
||||
dlg->setPortNumber(settings.value("PortNumber").toInt());
|
||||
dlg->setOpenTabAtStartup(settings.value("OpenTabAtStartup", true).toBool());
|
||||
dlg->setPythonPath(settings.value("PythonPath").toString());
|
||||
dlg->setApplicationPath(settings.value("ApplicationPath").toString());
|
||||
dlg->setModal(true);
|
||||
@@ -87,6 +88,7 @@ void MenuActions::onConfig()
|
||||
QString browsercommand = dlg->getBrowserCommand();
|
||||
bool fixedport = dlg->getFixedPort();
|
||||
int portnumber = dlg->getPortNumber();
|
||||
bool opentabatstartup = dlg->getOpenTabAtStartup();
|
||||
QString pythonpath = dlg->getPythonPath();
|
||||
QString applicationpath = dlg->getApplicationPath();
|
||||
|
||||
@@ -100,6 +102,7 @@ void MenuActions::onConfig()
|
||||
settings.setValue("BrowserCommand", browsercommand);
|
||||
settings.setValue("FixedPort", fixedport);
|
||||
settings.setValue("PortNumber", portnumber);
|
||||
settings.setValue("OpenTabAtStartup", opentabatstartup);
|
||||
settings.setValue("PythonPath", pythonpath);
|
||||
settings.setValue("ApplicationPath", applicationpath);
|
||||
|
||||
|
||||
@@ -303,9 +303,9 @@ bool Server::Init()
|
||||
QDir dir;
|
||||
|
||||
if (paths[i].startsWith('/'))
|
||||
dir = paths[i];
|
||||
dir.setPath(paths[i]);
|
||||
else
|
||||
dir = QCoreApplication::applicationDirPath() + "/" + paths[i];
|
||||
dir.setPath(QCoreApplication::applicationDirPath() + "/" + paths[i]);
|
||||
|
||||
m_appfile = dir.canonicalPath() + "/pgAdmin4.py";
|
||||
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>light/hmovetoolbar.svg</file>
|
||||
<file>light/vmovetoolbar.svg</file>
|
||||
<file>light/hsepartoolbar.svg</file>
|
||||
<file>light/vsepartoolbars.svg</file>
|
||||
<file>light/stylesheet-branch-end.svg</file>
|
||||
<file>light/stylesheet-branch-end-closed.svg</file>
|
||||
<file>light/stylesheet-branch-end-open.svg</file>
|
||||
<file>light/stylesheet-vline.svg</file>
|
||||
<file>light/stylesheet-branch-more.svg</file>
|
||||
<file>light/branch_closed.svg</file>
|
||||
<file>light/branch_closed-on.svg</file>
|
||||
<file>light/branch_open.svg</file>
|
||||
<file>light/branch_open-on.svg</file>
|
||||
<file>light/down_arrow.svg</file>
|
||||
<file>light/down_arrow_disabled.svg</file>
|
||||
<file>light/down_arrow-hover.svg</file>
|
||||
<file>light/left_arrow.svg</file>
|
||||
<file>light/left_arrow_disabled.svg</file>
|
||||
<file>light/right_arrow.svg</file>
|
||||
<file>light/right_arrow_disabled.svg</file>
|
||||
<file>light/up_arrow.svg</file>
|
||||
<file>light/up_arrow_disabled.svg</file>
|
||||
<file>light/up_arrow-hover.svg</file>
|
||||
<file>light/sizegrip.svg</file>
|
||||
<file>light/transparent.svg</file>
|
||||
<file>light/close.svg</file>
|
||||
<file>light/close-hover.svg</file>
|
||||
<file>light/close-pressed.svg</file>
|
||||
<file>light/undock.svg</file>
|
||||
<file>light/undock-hover.svg</file>
|
||||
<file>light/checkbox_checked-hover.svg</file>
|
||||
<file>light/checkbox_checked.svg</file>
|
||||
<file>light/checkbox_checked_disabled.svg</file>
|
||||
<file>light/checkbox_indeterminate.svg</file>
|
||||
<file>light/checkbox_indeterminate-hover.svg</file>
|
||||
<file>light/checkbox_indeterminate_disabled.svg</file>
|
||||
<file>light/checkbox_unchecked-hover.svg</file>
|
||||
<file>light/checkbox_unchecked_disabled.svg</file>
|
||||
<file>light/radio_checked-hover.svg</file>
|
||||
<file>light/radio_checked.svg</file>
|
||||
<file>light/radio_checked_disabled.svg</file>
|
||||
<file>light/radio_unchecked-hover.svg</file>
|
||||
<file>light/radio_unchecked_disabled.svg</file>
|
||||
<file>dark/hmovetoolbar.svg</file>
|
||||
<file>dark/vmovetoolbar.svg</file>
|
||||
<file>dark/hsepartoolbar.svg</file>
|
||||
<file>dark/vsepartoolbars.svg</file>
|
||||
<file>dark/stylesheet-branch-end.svg</file>
|
||||
<file>dark/stylesheet-branch-end-closed.svg</file>
|
||||
<file>dark/stylesheet-branch-end-open.svg</file>
|
||||
<file>dark/stylesheet-vline.svg</file>
|
||||
<file>dark/stylesheet-branch-more.svg</file>
|
||||
<file>dark/branch_closed.svg</file>
|
||||
<file>dark/branch_closed-on.svg</file>
|
||||
<file>dark/branch_open.svg</file>
|
||||
<file>dark/branch_open-on.svg</file>
|
||||
<file>dark/down_arrow.svg</file>
|
||||
<file>dark/down_arrow_disabled.svg</file>
|
||||
<file>dark/down_arrow-hover.svg</file>
|
||||
<file>dark/left_arrow.svg</file>
|
||||
<file>dark/left_arrow_disabled.svg</file>
|
||||
<file>dark/right_arrow.svg</file>
|
||||
<file>dark/right_arrow_disabled.svg</file>
|
||||
<file>dark/up_arrow.svg</file>
|
||||
<file>dark/up_arrow_disabled.svg</file>
|
||||
<file>dark/up_arrow-hover.svg</file>
|
||||
<file>dark/sizegrip.svg</file>
|
||||
<file>dark/transparent.svg</file>
|
||||
<file>dark/close.svg</file>
|
||||
<file>dark/close-hover.svg</file>
|
||||
<file>dark/close-pressed.svg</file>
|
||||
<file>dark/undock.svg</file>
|
||||
<file>dark/undock-hover.svg</file>
|
||||
<file>dark/checkbox_checked.svg</file>
|
||||
<file>dark/checkbox_checked_disabled.svg</file>
|
||||
<file>dark/checkbox_indeterminate.svg</file>
|
||||
<file>dark/checkbox_indeterminate_disabled.svg</file>
|
||||
<file>dark/checkbox_unchecked.svg</file>
|
||||
<file>dark/checkbox_unchecked_disabled.svg</file>
|
||||
<file>dark/radio_checked.svg</file>
|
||||
<file>dark/radio_checked_disabled.svg</file>
|
||||
<file>dark/radio_unchecked.svg</file>
|
||||
<file>dark/radio_unchecked_disabled.svg</file>
|
||||
<file>light.qss</file>
|
||||
<file>dark.qss</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
@@ -0,0 +1,3 @@
|
||||
<svg width="6" height="9">
|
||||
<path fill="#fff" fill-rule="evenodd" d="M1,8V1L5,4.5Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 94 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="12" height="18">
|
||||
<path fill="#afafaf" d="M5,12V6L9,9Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 78 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="9" height="6">
|
||||
<path fill="#fff" d="M1,1H8L4.5,5Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 74 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="18" height="12">
|
||||
<path fill="#afafaf" d="M5.5,3H12.5L9,9Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 82 B |
@@ -0,0 +1,5 @@
|
||||
<svg x="0px" y="0px" width="18px" height="18px" viewBox="0 0 18 18" enable-background="new 0 0 18 18" xml:space="preserve">
|
||||
<path d="M2,2 h14 v14 h-0.9 v-13.1 h-13.1 z" fill="#58d3ff"/>
|
||||
<path d="M16,16 h-14 v-14 h0.9 v13.1 h13.1 z" fill="#58d3ff"/>
|
||||
<path d="M5,5 h8 v8 h-8 v-8 z" fill="#58d3ff" fill-rule="evenodd"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 330 B |
@@ -0,0 +1,5 @@
|
||||
<svg x="0px" y="0px" width="18px" height="18px" viewBox="0 0 18 18" enable-background="new 0 0 18 18" xml:space="preserve">
|
||||
<path d="M2,2 h14 v14 h-0.9 v-13.1 h-13.1 z" fill="#c8c9ca"/>
|
||||
<path d="M16,16 h-14 v-14 h0.9 v13.1 h13.1 z" fill="#c8c9ca"/>
|
||||
<path d="M5,5 h8 v8 h-8 v-8 z" fill="#c8c9ca" fill-rule="evenodd"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 330 B |
@@ -0,0 +1,7 @@
|
||||
<svg x="0px" y="0px" width="18px" height="18px" viewBox="0 0 18 18" enable-background="new 0 0 18 18" xml:space="preserve">
|
||||
<path d="M2,2 h14 v14 h-0.9 v-13.1 h-13.1 z" fill="#58d3ff"/>
|
||||
<path d="M16,16 h-14 v-14 h0.9 v13.1 h13.1 z" fill="#58d3ff"/>
|
||||
<path d="M5,5 h8 v8 h-0.9 v-7.1 h-7.1 z" fill="#58d3ff" fill-rule="evenodd"/>
|
||||
<path d="M13,13 h-8 v-8 h0.9 v7.1 h7.1 z" fill="#58d3ff" fill-rule="evenodd"/>
|
||||
<path d="M13,5 L 5,13 v-8 h8 z" fill="#58d3ff" fill-rule="evenodd"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 492 B |
@@ -0,0 +1,7 @@
|
||||
<svg x="0px" y="0px" width="18px" height="18px" viewBox="0 0 18 18" enable-background="new 0 0 18 18" xml:space="preserve">
|
||||
<path d="M2,2 h14 v14 h-0.9 v-13.1 h-13.1 z" fill="#c8c9ca"/>
|
||||
<path d="M16,16 h-14 v-14 h0.9 v13.1 h13.1 z" fill="#c8c9ca"/>
|
||||
<path d="M5,5 h8 v8 h-0.9 v-7.1 h-7.1 z" fill="#c8c9ca" fill-rule="evenodd"/>
|
||||
<path d="M13,13 h-8 v-8 h0.9 v7.1 h7.1 z" fill="#c8c9ca" fill-rule="evenodd"/>
|
||||
<path d="M13,5 L 5,13 v-8 h8 z" fill="#c8c9ca" fill-rule="evenodd"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 492 B |
@@ -0,0 +1,4 @@
|
||||
<svg x="0px" y="0px" width="18px" height="18px" viewBox="0 0 18 18" enable-background="new 0 0 18 18" xml:space="preserve">
|
||||
<path d="M2,2 h14 v14 h-0.9 v-13.1 h-13.1 z" fill="#58d3ff"/>
|
||||
<path d="M16,16 h-14 v-14 h0.9 v13.1 h13.1 z" fill="#58d3ff"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 260 B |
@@ -0,0 +1,4 @@
|
||||
<svg x="0px" y="0px" width="18px" height="18px" viewBox="0 0 18 18" enable-background="new 0 0 18 18" xml:space="preserve">
|
||||
<path d="M2,2 h14 v14 h-0.9 v-13.1 h-13.1 z" fill="#c8c9ca"/>
|
||||
<path d="M16,16 h-14 v-14 h0.9 v13.1 h13.1 z" fill="#c8c9ca"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 260 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="1200" height="1200">
|
||||
<path d="M 600,1050 C 351.472,1050 150,848.528 150,600 150,351.472 351.472,150 600,150 c 248.528,0 450,201.472 450,450 0,248.528 -201.472,450 -450,450 z M 888.462,827.851 661.974,601.122 l 0,-2.244 226.488,-226.729 0,-60.611 -60.848,0 Q 727.339,411.986 627.043,512.451 613.524,525.358 600,538.267 l -226.487,-226.729 -61.975,0 0,60.611 L 538.026,600 311.538,826.729 l 0,61.733 60.848,0 q 34.363,-34.792 68.735,-69.59 L 600,661.733 l 226.487,226.729 61.975,0 0,-60.611 z" fill="#b37979"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 530 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="1200" height="1200">
|
||||
<path d="M 600,1050 C 351.472,1050 150,848.528 150,600 150,351.472 351.472,150 600,150 c 248.528,0 450,201.472 450,450 0,248.528 -201.472,450 -450,450 z M 888.462,827.851 661.974,601.122 l 0,-2.244 226.488,-226.729 0,-60.611 -60.848,0 Q 727.339,411.986 627.043,512.451 613.524,525.358 600,538.267 l -226.487,-226.729 -61.975,0 0,60.611 L 538.026,600 311.538,826.729 l 0,61.733 60.848,0 q 34.363,-34.792 68.735,-69.59 L 600,661.733 l 226.487,226.729 61.975,0 0,-60.611 z" fill="#b33e3e"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 530 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="1200" height="1200">
|
||||
<path d="M 600,1050 C 351.472,1050 150,848.528 150,600 150,351.472 351.472,150 600,150 c 248.528,0 450,201.472 450,450 0,248.528 -201.472,450 -450,450 z M 888.462,827.851 661.974,601.122 l 0,-2.244 226.488,-226.729 0,-60.611 -60.848,0 Q 727.339,411.986 627.043,512.451 613.524,525.358 600,538.267 l -226.487,-226.729 -61.975,0 0,60.611 L 538.026,600 311.538,826.729 l 0,61.733 60.848,0 q 34.363,-34.792 68.735,-69.59 L 600,661.733 l 226.487,226.729 61.975,0 0,-60.611 z" fill="#626568"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 530 B |
@@ -0,0 +1,3 @@
|
||||
<svg x="0px" y="0px" width="9px" height="6px" viewBox="0 0 9 6" enable-background="new 0 0 9 6" xml:space="preserve">
|
||||
<path d="M 1.1894592,0.91769718 4.5,4.2280182 7.8105408,0.91627648 c 0.1577125,-0.157702 0.4134624,-0.157702 0.5711749,0 0.1577124,0.15770202 0.1577124,0.41343492 0,0.57113692 l -3.5961283,3.5973102 0,0 0,0 c -0.1577124,0.1577019 -0.4134624,0.1577019 -0.5711748,0 L 0.6182843,1.4874134 c -0.1577124,-0.157702 -0.1577124,-0.4134349 0,-0.57113692 0.1577125,-0.15628131 0.4134624,-0.15628131 0.5711749,0.00142 z" fill="#3daee9"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 554 B |
@@ -0,0 +1,3 @@
|
||||
<svg x="0px" y="0px" width="9px" height="6px" viewBox="0 0 9 6" enable-background="new 0 0 9 6" xml:space="preserve">
|
||||
<path d="M 1.1894592,0.91769718 4.5,4.2280182 7.8105408,0.91627648 c 0.1577125,-0.157702 0.4134624,-0.157702 0.5711749,0 0.1577124,0.15770202 0.1577124,0.41343492 0,0.57113692 l -3.5961283,3.5973102 0,0 0,0 c -0.1577124,0.1577019 -0.4134624,0.1577019 -0.5711748,0 L 0.6182843,1.4874134 c -0.1577124,-0.157702 -0.1577124,-0.4134349 0,-0.57113692 0.1577125,-0.15628131 0.4134624,-0.15628131 0.5711749,0.00142 z" fill="#fff"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 551 B |
@@ -0,0 +1,3 @@
|
||||
<svg x="0px" y="0px" width="9px" height="6px" viewBox="0 0 9 6" enable-background="new 0 0 9 6" xml:space="preserve">
|
||||
<path d="M 1.1894592,0.91769718 4.5,4.2280182 7.8105408,0.91627648 c 0.1577125,-0.157702 0.4134624,-0.157702 0.5711749,0 0.1577124,0.15770202 0.1577124,0.41343492 0,0.57113692 l -3.5961283,3.5973102 0,0 0,0 c -0.1577124,0.1577019 -0.4134624,0.1577019 -0.5711748,0 L 0.6182843,1.4874134 c -0.1577124,-0.157702 -0.1577124,-0.4134349 0,-0.57113692 0.1577125,-0.15628131 0.4134624,-0.15628131 0.5711749,0.00142 z" fill="#b0b0b0"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 554 B |
@@ -0,0 +1,4 @@
|
||||
<svg x="0px" y="0px" width="16px" height="64px" viewBox="0 0 16 64" enable-background="new 0 0 16 64" xml:space="preserve">
|
||||
<rect fill="#5f5f5f" x="2" y="1" width="1" height="62.5"/>
|
||||
<rect fill="#5f5f5f" x="9" y="1" width="1" height="62.5"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 253 B |
@@ -0,0 +1,3 @@
|
||||
<svg x="0px" y="0px" width="7px" height="63px" viewBox="0 0 7 63" enable-background="new 0 0 7 63" xml:space="preserve">
|
||||
<rect fill="#5f5f5f" x="2" y="13" width="1" height="37"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 188 B |
@@ -0,0 +1,3 @@
|
||||
<svg x="0px" y="0px" width="6px" height="9px" viewBox="0 0 6 9" enable-background="new 0 0 6 9" xml:space="preserve">
|
||||
<path d="m 5.0823028,1.1894593 -3.310321,3.3105408 3.3117417,3.3105408 c 0.157702,0.1577125 0.157702,0.4134624 0,0.5711749 -0.157702,0.1577123 -0.4134349,0.1577123 -0.5711369,0 l -3.59731017,-3.5961283 0,0 0,0 c -0.15770191,-0.1577124 -0.15770191,-0.4134624 0,-0.5711748 L 4.5125866,0.61828437 c 0.157702,-0.1577124 0.4134349,-0.1577124 0.5711369,0 0.1562813,0.1577125 0.1562813,0.41346243 -0.00142,0.57117493 z" fill="#fff"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 554 B |
@@ -0,0 +1,3 @@
|
||||
<svg x="0px" y="0px" width="6px" height="9px" viewBox="0 0 6 9" enable-background="new 0 0 6 9" xml:space="preserve">
|
||||
<path d="m 5.0823028,1.1894593 -3.310321,3.3105408 3.3117417,3.3105408 c 0.157702,0.1577125 0.157702,0.4134624 0,0.5711749 -0.157702,0.1577123 -0.4134349,0.1577123 -0.5711369,0 l -3.59731017,-3.5961283 0,0 0,0 c -0.15770191,-0.1577124 -0.15770191,-0.4134624 0,-0.5711748 L 4.5125866,0.61828437 c 0.157702,-0.1577124 0.4134349,-0.1577124 0.5711369,0 0.1562813,0.1577125 0.1562813,0.41346243 -0.00142,0.57117493 z" fill="#b0b0b0"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 557 B |