Compare commits

..
340 Commits
Author SHA1 Message Date
Akshay Joshi 1347c89d61 Update version for release. 2020-05-25 17:11:12 +05:30
Akshay Joshi b1cbcc7ef6 Fixed data truncation issue when updating the data of type character with length. Fixes #5481 2020-05-25 17:05:47 +05:30
Domenico Sgarbossa 22c3a2649b Update Italian translation. 2020-05-25 11:24:37 +05:30
Identifier Anonymous 2bb0b25688 Update Japanese translation. 2020-05-25 11:13:37 +05:30
Libor M 2aefc6361e Update Czech translation. 2020-05-25 11:09:52 +05:30
Dave Page 83cb01b8cd Update dependencies in the Docker container and remove PG 9.4 utilities from the Docker container as it's now out of support.
Fixes #5552.
Fixes #5553.
2020-05-22 17:02:12 +01:00
Akshay Joshi d42b712ee4 Update message catalogs 2020-05-22 19:13:13 +05:30
Dave Page fec458dd6a Add repo build information to the Debian README. 2020-05-22 11:58:24 +01:00
Akshay Joshi 9b8902dfb8 Fixed the SQL help issue for EDB Postgres Advanced Server. Fixes #4099 2020-05-22 14:11:58 +05:30
Dave Page 4a8037fc6a Test commit 2020-05-22 09:12:54 +01:00
Yogesh Mahajan d927a517aa Fixed feature test failures on the selenium grid for concurrent execution. 2020-05-21 19:44:28 +05:30
Dave Page 96939ba985 Add information to the Redhat README about signing RPMs, creating a repository and creating repo RPMs. 2020-05-21 12:47:41 +01:00
Dave Page 414b074bad Tidy up the web setup script output. 2020-05-19 14:27:23 +01:00
Yogesh Jain 7b1cac6914 Fixed an issue where clicking on Select All button, not selecting all the options in pgAgent job scheduler. Fixes #5496 2020-05-19 13:54:21 +05:30
Dave Page 4aaacfd5b0 Add the public key for our packages for the RPM build. 2020-05-18 15:43:17 +01:00
Dave Page 52187306ce Create the dist/ directory if needed. 2020-05-18 15:37:18 +01:00
Dave Page 0e799b16b0 Only try to run make clean if there is a Makefile present. 2020-05-18 11:18:03 +01:00
Dave Page 569d05df4e Remove obsolete file. 2020-05-18 11:17:07 +01:00
Dave Page eac5fe5157 Cleanup and refactor the macOS build scripts. Fixes #5525 2020-05-18 10:22:59 +01:00
Dave Page 5337514c63 Allow the base directory for the repo to be overridden from the environment. 2020-05-18 10:22:28 +01:00
Khushboo Vashi d1bdb178e2 Fixed an issue where if LDAP_SEARCH_BASE_DN is not set then, the value for LDAP_BASE_DN will be considered. Fixes #5487 2020-05-18 12:35:34 +05:30
Yogesh Mahajan 9f445dc052 Improve code coverage and API test cases for Indexes. Fixes #5333 2020-05-18 12:29:33 +05:30
Aditya Toshniwal d58c33dec0 Search object UI improvements. Fixes #5493 2020-05-18 11:29:12 +05:30
Khushboo Vashi 0f56c25893 Changed the user identity from email to username in the log file.
refs #5452
2020-05-18 11:01:20 +05:30
Dave Page 762784d2b5 Add a script for generating a repo RPM. 2020-05-15 11:22:28 +01:00
Pradip Parkale 6d6cd19b37 Improve code coverage and API test cases for Triggers and Compound Triggers. Fixes #5335 2020-05-15 12:50:50 +05:30
Akshay Joshi c0451cd454 Added connected pgAdmin user and connection name in the log file. Fixes #5452
Patch By: Nico T
2020-05-13 17:43:21 +05:30
Akshay Joshi 0620fafb6c Fixed PEP8 issues discovered after pycodestyle gets upgraded. 2020-05-13 17:14:32 +05:30
Khushboo Vashi a9a1a975a6 Added compatibility for Flask-Security-Too version 3.2 2020-05-13 16:02:38 +05:30
Akshay Joshi 8a06a836f4 Ensure that pgAdmin4 should be compiled with older OSX SDK's. 2020-05-12 17:22:22 +05:30
Yogesh Jain dba5761ad0 Fixed an issue where clicking on the cross button of the alert box on the login page is not working. Fixes #4033 2020-05-12 17:22:22 +05:30
Yogesh Mahajan 8ec1d4c9eb Fixed feature tests failure on chrome caused due to selenium grid implementation changes. 2020-05-12 17:22:22 +05:30
Akshay Joshi 46e9924ebb Fixed Unicode decode error 'utf-8' codec can't decode byte. Fixes #5510
It's a regression of commit id: 04d6d4e2ccc129baa698471ce0680ccabe2282be
2020-05-12 17:22:22 +05:30
Dave Page 12a7ce54d9 Ubuntu 20.04 needs python3-wheel to be explicitly installed. 2020-05-11 15:08:40 +01:00
Akshay Joshi 9d08776824 Ensure that maintenance job should be worked properly for indexes under a materialized view. Fixes #4223. 2020-05-11 16:47:36 +05:30
Akshay Joshi 073d90c4a6 Fixed internal server error when clicking on Triggers -> 'Enable All' for partitions. Fixes #5052 2020-05-11 15:18:39 +05:30
Dave Page 7d4ddc3910 Clarify and correct the docs on enabling the pl/debugger plugin on the server per Jakob Egger. Fixes #5503 2020-05-11 09:05:15 +01:00
Yogesh Mahajan 1294c089a8 Implement Selenium Grid to run multiple tests across different browsers, operating systems, and machines in parallel. Fixes #5255 2020-05-11 12:11:31 +05:30
Aditya Toshniwal b64896f558 Fixed generated SQL issue for auto vacuum options. Fixes #5398
Fixed some more issues:

 1) pgAdmin allows only true or false values for autovacuum_enabled,
    and there is no way to reset it individually without disabling a custom auto vacuum.
    To fix this, the control is changed from the switch to three state buttons.
 2) Setting any vacuum options to zero made the option disappear from the SQL.
 3) Right-click on a table with vacuum options set and create a new table.
 4) The parameters tab will have the options prefilled.
 5) Changed the UI a bit to remove unnecessary space around. Added "Autovacuum" before enabled.
    The SQL generated was appending a ".0" to decimal vacuum options. Changed to remove the leading ".0".
2020-05-08 14:30:30 +05:30
Ashesh Vashi e73e2d2502 Fixed the errors, and warnings reported by pylama.
TODO::
- Don't use unicode in Python 3 for removing the support of Python 2 (
  psycopg2 driver - __init__.py, server_manager.py).
- Merge the lastest pgcli (version: 3.0.0) for SQL autocompletion.
2020-05-08 14:13:38 +05:30
Satish V 9338bdcb3a Fixed an issue where the newly added table is not alphabetically added to the tree. Fixes #5434
Fixed an issue when renaming the column not added in the proper order. Fixes #5450
2020-05-08 12:52:03 +05:30
Khushboo Vashi d68e6bd892 Remove Python2 modules.
refs #5443
2020-05-08 12:28:21 +05:30
Pradip Parkale 057a2b2312 Improve code coverage and API test cases for the Rules module. Fixes #5334 2020-05-07 16:27:58 +05:30
Dave Page 46d186a49f Show the startup log as well as the server log in the runtime's log viewer. Fixes #5489 2020-05-07 11:01:02 +01:00
Dave Page 7164c677de UI layout tweaks. 2020-05-07 10:39:28 +01:00
Akshay Joshi 6ad46e1860 Fixed invalid literal issue when removing the connection limit for the existing role. Fixes #5001 2020-05-07 13:14:45 +05:30
Akshay Joshi a662d866af Ensure that 'With OID' option should be disabled while taking backup of database server version 12 and above. Fixes #4840 2020-05-07 11:56:43 +05:30
Akshay Joshi a0940fd145 Typecast the object to 'text' before using it in length() function, so that correct length function gets called. 2020-05-06 17:34:18 +05:30
Nagesh Dhope f61448eea2 Fixed an issue where the background job creation fails if there is only a version-specific python binary available in PATH. Fixes #5480 2020-05-06 12:38:06 +05:30
Akshay Joshi 943495de31 Fixed list sorting issue in the schema diff tool. Fixes #5440
Fixed an issue while comparing the two identical schemas using the schema diff tool. Fixes #5449
2020-05-06 11:25:43 +05:30
Aditya Toshniwal 059f1e38cc Refactor pgAdmin4.py so it can be imported and is a lot more readable. Fixes #5455 2020-05-04 15:28:44 +01:00
Aditya Toshniwal 370094274c Fixed post-login redirect location when running in server mode under a non-default root. Fixes #5473 2020-05-04 15:00:45 +01:00
Dave Page 04d6d4e2cc Remove support for Python 2. Fixes #5443 2020-05-04 14:58:49 +01:00
Dave Page cf31d0187b Remove support for building the macOS appbundle with Python 2.7. Refs #5443 2020-05-04 14:56:28 +01:00
Akshay Joshi f1963401d6 Raise an exception under Python < 3.4 for WSGI mode.
refs #5443
2020-05-04 15:06:45 +05:30
Dave Page 94bd1f1680 Cleanup Python detection in the runtime project file. Fixes #5444 2020-05-04 10:20:51 +01:00
Dave Page 908e156113 Correct ipv4 "all interfaces" address in the container docs, per Frank Limpert. Fixes #5466 2020-05-04 09:25:05 +01:00
Ganesh Jaybhay 5fe7813f9f Fixed an issue where select2 hover is inconsistent for the SSL field in create server dialog. Fixes #5469 2020-05-04 13:19:13 +05:30
Satish V d61b8eb1b3 Gracefully informed the user that the database is already connected when they click on 'Connect Database...'. Fixes #3694 2020-05-04 13:08:56 +05:30
Murtuza Zabuawala 0fc2afb829 Add Reverse Engineered and Modified SQL tests for Column and Type. 2020-05-04 12:48:24 +05:30
Yogesh Jain cc2e3ece7a Ensure that file browse home button should point to /Users/akshayjoshi rather than /. Fixes #4279 2020-05-04 12:40:19 +05:30
Khushboo Vashi 5656f756e6 Ensure that the dependencies tab shows correct information for Synonyms. Fixes #5422 2020-05-04 12:23:18 +05:30
Dave Page 9bdf900b25 Rename README 2020-05-01 15:18:29 +01:00
Dave Page 0ec60a6f85 Minor cleanup and modernisation. 2020-05-01 15:14:46 +01:00
Dave Page 70e24ba059 Rename the README and fix it up to match modern reality. 2020-05-01 15:14:04 +01:00
Akshay Joshi ad80217593 Remove Python2 references from the source code.
refs #5443

Initial patch: Neel Patel
2020-04-30 17:22:48 +05:30
Dave Page 7dd00a1494 Raise an exception under Python < 3.4.
It also cleans up the README to remove references to Python 2
and removes Python 2-isms from the main config.

refs #5443
2020-04-30 14:17:00 +05:30
Dave Page 109051e1d5 Remove Python 2 support from the desktop runtime
refs #5443
2020-04-30 13:04:09 +05:30
Dave Page 86afec860f Remove Python 2 support from the Python tests.
refs #5443
2020-04-30 12:56:45 +05:30
Dave Page 393741fd9d Remove Python 2.7 support from the wheel package.
refs #5443
2020-04-30 12:51:58 +05:30
Dave Page e8a4b46ba1 Another attempt at fixing the 'do we need the --embed flag for Python' problem.
This change looks at the output from python-config --help (which may go
to stderr or stdout), and if it includes --embed, adds it to the later
call to get the libs string.
2020-04-29 16:19:54 +01:00
Dave Page 97be3d8179 Don't rely on python-config sending the help message to stderr, as older versions seem to use stdout. 2020-04-29 15:49:16 +01:00
Dave Page 505956d1fa OK, another attempt at this as it fails on non-Linux non-Python 3.8. 2020-04-29 14:29:47 +01:00
Dave Page f7ef86dced Sigh. Remove extraneous closing bracket. It's always a bracket. 2020-04-29 14:04:32 +01:00
Dave Page 3138f36e05 Fix the runtime build with Python 3.8 on Linux 2020-04-29 13:55:53 +01:00
Libor M fe264aafa7 Update Czech translation. 2020-04-28 11:04:43 +05:30
Khushboo Vashi 88aebb64f9 Fixed failed to fetch utility error when click on refresh(any option) materialized view. Fixes #5447
It's a regression of #5213
2020-04-28 11:00:23 +05:30
Akshay Joshi 6d1f67f3be Reverting patch to remove Python 2.7 support from wheel package to avoid any issue before 4.21 release. 2020-04-27 21:43:35 +05:30
Akshay Joshi 50a423b142 Update version for release. 2020-04-27 21:23:51 +05:30
Dave Page b716800474 Remove Python 2.7 support from the wheel package. 2020-04-27 21:20:43 +05:30
Aditya Toshniwal b695329d2d Fixed API test cases for backup, restore and maintenance. 2020-04-27 21:17:34 +05:30
Abhilasha Narendra fbee63085c Documentation of LDAP authentication support. Fixes #5348 2020-04-27 20:28:39 +05:30
Aditya Toshniwal 99d1068f70 Fixed an issue where the search object not able to locate pg_toast_* tables in the pg_toast schema. Fixes #5441 2020-04-27 19:51:56 +05:30
Pradip Parkale 18748846ef Fixed the regression where initial changes make the Save button enabled when the table dialog is opened. Fixes #4504 2020-04-27 18:48:44 +05:30
Satish V b80784f5a1 Fixed an issue where the user should not be able to add columns in the creation order after 50 columns.
Regression of the initial patch.

Fixes #5043
2020-04-27 18:01:09 +05:30
Murtuza Zabuawala 76eb3e9b67 Fixed an issue when the user performs refresh on a large size materialized view. Fixes #5213 2020-04-27 17:30:23 +05:30
Khushboo Vashi 0f6abcc7fa Fixed an issue where the user is not able to create a server if login with an LDAP account. Fixes #5439
Improved LDAP error messages.
2020-04-27 15:33:19 +05:30
Fred Escallier ed106e3577 Update French translation. 2020-04-27 13:52:13 +05:30
Domenico Sgarbossa 3c9aed4d6f Update Italian translation. 2020-04-27 13:50:31 +05:30
Yogesh Jain 9daa7c7a7c Added title to the login page. Fixes #5430 2020-04-27 12:38:11 +05:30
Dave Page b7dad25d3e We support Python 3.8 2020-04-24 16:20:25 +01:00
Dave Page 64a26b560b Cleanup build log output by removing unnecessary files in a nicer way. 2020-04-24 15:07:50 +01:00
Dave Page d5bfc726c0 Ignore the pre-compiled resources. 2020-04-24 14:56:46 +01:00
Akshay Joshi 0dcb448f2e Update library inventory. 2020-04-24 18:28:29 +05:30
Akshay Joshi ccafde604e Update message catalogs. 2020-04-24 18:24:00 +05:30
Pradip Parkale ef58d277ca Fixed an issue where like options should be disabled if the relation is not selected while creating a table. Fixes #4504 2020-04-24 18:22:11 +05:30
Akshay Joshi 6642860d51 Remove the 'Beta' word from the Dark Theme. 2020-04-24 16:52:39 +05:30
Aditya Toshniwal aec64aa582 Fixed following issues for 1257:
1. For synonyms, the property is shown as "Public Synonym".
 2. For system procedure, the flag should be True but it is displaying as False.
 3. For both views and materialized views, the property is "System View".
 4. For FTS templates, the property is showing as "System FTS Parser".

Fixes #1257
2020-04-24 16:35:59 +05:30
Akshay Joshi 6de1d3f7de Fixed feature test.
Pass the row height to the function instead of making the
decision onthe basis of whether it is a new row or not.
2020-04-24 13:16:18 +05:30
Aditya Toshniwal 90849fe29b Fixed mouse click issue where it does not select an object in Browser unless the pointer is over the object. Fixes #4180 2020-04-24 11:32:11 +05:30
Nagesh Dhope 17129b259b Reverting patch for RM #3269.
We observed that sometimes the browser is getting hanged and sometimes
the ViewData grid is getting disappear. We suspect its due to the number
of rows to update on the slick grid after fetching next of rows.
2020-04-24 11:13:13 +05:30
Aditya Toshniwal dfb74904ed Ensure all object types have a System XXX? property. Fixes #1257 2020-04-23 17:31:40 +05:30
Akshay Joshi 2b5c90e379 A warning message will be displayed only when the package header is changed for EPAS packages. Fixes #5410 2020-04-23 17:14:01 +05:30
Satish V 2e29f3fd6d Fixed an issue where columns names should be visible in the order of their creation in the browser tree. Fixes #5043 2020-04-23 16:42:42 +05:30
Ashesh Vashi 637c80c38b Recreate the node item in the tree, when 'id' has been changed of the node.
Fixes #5053
2020-04-23 11:11:15 +05:30
navnath gadakh c76732e3e7 Ensure that default sort order should be using the primary key in View/Edit data. Fixes #5157 2020-04-22 18:47:13 +05:30
Neel Patel 870bcbd932 SVG image format plugin is added to render the image file from stylesheet. And also removed the theme components staging files used during windows and Mac bundling. 2020-04-22 18:47:13 +05:30
Khushboo Vashi b0464500ca Ensure that the user should not be able to change the authentication source. Fixes #5419
Ensure error should be handled properly when LDAP user is created with the same name. Fixes #5420
Fixed an issue where an internal user is not created if the authentication source is set to internal and ldap. Fixes #5432
2020-04-22 18:47:13 +05:30
Nagesh Dhope 5e91ed2bb1 Fixed slider jump issue by making an API call to fetch the next batch of rows only after a user stops scrolling down. Fixes #3269 2020-04-22 18:47:13 +05:30
Khushboo Vashi 6e5dbf7beb Added multiple drop/delete functionality for the table constraints. Fixes #3900 2020-04-22 18:47:13 +05:30
Yogesh Jain 553eeb034d Fixed tooltip crop issue for the large complex query with zoom factor. Fixes #5352 2020-04-22 18:47:13 +05:30
Ashesh Vashi 858294f36e Fixed validation errors in view/materialized view javascript to
determine the number columns chagned. It was trying to execute
'replace' and 'includes' function on undefined values instead of
string value.

Also - changed the warning message, and separated the 'Do you want to
continue?' syntax in separate line for better user experience.

Fixes #5053
2020-04-22 17:19:18 +05:30
Akshay Joshi 4c616f32eb 1) Fixed feature test and API test cases.
2) Added logic to exclude RESQL test cases.
2020-04-22 13:57:32 +05:30
Nagesh Dhope b29bc6868c Fixed an issue where [null] and [default] values are not get copied. Part of #3947 2020-04-22 12:08:52 +05:30
Neel Patel 07f72252d7 Added job step and job schedule disable icons to identify it quickly within the browser tree. Fixes #4636
Add Reverse Engineered and Modified SQL tests for pgAgent jobs. Fixes #4623
Fixed modified SQL issue while adding an exception in pgAgent job schedule. Fixes #5356
2020-04-21 17:00:21 +05:30
Akshay Joshi f289dfb762 Fixed following issues for packages:
1) Removing the package header removes the body as well.
  2) Schema is not visible on the properties dialog.
  3) Reverse engineering SQL and Create script not showing schema-qualified packages.

Fixes #5410
2020-04-21 16:49:23 +05:30
Nagesh Dhope 8d4f3c07c7 Fixed an issue where slider jumps up when new rows get loaded while scrolling down in the DataView panel in the query tool. Fixes #3269 2020-04-21 13:29:49 +05:30
Yogesh Jain 7e30a99937 Fixed the rightmost and bottom tooltip crop issues in the explain query plan. Fixes #5352 2020-04-21 13:14:26 +05:30
Pradip Parkale 3d516101a4 Fixed an issue wherein grant wizard the last object is not selectable. Fixes #4545 2020-04-21 13:09:15 +05:30
Neel Patel b0b60da84a Fixed an issue where the checkbox is not visible on Configuration dialog in runtime for the dark theme. Fixes #5402 2020-04-20 19:16:32 +05:30
Aditya Toshniwal 05abb9e430 Ensure that the query tool context menu should work on the collection nodes. Fixes #5415 2020-04-20 18:50:20 +05:30
Aditya Toshniwal dc4571a3c8 Fixed search object issue when the object name contains special characters. Fixes #5401 2020-04-20 18:40:40 +05:30
Aditya Toshniwal 7361470b64 Fixed an issue where the search object module unable to locate the object in the browser tree. Fixes #5396 2020-04-20 18:27:36 +05:30
Amol Vyavahare f282b26883 Fixed an issue when the user creates a temporary table with 'on commit drop as' clause. Fixes #4946 2020-04-20 18:22:34 +05:30
Akshay Joshi 4692b21bcf Fixed an issue where schema diff marks an identical table as different. Fixes #5350
Fixed an issue where schema diff showing changes in the identical domain constraints. Fixes #5315

Ignore the keys from the source and target list and also sort both the lists.
2020-04-20 18:04:16 +05:30
Libor M 36a3d4e53b Some more gettext() usage fixes:
- fixed `%` vs. `.format()`
  - unified texts and usage `%s` vs. `{}`/`{0}`
  - improved text sentences for translate
  - added gettext for next texts
2020-04-20 11:19:09 +05:30
Nagesh Dhope 8bdfa18efb Ensure that if the delimiter is set other than comma then download the file as '.txt' file. Fixes #4573 2020-04-17 17:37:02 +05:30
Yogesh Jain 52d031f2d0 Fixed encoding issue while saving data in encoded charset other than 'utf-8'. Fixes #4684 2020-04-17 16:30:22 +05:30
Akshay Joshi d8ad0b8faf Fixed validation issue in Synonyms node. Fixes #5409 2020-04-17 14:50:38 +05:30
Akshay Joshi c6deb9393c Fixed an issue while removing the package body showing wrong modified SQL. Fixes #5410 2020-04-17 13:06:07 +05:30
Murtuza Zabuawala d35433d0b8 Fixed an issue where the query tool unable to load the file which contains the BOM marker. Fixes #3495 2020-04-17 12:40:09 +05:30
Nagesh Dhope 0ce4f49e08 Fixed copy-paste row issues in View/Edit Data. Fixes #3947
1) Copy table rows across two or more active query tool sessions.
  2) Copied rows can be pasted multiple times without selecting a row in the query tool grid.
  3) Adds an empty row at the end in the query tool grid after pasting rows.
2020-04-16 15:25:39 +05:30
Aditya Toshniwal dc1e32a632 Fixed internal server error when the database server is logged in with non-super user. Fixes #5400 2020-04-16 15:05:17 +05:30
navnath gadakh c0a2f1f24d Ensure that text larger than underlying field size should not be truncated automatically. Fixes #5210 2020-04-16 14:39:31 +05:30
Akshay Joshi 0dd1cb3fc1 Fixed documentation error. 2020-04-16 13:48:26 +05:30
Murtuza Zabuawala eec2cfd5dd Fixed an issue where the Mode cell of argument grid does not appear completely in the Functions dialog. Fixes #5375 2020-04-16 13:16:07 +05:30
Shubham Agarwal d6cab7b421 Ensure the DROP statements in reverse engineered SQL are properly quoted for all objects. Fixes #4440 2020-04-16 13:06:50 +05:30
Libor M 8254e9f030 Some minor gettext and format fixes. 2020-04-16 12:55:19 +05:30
Ganesh Jaybhay 7493649893 Added schema-qualified dictionary names in FTS configuration to avoid confusion of duplicate names. Fixes #4709 2020-04-16 12:47:00 +05:30
Khushboo Vashi 738c421edf Ensure that Constraint Trigger, Deferrable, Deferred option should be disabled when the user selects EDB-SPL function for the trigger. Fixes #4957 2020-04-16 12:38:20 +05:30
Murtuza Zabuawala c41da41efe Fixed python exception error when user tries to download the CSV and there is a connection issue. Fixes #4858 2020-04-15 16:46:03 +05:30
Khushboo Vashi ed0a596286 Added alert message to Reset Layout if any of the panels from Query Tool failed to load. Fixes #5366 2020-04-15 16:23:54 +05:30
Aditya Toshniwal 31a929388b Make changes to use gettext() function correctly. 2020-04-15 16:23:17 +05:30
Aditya Toshniwal 0424f7d962 Fixed following issues for Procedures:
1) Change comments on the procedure with arguments as a procedure can be overloaded.
     Note that on EPAS servers, procedure overloading works only for v11+.
  2) The save button of a procedure dialog is enabled without any change.
  3) Fixed formatting of the reverse-engineered SQL.
  4) On EPAS servers, the parameters set were not displayed in the SQL generated.
     They are visible only if set to edbsql.
  5) Changing the volatility option of any existing procedure was not working.
  6) Changing the parallel option (EPAS v9.6+) was not working.
  7) Added RE-SQL test cases for procedures.

Fixes #4620, Fixes #4873
2020-04-15 13:54:17 +05:30
Shubham Agarwal 8654d6cf43 Fixed an issue where the mode is not shown in the properties dialog of functions/procedures if all the arguments are IN arguments. Fixes #5387 2020-04-15 12:33:54 +05:30
Neel Patel 25553b11ed Correct the build script whereby mistake we have removed the theme components from the source tree while building. 2020-04-15 11:28:18 +05:30
Dave Page 74b3495542 Warn the user if an unsupported, deprecated or unknown browser is detected. Fixes #5399 2020-04-14 21:15:02 +05:30
Neel Patel ee29e64039 Fixed Mac OSX build by adding the prefix in qrc file. 2020-04-14 20:23:32 +05:30
Ashesh Vashi 3a4641889c Using 'is_valid_ipaddress' utility function everywhere 2020-04-14 18:51:48 +05:30
Ashesh Vashi d9c84edf9a A valid ip address can be IPv4/IPv6 2020-04-14 18:45:45 +05:30
Ashesh Vashi a930c6617b Merged adjustanct 'if' statements when allowed.
Also - removed the unused variables.
2020-04-14 18:43:04 +05:30
Ashesh Vashi 6c5883bce0 We don't need to pass gettext for inline CSS transforation 2020-04-14 18:43:04 +05:30
Ashesh Vashi 414e336852 [Authentication] Some of the base class functions are not static
function, but - methods. Hence - 'self' should be used, and not 'cls'.

Also - use a constant for duplicate string literal in LDAP
authentication implementation.
2020-04-14 18:43:04 +05:30
Ashesh Vashi d226ffbd1f [Foreign Key] Removed 1 unexpected arguments; 'get_node_list' expects
5 positional arguments.

Also,
- Using 'gettext' instead of '_'.
- Using constant string for 'foreign_key not found' error message.
2020-04-14 18:40:15 +05:30
Neel Patel 65bc196eba Fix the bundling issue of dark mode runtime support for Windows and Mac. 2020-04-14 15:19:39 +05:30
Ganesh Jaybhay 12530cd973 Ensure index dropdown should have existing indexes while creating unique constraints. Fixes #5007 2020-04-14 14:02:33 +05:30
Khushboo Vashi a0fcb38e68 Fixed syntax error while refreshing the existing synonyms. Fixes #5383 2020-04-14 13:43:56 +05:30
Pradip Parkale a05acb4f99 Fixed tab key navigation for some dialogs. Fixes #5371 2020-04-14 13:32:03 +05:30
Neel Patel 21cb1a0166 Fix the typo in the test configuration json file. 2020-04-14 13:07:27 +05:30
Shubham Agarwal 41521a9b98 Ensure all object names in the title line of the reverse-engineered SQL are not quoted. Fixes #4445 2020-04-14 13:02:58 +05:30
Akshay Joshi 781b766ac4 Fixed an issue where difference SQL is not seen in the schema diff tool for Types. Fixes #5302 2020-04-13 20:24:12 +05:30
Akshay Joshi df11f28593 Fixed an issue where the identical packages and sequences visible as different in the schema diff tool. Fixes #5362 2020-04-13 18:06:20 +05:30
Khushboo Vashi 030741bba5 Modified some logic for the EPAS server as the user can change the view definition without dropping it. Fixes #5053 2020-04-13 16:00:01 +05:30
Dave Page 41be5479af Added dark mode support for the configuration dialog on Windows/macOS runtime. Fixes #4292
Detects dark mode at server start and styles the runtime accordingly.

Patch modified by: Neel Patel
2020-04-13 13:22:00 +05:30
Neel Patel 9c93e93cb4 Make the configuration window in runtime to auto-resize. Fixes #4864 2020-04-13 13:09:26 +05:30
Aditya Toshniwal b427a87724 Fixed an issue where changing the values of columns with JSONB or JSON types to NULL. Fixes #4969 2020-04-13 12:34:32 +05:30
Aditya Toshniwal 077589e08b Fixed an issue where right-clicking a browser object does not apply to the object on which right-click was fired. Fixes #3523
Fixes keyboard navigation on the context menu applied to browser tree.
2020-04-10 17:34:57 +05:30
Murtuza Zabuawala 4de6b93ba8 Ensure that the password prompt should not be visible if the database server is in trust authentication mode. Fixes #2813 2020-04-10 17:03:04 +05:30
Aditya Toshniwal 014ce31589 Fixed user management related issues:
1) Unable to add a user when there are many users. The dialog went blank. Fixed.
 2) The error message did not have a close button. Fixed.
 3) When clicked on the add button, then the cursor will focus on the email box of
    the new row for convenience.
 4) When the dialog opens, the cursor will focus on the search text box.
 5) By default, the "User" role will be selected when adding a new user.
    Also removed an empty option in the roles dropdown.
 6) When the search filter is applied and we try to add an already existing user, the
    validation is done only on the filtered data and not on all the users' data. 

Fixes #5227
2020-04-10 16:49:33 +05:30
Nagesh Dhope d9574f3caa Fixes following OSX native keyboard shortcuts in Query Tool:
1) option+arrow (L/R) should skip by "word"
  2) option+arrow (up/down) should go up/down one line
  3) shift+option+arrow (L/R) should select/highlight by "word"
2020-04-10 15:21:56 +05:30
Libor M 6a9af07f7a Fixed gettext usage:
- fixed gettext usage with .format() only for original text with %s
  - fixed typos
  - fixed translation yes/no buttons in the dialog.
  - improved translating sentences without "connecting" words (eg. see web/pgadmin/dashboard/static/js/dashboard.js,
     word 'cancel' needs to be translated in the Czech language as 'zrušit' but in another sentence as 'zrušení')
  - added gettext for text translations.
2020-04-10 14:52:41 +05:30
Khushboo Vashi e238ecf182 Ensure that OID should be shown in properties for Synonyms. Fixes #5270 2020-04-10 13:19:52 +05:30
Akshay Joshi c8646f99c0 Fixed typo 2020-04-09 21:46:47 +05:30
Akshay Joshi 31f255b541 Added support of Foreign Tables to the Schema Diff. Fixes #5263 2020-04-09 21:03:28 +05:30
Akshay Joshi fecf3915c5 Fixed API/RESQL test cases for View/MView failed due to #5053 commit. 2020-04-09 21:03:28 +05:30
Ashesh Vashi 8a550b569f Fixed expected output status code, as 410 should be the status code
for the object (CAST) not exists in the database server.
2020-04-08 16:51:53 +05:30
Ashesh Vashi 1a34f61b24 Moved the ip-address check functionality to a separate file to improve
the maintainability of the code.
2020-04-08 16:50:14 +05:30
Ashesh Vashi 775e61c248 Fixed pep8 issue 2020-04-08 14:34:34 +05:30
Ashesh Vashi aa7ced4ef1 Fixed a typo in previous commit 2020-04-08 14:30:29 +05:30
Ashesh Vashi d9f6baac72 Various misc fixes:
- Using the 'gettext' as oppose to '_', which is not defined
- Define missing variables
- Fixed escape character in string with double quote
- Removed some dead code in a test case
- Removed unnecessary self assignment

Includes some fixes for Accessibility improvements
- Use semantic markup to mark emphasized or special text
- Added hidden legend in <fieldset> for better screen reader support
2020-04-08 14:14:25 +05:30
Ashesh Vashi 8fe687eb55 [Rules] Removing unnecessary 'if' condition 2020-04-08 13:14:14 +05:30
Ashesh Vashi 6c693d158e [Exclusion Constraint] Fixed an typo - it should have been assignment 2020-04-08 13:05:28 +05:30
Ashesh Vashi 6b3e1f1e65 [TABLES] Do not assign the paramter values, use separate variable for new value 2020-04-08 13:04:24 +05:30
Ashesh Vashi 8fe344c268 [EDB Package Functions] [Functions] Fixed typos:
- 'gettext' should be used as '_' is not defined
    - Identical expressions should not be used on both sides of a binary operator.
2020-04-08 13:02:37 +05:30
Ashesh Vashi c7afa30d0c [Packages] Fixed a typo 2020-04-08 13:00:49 +05:30
Ashesh Vashi 14f21921bb [Functions] Fixed typos:
- 'gettext' should be used as '_' is not defined
- Identical expressions should not be used on both sides of a binary operator.
2020-04-08 13:00:01 +05:30
Ashesh Vashi 29ae6dfbf6 [FTS Configuration] Fixed an typo - it should have been assignment 2020-04-08 12:56:51 +05:30
Ashesh Vashi a6c03a6b75 [Domain] Existing expression will expression will always result into false 2020-04-08 12:54:37 +05:30
Ashesh Vashi 068b812245 [COLLATIONS] Do not assign the paramter values, use separate variable for new value 2020-04-08 12:53:48 +05:30
Ashesh Vashi a84a62def8 Using the 'gettext' as oppose to '_', which is not defined in these
files.
2020-04-08 12:34:57 +05:30
Ashesh Vashi 7f0847b95d Using the 'gettext' as oppose to '_', which is not defined in the file 2020-04-08 12:29:11 +05:30
Ashesh Vashi 073e310a5a [Accessibility] Use semantic markup to mark emphasized or special text.
Reference: https://www.w3.org/TR/WCAG20-TECHS/H49.html
2020-04-08 12:27:18 +05:30
Ashesh Vashi d9e95d13e6 [LDAP Authentication] Use more secure protocol TSL v1.2 for security reason 2020-04-08 11:57:01 +05:30
Khushboo Vashi f4607885e1 Fixed an issue where changing the columns in the existing view throws an error. Fixes #5053
PostgreSQL doesn't allow to change the view columns. So the view should be dropped first
and then recreate it and also the user will get a warning first.
2020-04-08 11:29:03 +05:30
Aditya Toshniwal 03f4109ac4 Fixes an issue where pgAdmin4 GUI does not display properly in IE 11. Fixes #5361
Use the ES5 dist of @simonwep/pickr to make it work on IE.
2020-04-08 11:29:03 +05:30
Dave Page bd0aaf7665 Update yarn.lock 2020-04-07 09:43:54 +01:00
Aditya Toshniwal 134c1802e7 Enable the save button by default when a query tool is opened with CREATE or other scripts. Fixes #4856 2020-04-07 13:54:16 +05:30
Pradip Parkale 33deacacee Ensure that the grant wizard should be closed on pressing the ESC key. Fixes #4206 2020-04-07 13:48:56 +05:30
Aditya Toshniwal d6bc3ccc8b Fixed cursor disappeared issue in the query editor for some of the characters when zoomed out. Fixes #3988 2020-04-07 11:51:19 +05:30
Aditya Toshniwal e1f990190e Added search object functionality. Fixes #2172 2020-04-06 17:33:07 +05:30
Khushboo Vashi f77aa3284f Added LDAP authentication support. Fixes #2186 2020-04-06 15:57:05 +05:30
Pradip Parkale 8ceeb39268 Fixed tab key navigation issue for parameters in table dialog. Fixes #5275 2020-04-06 13:13:21 +05:30
Aditya Toshniwal 4f71dae598 Fixed calendar opening issue on the exception tab inside the schedules tab of pgAgent. Fixes #4512 2020-04-06 12:59:22 +05:30
Dave Page 4da327088c Added an option to prevent a browser tab being opened at startup. Fixes #5353 2020-04-03 19:43:00 +05:30
Dave Page e26a9a25d5 Fixed compilation warnings while building pgAdmin. Fixes #5351 2020-04-03 19:23:32 +05:30
Akshay Joshi 99e4c3350f Fixed RESQL test cases for Packages. 2020-04-03 19:15:40 +05:30
Vishal Sawale 99a72e529b Fixed some accessibility issues:
1) Added missing search filter label in backgrid.
  2) broken aria issue for objects menu.
2020-04-03 17:11:46 +05:30
Aditya Toshniwal 824e3866d8 Replace the existing color picker - spectrum-colorpicker with @simonwep/pickr.
spectrum-colorpicker has accessibility issues and is not maintained since long

Part of #5197
2020-04-03 17:06:47 +05:30
Akshay Joshi ce89ae3c1d Added support of Packages, Sequences and Synonyms to the Schema Diff. Fixes #5264 2020-04-03 16:52:45 +05:30
Vishal Sawale 4036f2a0f2 Fixed accessibility issue for the missing label from the table header. 2020-04-02 12:47:39 +05:30
Murtuza Zabuawala 37f55ccc25 Ensure that switch cell is in sync with switch control for accessibility. Fixes #5314 2020-04-02 12:25:55 +05:30
Aditya Toshniwal 358c5d0a0f Added support for parameter toast_tuple_target and parallel_workers of the table. Fixes #5181
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. Fixes #5180
2020-04-01 18:19:55 +05:30
Akshay Joshi a09ada18ee Updated psutil to the latest version 5.7.0 to fix vulnerability issue. 2020-04-01 18:12:38 +05:30
Aditya Toshniwal 88a1e03314 Fixed generated SQL when any token in FTS Configuration or any option in FTS Dictionary is changed. Fixes #5268 2020-04-01 15:03:30 +05:30
Rahul Shirsat 75b6341a84 Ensure that the start and end date should be deleted when clear the selection for pgAgent Job. Fixes #3645 2020-04-01 13:31:36 +05:30
Dave Page e538a4f710 Install rpm-sign. 2020-03-31 17:44:38 +01:00
Dave Page af00296ffe We only need to enable repos on CentOS/RHEL 8. 2020-03-31 17:14:45 +01:00
Dave Page dd7d3c6e23 Fix syntax. Sigh. 2020-03-31 17:12:00 +01:00
Dave Page e576a886d0 Appending signing macros is tricky as the user running the build isn't usually the one running this script. Output instructions instead. 2020-03-31 17:03:48 +01:00
Dave Page f0d077fed8 Attempt to append signing macros to the non-root users config. 2020-03-31 16:59:45 +01:00
Dave Page 37e39ca089 Offer to setup RPM signing macros for the user. 2020-03-31 16:44:34 +01:00
Dave Page 7c2b218076 Install expect. 2020-03-31 16:07:47 +01:00
Akshay Joshi 002fdb33fc Update version for release. 2020-03-30 17:39:33 +05:30
Pradip Parkale 13b65c9a6a Fixed tab key navigation issue for Grant Wizard. Fixes #5241
1) Added entry for .scss to change the shadow of  'ajs-close' button.
  2) allow the user to use the keyboard to update the Backgrid cell DateTime picker control.
2020-03-30 17:31:50 +05:30
Libor M e6118a06e8 Update Czech translation. 2020-03-29 18:31:51 +05:30
Domenico Sgarbossa 63ac71190b Update Italian translation. 2020-03-29 18:29:03 +05:30
Identifier Anonymous 37542ae706 Update Japanese translation. 2020-03-29 18:25:51 +05:30
Fred Escallier 89d4d835ba Update French translation. 2020-03-29 18:23:17 +05:30
Akshay Joshi 9f0ea70945 Update message catalogs. 2020-03-27 19:02:29 +05:30
Akshay Joshi 86e4a88201 Added 'oid-2' to the ignore list of schema diff for all supported nodes. Fixes #5297 2020-03-27 15:27:48 +05:30
Akshay Joshi c002881f66 Added conkey and indkey to the ignore list for schema diff. 2020-03-27 14:41:18 +05:30
Nagesh Dhope f17d4530a3 Fixed focus color issue for Alertify dialog buttons. Fixes #5292 2020-03-26 15:30:31 +05:30
Akshay Joshi 94a76cc9e0 Added support of Domain, Domain Constraints and Types to the Schema Diff. Fixes #5262 2020-03-26 14:30:09 +05:30
Ganesh Jaybhay 4c0b229b14 Fixed an issue where focus doesn't go to the immediate next editable cell after pressing the tab key on switch cell. 2020-03-26 10:50:01 +05:30
Dave Page 17d0d5e0a2 Use NodeJS v12. 2020-03-24 11:37:32 +00:00
Dave Page f97d29243d Don't offer to configure Apache on Redhat platforms as there's nothing to do. 2020-03-24 11:36:54 +00:00
Libor M 94864104e4 Added and fixed gettext usage for better translation coverage. Fixes #5284
1) Fixed usage gettext('') instead of _('') in javascript files.
  2) Fixed usage gettext('') instead of `${gettext('')}` in javascript files,
     because "pybabel extract" not support extracting from this syntax.
2020-03-24 11:14:05 +05:30
Aditya Toshniwal 6988ce96d7 Change some colors and opacity to comply with WCAG color contrast standards. Fixes #5128 2020-03-23 18:15:39 +05:30
Akshay Joshi 98492e7718 Modified RESQL test cases for Foreign Tables to fix the build failures. 2020-03-22 16:26:23 +05:30
Dave Page becb453e7d Use the correct architecture for web packages on Redhat. 2020-03-20 15:48:00 +00:00
Dave Page 35644fdd35 Update supported distro lists. 2020-03-20 14:51:19 +00:00
Dave Page 5ab056759b Use the proper naming convention for .DEB packages 2020-03-20 12:26:10 +00:00
Dave Page e1aeaba942 Simplify PYTHONPATH handling for Sphinx. 2020-03-20 12:07:35 +00:00
Dave Page e256fc32d9 Ensure rpm-build is installed. 2020-03-20 11:50:59 +00:00
Murtuza Zabuawala a7ba446703 Fixed Unicode character issue causing error on Python2 environment. Fixes #5279 2020-03-20 15:17:45 +05:30
Akshay Joshi 26d0a3e5cb Fixed following audit vulnerabilities:
https://www.npmjs.com/advisories/1179
2020-03-20 11:30:27 +05:30
Dave Page 7f571fa7d8 Add mod_wsgi to the built package list. 2020-03-19 13:17:22 -04:00
Dave Page cb600549c3 Don't hard code the architecture. 2020-03-19 12:56:39 -04:00
Dave Page e1cb6d92c5 Update supported distros list. 2020-03-19 12:56:39 -04:00
Dave Page 8812a7db69 Add support for building RPMs on CentOS/RHEL 7 2020-03-19 12:56:39 -04:00
Pradip Parkale 96361656e4 Fixed some accessibility issues in the dialogs:
1) Aria-label additions at few missing places.
  2) Label additions with  'sr-only' class where hidden labels required.
  3) Converted label to span to solve accessibility error.

Fixes #4608
2020-03-19 16:08:51 +05:30
Murtuza Zabuawala 83785da1bc Enhance the color of switch control for both light and dark theme. Fixes #5271 2020-03-19 13:59:03 +05:30
Akshay Joshi 4fe69e825e Added support of Collation, FTS Configuration, FTS Dictionary, FTS Parser, and FTS Template to the Schema Diff. Fixes #5261 2020-03-19 13:54:25 +05:30
Dave Page 6105fc861d Don't ask to continue when installing deps. 2020-03-18 13:00:33 +00:00
Dave Page f156696339 Add support for building RHEL/CentOS 8 RPMs. 2020-03-18 08:51:11 -04:00
Dave Page b6c8707a4d Don't barf if the tree is clean. 2020-03-16 12:40:01 +00:00
Akshay Joshi 3031c5055a Fixed following audit vulnerabilities:
https://www.npmjs.com/advisories/1488
  https://www.npmjs.com/advisories/1490
2020-03-16 15:47:12 +05:30
Akshay Joshi 44c0d76541 Improve logic to get the DDL statements as a part of the comparison. Fixes #5221
Fixed 23 issues related to schema diff.
2020-03-15 14:52:19 +05:30
Dave Page 0b101d9efd Update tested distros list. 2020-03-13 12:36:08 +00:00
Dave Page b69995b34d Use fakeroot to set file ownership as dpkg-deb can't do it itself on older distros. 2020-03-13 12:17:10 +00:00
Dave Page ef6c9fbd6d Setup dependencies as required on Ubuntu 16.04 and Debian 9 2020-03-13 11:55:03 +00:00
Dave Page e43f58d11f Ensure file/directory ownership is correct. 2020-03-12 15:35:43 +00:00
Dave Page a684b48fb3 Add experimental scripts for building Debian/Ubuntu packages.
Code is split into pkg/debian for the Debian/Ubuntu specific parts,
and pkg/linux for generic code that can be used on other distros.

Tested on Debian 10 and Ubuntu 18.04 at present.
2020-03-12 15:24:58 +00:00
Murtuza Zabuawala 7cc30e3216 Fixed chrome driver download utility issue for Ubuntu. Fixes #4942 2020-03-12 11:18:07 +05:30
Ganesh Jaybhay 6586be5158 Fixed some accessibility issues:
1) Screen reader to read elements in radio modern control.
2) Aria-label additions at few missing places.
3) Radiocontrol to have different ids for each option.
2020-03-12 11:09:29 +05:30
Pradip Parkale 1bd14895c3 Fix an issue where the user can not change the value of DateTime picker control using keyboard. Fixes #4237. 2020-03-10 13:21:17 +05:30
Pradip Parkale 82155cd859 Fix an accessibility issue to maximize the panel for all alertify dialog. Fixes #5143 2020-03-06 18:47:22 +05:30
Nagesh Dhope 0ed3cd248b Set Active query details subnode control as read-only instead of disabled for accessibility. 2020-03-06 17:59:57 +05:30
Akshay Joshi 43451fd3f0 Update version for release. 2020-03-02 17:28:20 +05:30
Akshay Joshi 6340c70d7a Update libraries.txt 2020-03-02 10:01:10 +05:30
Domenico Sgarbossa 8e40c8630d Update Italian translation. 2020-03-02 09:54:22 +05:30
Fred Escallier b9a036e5cb Update French translation. 2020-03-02 09:46:41 +05:30
Identifier Anonymous e330407d44 Update Japanese translation. 2020-03-02 09:44:43 +05:30
Akshay Joshi aa127fe0bd Update message catalogs. 2020-02-28 17:55:14 +05:30
Akshay Joshi 16f1e87bb7 Temporary Changed 'yarn audit' command to 'yarn audit --groups dependencies' to
fix the vulnerability found in decompress js package.
2020-02-28 17:29:32 +05:30
Aditya Toshniwal 4db0a6524d Fix an issue where debugger not showing all arguments anymore after hitting SQL error while debugging. Fixes #5101
Added a "Clear All" button to the argument dialog which will clear all the saved arguments values from SQLite DB.
2020-02-28 15:27:01 +05:30
Aditya Toshniwal c9d04684ce Ensure that all the transactions should be canceled before closing the connections when a server is disconnected using pgAdmin. Fixes #5142 2020-02-28 14:12:44 +05:30
Aditya Toshniwal 5262405f06 Fix an issue where pgAdmin4 does not display properly on the IE browser. It's a regression of #5133
There are some changes in the backgrid-select-all.js in vendor directory and the vendor directory
is excluded from webpack compiling. We used ES6 code syntax which does not work on IE.

Code changes are done to use ES5 syntax. Fixes #5219
2020-02-28 12:29:19 +05:30
Aditya Toshniwal 6a90f7c2e1 Update Flask-SQLAlchemy and SQLAlchemy package which is not working on Windows with Python 3.8 Fixes #5214 2020-02-26 11:41:33 +05:30
Akshay Joshi 6d766176c1 Fixed linter error. 2020-02-25 18:41:19 +05:30
Pradip Parkale eaf4781f5f 1) Added accessibility support in AlertifyJS. Fixes #5154
2) Fix accessibility issue for the maximize button of the Alertify dialog. Fixes #5143
2020-02-25 18:23:36 +05:30
Dave Page 787c11efda Fix the docker build. 2020-02-24 15:35:34 +00:00
Aditya Toshniwal fd07e0c868 Fix syntax error when changing the event type for the existing rule. It is a regression of #5115.
Fixes #5215
2020-02-24 18:11:31 +05:30
Aditya Toshniwal 9bad590e9e Improvements in the UI for both default and dark themes. Fixes #5133
Improve the style of the highlighted code after query execution for Dark mode. Fixes #4996.
Changed background pattern for geometry viewer to use #fff for all themes. Fixes #5077
Changed the color of selected and hovered item for Select2 dropdown, also tweak the appearance of the tags in multi-select boxes. Fixes #4955
Fixed Firefox monospaced issue by updating the font to the latest version. Fixes #5184
2020-02-24 14:11:00 +05:30
Akshay Joshi 29c236c33d Ensure that AlertifyJS should not be visible as a title for alert dialog. Fixes #5058 2020-02-24 12:33:23 +05:30
Aditya Toshniwal a44f17a2fc Fix an issue where command and statements were parsed incorrectly for Rules. Fixes #5115
Fixed issue where removing command or statements altogether was not generating modified SQL.
2020-02-24 12:11:19 +05:30
Aditya Toshniwal 915b09255c Added Python 3.8 support. Fixes #5179
1) Upgraded passlib==1.7.1 to passlib==1.7.2
2) Replace unmaintained Flask-Security with maintained Flask-Security-Too package, which is also compatible with python 3.8
3) Other compatibility code changes.
2020-02-18 12:10:38 +05:30
Nagesh Dhope 1964e824c8 Initialize the label and control className for select2 which was missing in the last commit. 2020-02-18 10:58:30 +05:30
Nagesh Dhope 3e10e2c978 Added option to override the class name of a label tag for select2 control. Fixes #5185 2020-02-17 11:58:28 +05:30
Pradip Parkale e9f16a29cf Improve code coverage and API test cases for the Event Trigger module. Fixes #5088 2020-02-14 11:19:34 +05:30
Aditya Toshniwal 019932c323 Enhance logging by tracking stdout and stderr of subprocess when log level set to DEBUG.
If the process terminates abnormally then the error is not logged which makes it very
difficult to find the reason for failure.

Fixes #5176
2020-02-11 14:28:57 +05:30
Akshay Joshi 2ae279a382 Remove the deprecated 'is_xhr' parameter of flask.request object. 2020-02-10 12:31:52 +05:30
Libor M bf88ff1076 Added Czech language support. Fixes #5170 2020-02-10 12:27:36 +05:30
Akshay Joshi 3db961cb0f Fixed ImportError: cannot import name ImmutableDict from werkzeug.
Updated the Flask-WTF version to the latest to fix the above error.
2020-02-10 11:45:11 +05:30
Dave Page 02f90aca0b Fix typo 2020-02-07 10:49:00 +00:00
Murtuza Zabuawala c9500a5122 Set proper focus on tab navigation for file manager dialog. Fixes #5107
- Show focus when the Tab key is pressed
 - Pressing the Enter key on C:\ drive does not open it on Windows
2020-02-07 11:13:41 +05:30
Akshay Joshi 26cdda090e 1) Source/Target database and schema should be selected by default when the user selects any server in the schema diff tool.
2) Added line break for the generated script if select multiple objects.
3) Remove reactivated RM from the release notes.
2020-02-05 14:36:05 +05:30
Paresh More 520b03cb0a Fixed notarization issue on Catalina for pgAdmin4 binaries
- Revert back binary name pgAdmin 4 to pgAdmin.
 - Added timestamp, force and developer bundle_id option for codesign binaries, app, and dmg file.
2020-02-05 14:00:18 +05:30
Paresh More 93e83dddae Fix copy/paste error. 2020-02-04 15:44:42 +00:00
Paresh More 917d08c61e Fix hard notarisation failures. 2020-02-04 15:21:05 +00:00
Domenico Sgarbossa 49c614160d Update Italian translation. 2020-02-04 18:30:28 +05:30
Nagesh Dhope b6173c9d7b Added tab navigation on close buttons for all the panels and create/properties dialog.
Added tab navigation for scroll left and scroll right buttons on the main window.

Fixes #4601
2020-02-04 11:30:33 +05:30
Fred Escallier b0a0a7c50a Update French translation. 2020-02-04 11:09:40 +05:30
Akshay Joshi 1f0728b7d1 Update version for release. 2020-02-03 17:13:05 +05:30
Nidhi Bhammar 59757dbf55 Documentation of the Schema Diff feature. Fixes #5026 2020-02-03 17:08:28 +05:30
Akshay Joshi 641701ca16 Added missing imports and remove unused imports from schema diff. 2020-02-03 15:30:57 +05:30
Akshay Joshi 4f5c3987f1 Update libraries.txt 2020-02-03 15:11:50 +05:30
Akshay Joshi d24a43b1cc Fix feature test, failed due to change the label tag to span tag for the accessibility. 2020-02-03 13:14:28 +05:30
Identifier Anonymous 64a8be3c4f Update Japanese translation. 2020-02-03 12:44:30 +05:30
Akshay Joshi 0d77bc305e 1) Improve wording for script header while generating the script using the schema diff tool.
2) Fixed an issue where closing the query tool panel throws an error.
3) Fixed schema diff close panel issue.
2020-02-03 12:38:02 +05:30
Akshay Joshi 96b0d85189 Update message catalogs. 2020-01-31 21:33:43 +05:30
Khushboo Vashi 3b1c8abd2f Fixed following issue of schema diff tool:
1. Comparison result of 2 exact identical Trigger Functions is different
 2. EPAS 12: Table comparison with the compound trigger shown as different, but all SQL panels are blank
 3. Compound trigger properties panel is not opening
 4. The DDL difference of the table containing the foreign key is not accurate
 5. The DDL difference of the view which refers the table from schema is not accurate
 6. DDL comparison fails if we have procedure with plpgsql in source and edbsql in target
2020-01-31 21:28:08 +05:30
Pradip Parkale 210bbfdbe1 1) Added labels and titles after parsing and validating all the pgAdmin4 web pages for accessibility. Fixes #4770
2) Fixed an issue where Save Password control disappears after clicking on it while creating a server. Fixes #5116
2020-01-31 14:21:35 +05:30
Aditya Toshniwal 0da23b837d Set input controls as read-only instead of disabled will allow tab navigation in the properties tab and also allow screen readers to read it. Fixes #4993 2020-01-31 12:37:44 +05:30
Murtuza Zabuawala 989aa462f7 Set proper focus on tab navigation for file manager dialog. Fixes #5107.
Initial patch sent by Ganesh Jaybhay
2020-01-31 11:43:30 +05:30
Aditya Toshniwal 75a3e92098 Fixed an issue where logout inactive session did not work when a new tab is opened from the already opened tab. 2020-01-31 11:20:45 +05:30
Akshay Joshi 02f9de5bdb Improve wordings. 2020-01-28 18:36:42 +05:30
Khushboo Vashi c418a9c9ca Fixed following schema diff issues:
1) Version mismatch should be displayed if you select EPAS 11 as the source and EPAS 12 as the target.
  2) We should handle schema diff if the user stops the server after compare.
  3) The data type is not visible for column headers in the query tool/view data.
  4) Difference SQL is shown, though source & target SQL are same.
  5) Error is shown when the 'target only' table is selected & clicked on Generate Script.
  6) Difference SQL generated on deleting primary constraints from source throwing error on running from query tool.
  7) Copy button for Difference SQL does not work.
  8) Incorrect SQL is generated when check constraint from the source table is dropped.
  9) Difference SQL is NOT shown when 'Unique Constraint' is dropped from the source table.
 10) In case of difference, no message displayed related to copied successfully or not.
 11) create or replace trigger should be on the next line.
 12) Comparison Result of exactly identical tables having foreign key constraints is shown as different.
 13) The wrong SQL displayed in the difference tab for view and materialized view for the select statements.
 14) Wrong SQL displayed for the procedure in the difference section.
 15) If the user already opens the compare section of Schema diff tool and Disconnects the server then '<' not supported between instances of 'NoneType' and 'int' message displayed.
 16) When 'check constraint' is added on the source table which has already unique constraint & identical target table is created, all SQL panels remain empty.
 17) Difference SQL is NOT shown when after adding 'Foreign Key' constraint to existing source table.
 18) Incorrect SQL is generated when the existing index on the source table is modified.
 19) Wrong SQL displayed for function in difference section.
 20) Additional space is added before & after in difference SQL generated on the addition of an index to the source table.
 21) Difference SQL is NOT shown when tables have different permission/grants.
 22) Incorrect SQL is shown when the source had inherited table & target has a normal table.
 23) Exactly identical child(inherited) tables show difference SQL.
 24) Comparison is NOT working when the custom vacuum is enabled & one of the parameter modified & again custom vacuum is disabled.
2020-01-28 14:53:17 +05:30
Nagesh Dhope f167d77b61 Allow screen-reader to read label & description of non-textable elements. Fixes #4762.
Allow screen-reader to identify the alert errors. Fixes #4763

  Added role alertdialog for confirm and alert dialog.
  Added role status for all status bars/banners.
  Added role alert for error bars.
  Added aria-labelledby for charts on each dashboard.
  Added tabindex for each chart so that it is navigable using tab key.
2020-01-28 11:32:11 +05:30
Akshay Joshi 6594481992 1) Disable Fill Factor and Has OIDs control for the partitioned table.
2) Added reloptions for the partitions and partitioned table.
2020-01-24 16:13:30 +05:30
Akshay Joshi 4faf14b45f Default tablespace should not be visible for the multi-level partitioned table on PG 12 2020-01-24 11:36:00 +05:30
Akshay Joshi 198063f046 Added support for a multi-level partitioned table. Fixes #2554. 2020-01-23 18:49:15 +05:30
Nick Barnes f5d46bf9f1 Fixed an issue while editing char[] or character varying[] column from View/Edit data throwing an error.Fixes #4410. 2020-01-23 14:55:02 +05:30
Aditya Toshniwal fde8e4054a Fixed an issue where Grant wizard unable to handle multiple objects when the query string parameter exceeds its limit. Fixes #4511 2020-01-20 17:53:21 +05:30
Akshay Joshi b4b54d6b94 Fixed API test cases for missing language pack and jasmin test case. 2020-01-20 16:14:12 +05:30
Dave Page 23e218f1b5 Ensure Postfix starts in the container, now it runs as non-root by default. Fixes #5076 2020-01-20 10:41:27 +00:00
Dave Page 33cb649f26 Improve wording 2020-01-20 10:39:48 +00:00
Pradip Parkale 30b4b5b349 Improve code coverage and API test cases for the LANGUAGE module. Fixes #5050. 2020-01-20 13:16:59 +05:30
Akshay Joshi 430e9ae994 Updated the incorrect icon used for the cast node on refresh. Fixes #5065. 2020-01-17 12:10:26 +05:30
Akshay Joshi af56b92af4 Fix an issue where refreshing a package results in the change in the object completely. Fixes #5066. 2020-01-17 12:01:37 +05:30
Aditya Toshniwal e2bfac9e42 Replace node-sass with sass for SCSS compilation. Fixes #5096
This will fix issues reported by the yarn audit. sass is better-maintained library than node-sass.
2020-01-16 14:44:58 +05:30
Yogesh Mahajan 4ab3bbeb82 Improve code coverage and API test cases for the CAST module. Fixes #5049. 2020-01-16 14:34:51 +05:30
Aditya Toshniwal 8c3bba65e5 Logout the pgAdmin session when no user activity of mouse move, click or keypress. Fixes #5000.
Introduced two config params:
1. USER_INACTIVITY_TIMEOUT - Interval in seconds for the timeout. Default is 0-Zero which means disabled.
2. OVERRIDE_USER_INACTIVITY_TIMEOUT - If set to true, tools like query tool or debugger will override USER_INACTIVITY_TIMEOUT
   and will not allow the application to timeout if a query is running for a long time.
2020-01-15 18:07:46 +05:30
Khushboo Vashi d59816054f Schema Diff Improvements:
1. Grid header should be center aligned vertically.
2. Increase the space between object counts.
3. The previous selected objects should not be re-selected on comparison.
2020-01-13 18:19:07 +05:30
Simon Wimmesberger 9dccd20bb3 Fix an issue where setting STORAGE_DIR to empty should show all the volumes on Windows in server mode. Fixes #5025. 2020-01-13 13:20:37 +05:30
Khushboo Vashi 45f2e35a99 Added Schema Diff tool to compare two schemas and generate the difference script.
Currently supported objects are Table, View, Materialized View, Function and Procedure.

Backend comparison of two schemas implemented by: Akshay Joshi

Fixes #3452.
2020-01-10 15:42:09 +05:30
Aditya Toshniwal 8b99a33e6e 1) Ensure that path file name should not disappear when changing ext from the dropdown in file explorer dialog. Fixes #3812.
2) Fix column resizable issue in the file explorer dialog. Fixes #4827.

Used tablesorter's resizable widget.
2020-01-10 12:53:32 +05:30
Nagesh Dhope a54efeddfa Updated wcDocker package which includes aria-label accessibility improvements. Fixes #5072. 2020-01-10 11:58:55 +05:30
Pradip Parkale ed279cac31 Improve the test framework to run for multiple classes defined in a single file. Fixes #5071. 2020-01-10 11:48:36 +05:30
Akshay Joshi be4b8284c5 Fix an issue where select, insert and update scripts on tables throwing an error. Fixes #5074. 2020-01-09 18:23:23 +05:30
1217 changed files with 110410 additions and 38573 deletions

No files matched your search

+6 -3
View File
@@ -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
@@ -39,6 +41,7 @@ web/config_local.py
web/pgadmin/misc/themes/pgadmin.themes.json
web/geckodriver.log
web/regression/test_config.json
web/regression/.coveragerc
node_modules/
web/pgAdmin/static/js/generated
web/pgadmin/static/js/generated
+15 -14
View File
@@ -12,7 +12,7 @@
# and clean up the web/ source code
#########################################################################
FROM node:10-alpine AS app-builder
FROM node:12-alpine3.11 AS app-builder
RUN apk add --no-cache \
autoconf \
@@ -45,7 +45,12 @@ RUN npm install && \
npm audit fix && \
rm -f yarn.lock && \
yarn import && \
yarn audit && \
# Commented the below line to avoid vulnerability in decompress package and
# audit only dependencies folder. Refer https://www.npmjs.com/advisories/1217.
# Pull request is already been send https://github.com/kevva/decompress/pull/73,
# once fixed we will uncomment it.
# yarn audit && \
yarn audit --groups dependencies && \
rm -f package-lock.json && \
yarn run bundle && \
rm -rf node_modules \
@@ -61,7 +66,7 @@ RUN npm install && \
# Now, create a documentation build container for the Sphinx docs
#########################################################################
FROM python:3.7-alpine3.10 as docs-builder
FROM python:3.8-alpine3.11 as docs-builder
# Install only dependencies absolutely required for documentation building
RUN apk add --no-cache \
@@ -71,7 +76,7 @@ RUN apk add --no-cache \
libffi-dev && \
pip install --no-cache-dir \
sphinx \
flask_security \
flask_security_too \
flask_paranoid \
python-dateutil \
flask_sqlalchemy \
@@ -93,21 +98,15 @@ RUN LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 make -C /pgadmin4/docs/en_US -f Makefile
# Create additional builders to get all of the PostgreSQL utilities
#########################################################################
FROM postgres:9.4-alpine as pg94-builder
FROM postgres:9.5-alpine as pg95-builder
FROM postgres:9.6-alpine as pg96-builder
FROM postgres:10-alpine as pg10-builder
FROM postgres:11-alpine as pg11-builder
FROM postgres:12-alpine as pg12-builder
FROM alpine:3.10 as tool-builder
FROM alpine:3.11 as tool-builder
# Copy the PG binaries
COPY --from=pg94-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-9.4/
COPY --from=pg94-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-9.4/
COPY --from=pg94-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-9.4/
COPY --from=pg94-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-9.4/
COPY --from=pg95-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-9.5/
COPY --from=pg95-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-9.5/
COPY --from=pg95-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-9.5/
@@ -137,7 +136,7 @@ COPY --from=pg12-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-12/
# Assemble everything into the final container.
#########################################################################
FROM python:3.7-alpine3.10
FROM python:3.8-alpine3.11
COPY --from=tool-builder /usr/local/pgsql /usr/local/
@@ -162,11 +161,13 @@ RUN apk add --no-cache --virtual \
postgresql-client \
postgresql-libs \
shadow \
sudo \
libcap && \
pip install --upgrade pip && \
pip install --no-cache-dir -r requirements.txt && \
pip install --no-cache-dir gunicorn==19.9.0 && \
apk del --no-cache build-deps
apk del --no-cache build-deps && \
echo "pgadmin ALL = NOPASSWD: /usr/sbin/postfix start" > /etc/sudoers.d/postfix
# We need the v12 libpq, which is only in the 'edge' build of Alpine at present
COPY --from=pg12-builder /usr/local/lib/libpq.so.5.12 /usr/lib/
@@ -187,7 +188,7 @@ RUN groupadd -g 5050 pgadmin && \
chown pgadmin:pgadmin /var/log/pgadmin && \
touch /pgadmin4/config_distro.py && \
chown pgadmin:pgadmin /pgadmin4/config_distro.py && \
setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/python3.7
setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/python3.8
USER pgadmin
# Finish up
+4 -1
View File
@@ -254,7 +254,7 @@ REM Main build sequence Ends
CD "%WD%\runtime"
ECHO Running qmake...
CALL "%QMAKE%" || EXIT /B 1
CALL set "PGADMIN_PYTHON_DIR=%PYTHON_HOME%" && "%QMAKE%" || EXIT /B 1
ECHO Cleaning the build directory...
CALL %MAKE% clean || EXIT /B 1
@@ -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"
+25 -3
View File
@@ -28,7 +28,12 @@ install-node:
cd web && npm audit fix
rm -f web/yarn.lock
cd web && yarn import
cd web && yarn audit
# Commented the below line to avoid vulnerability in decompress package and
# audit only dependencies folder. Refer https://www.npmjs.com/advisories/1217.
# Pull request is already been send https://github.com/kevva/decompress/pull/73,
# once fixed we will uncomment it.
# cd web && yarn audit
cd web && yarn audit --groups dependencies
rm -f package-lock.json
rm -f web/package-lock.json
@@ -48,7 +53,12 @@ check-audit:
cd web && yarn run audit
check-auditjs:
cd web && yarn run auditjs
# Commented the below line to avoid vulnerability in decompress package and
# audit only dependencies folder. Refer https://www.npmjs.com/advisories/1217.
# Pull request is already been send https://github.com/kevva/decompress/pull/73,
# once fixed we will uncomment it.
# cd web && yarn run auditjs
cd web && yarn run auditjs --groups dependencies
check-auditjs-html:
cd web && yarn run auditjs-html
@@ -81,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/*
@@ -94,6 +104,9 @@ clean-runtime:
clean-appbundle:
rm -rf mac-build/
clean-debian:
rm -rf debian-build/
clean-dist:
rm -rf dist/
@@ -106,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) .
@@ -138,5 +157,8 @@ msg-update:
pip: docs
./pkg/pip/build.sh
redhat:
./pkg/redhat/build.sh
src:
./pkg/src/build.sh
+48 -62
View File
@@ -1,4 +1,4 @@
pgAdmin 4
pgAdmin 4
=========
pgAdmin 4 is a rewrite of the popular pgAdmin3 management tool for the
@@ -26,42 +26,46 @@ Building the Runtime
To build the runtime, the following packages must be installed:
- QT 4.6 or above (Use the VC++ build on Windows, not MinGW).
- Python 2.7 or 3.4+
- QT 5 (Use the VC++ build on Windows, not MinGW).
- Python 3.4+
Assuming both qmake and python-config are in the path:
An environment variable named PGADMIN_PYTHON_DIR must be set to the directory
in which Python has been installed, for example:
$ cd $PGADMIN4_SRC/runtime
$ qmake
Project MESSAGE: Building for QT5+...
Project MESSAGE: Building for Linux/Mac...
Project MESSAGE: Using /usr/bin/python-config
Project MESSAGE: Python2 detected.
$ make
...
- /usr
- /usr/local/python-3.8
- C:\Python38
To build the runtime in debug mode, use the option below with qmake
Assuming both qmake is in the path:
dpage@hal:~/git/pgadmin4$ cd runtime
dpage@hal:~/git/pgadmin4/runtime$ export PGADMIN_PYTHON_DIR=/opt/local
dpage@hal:~/git/pgadmin4/runtime$ qmake
Project MESSAGE: ==================================
Project MESSAGE: Configuring the pgAdmin 4 runtime.
Project MESSAGE: ==================================
Project MESSAGE: Qt version: 5
Project MESSAGE: Platform: macOS
Project MESSAGE: Python executable: /opt/local/bin/python3
Project MESSAGE: Python version: 3.8 (38)
Project MESSAGE: Python config: /opt/local/bin/python3-config
Project MESSAGE: CXXFLAGS: -pipe -stdlib=libc++ -I/opt/local/Library/Frameworks/Python.framework/Versions/3.8/include/python3.8 -I/opt/local/Library/Frameworks/Python.framework/Versions/3.8/include/python3.8
Project MESSAGE: LDFLAGS: -stdlib=libc++ -L/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/config-3.8-darwin -ldl -framework CoreFoundation
Project MESSAGE: LIBS: -lpython3.8 -ldl -framework CoreFoundation
dpage@hal:~/git/pgadmin4/runtime$ make
...
To build the runtime in debug mode, use the option below with qmake:
$ qmake CONFIG+=debug
To build the runtime in release mode, use the option below with qmake
To build the runtime in release mode, use the option below with qmake:
$ qmake CONFIG+=release
By default, the runtime application will be built in release mode.
On Linux, an executable called 'pgAdmin4' will be built, and on Mac OS X, an
app bundle called pgAdmin4.app will be created.
To build the runtime on a Windows system, export PYTHON_HOME and PYTHON_VERSION
variables in the System environment. Specify the PYTHON_VERSION with the major
and minor number. Do not specify micro level version.
For example, given a Python version of A.B.C; A - Major number, B - Minor
number, C - Micro level (Bug fix releases).
If Python version is 2.7.12 than specify PYTHON_VERSION=27
e.g. PYTHON_HOME=C:\Python27\
PYTHON_VERSION=27
On Linux, an executable called 'pgAdmin4' will be built, on Windows,
'pgAdmin4.exe', and on Mac OS X, an app bundle called pgAdmin4.app will be
created.
You can also use Qt Creator to build, develop and debug the runtime. Simply
open the $PGADMIN4_SRC/runtime/pgAdmin4.pro project file in Qt Creator and
@@ -88,10 +92,10 @@ Configuring the Python Environment
----------------------------------
In order to run the Python code, a suitable runtime environment is required.
Python versions - Python 2.7 or 3.4+ are currently supported. It is
recommended that a Python Virtual Environment is setup for this purpose,
rather than using the system Python environment. On Linux and Mac systems, the
process is fairly simple - adapt as required for your distribution:
Python version 3.4 and later are currently supported. It is recommended that a
Python Virtual Environment is setup for this purpose, rather than using the
system Python environment. On Linux and Mac systems, the process is fairly
simple - adapt as required for your distribution:
1) Install the virtualenv packages into the system Python environment
@@ -181,11 +185,10 @@ server or desktop mode, and access it from a web browser using the URL shown in
the terminal once pgAdmin has started up.
Setup of an environment on Windows is somewhat more complicated unfortunately,
largely due to the lack of a native compiler toolset. Thankfully, Microsoft
supply a free compiler specifically for Python 2.7 users. Download and install
it from:
largely due to the lack of a native compiler toolset. See the following wiki
page for more information on the compiler you may need:
https://www.microsoft.com/en-gb/download/details.aspx?id=44266
https://wiki.python.org/moin/WindowsCompilers
A blog detailing the setup of Virtual Environments on Windows can be found
here:
@@ -252,7 +255,7 @@ icon and select the Configuration option to open the configuration dialogue.
On a Linux/Mac system, the Python Path will typically consist of a single path
to the virtual environment's site-packages directory, e.g.
/Users/<USERNAME>/.virtualenvs/pgadmin4/lib/python2.7/site-packages
/Users/<USERNAME>/.virtualenvs/pgadmin4/lib/python3.8/site-packages
On Windows, multiple paths are likely to be required, e.g.
@@ -294,24 +297,7 @@ run:
(pgadmin4) $ make pip
On a Mac, build an application bundle in a disk image (DMG file) with:
(pgadmin4) $ make appbundle
Configure the framework.conf to match the QT and Python versions the app is
being built with:
$ cp $PGADMIN4_SRC/pkg/mac/framework.conf.in $PGADMIN4_SRC/pkg/mac/framework.conf
$ vi $PGADMIN4_SRC/pkg/mac/framework.conf
If you have an Apple code signing certificate, both the app bundle and disk
image can be automatically signed by configuring signing:
$ cp $PGADMIN4_SRC/pkg/mac/codesign.conf.in $PGADMIN4_SRC/pkg/mac/codesign.conf
$ vi $PGADMIN4_SRC/pkg/mac/codesign.conf
Edit the file as appropriate, ensuring the various version numbers are correct
and that the appropriate developer ID is specified.
To build the macOS AppBundle, please see pkg/mac/README.
On Windows, the InnoSetup tool is required to create an installer. Download the
Unicode version from:
@@ -320,16 +306,16 @@ http://www.jrsoftware.org/isdl.php
A number of environment variables may need to be set to enable the build script
to function. The defaults will usually work on a typical 64 bit system with
Qt 5.5.1, Python 2.7 and Visual Studio 2013. The examples below are for a
Qt 5.14.2, Python 3.8 and Visual Studio 2013. The examples below are for a
similar 32 bit system:
INNOTOOL=C:\Program Files\Inno Setup 5
PGDIR=C:\Program Files\PostgreSQL\10
PYTHON_DLL=C:\Windows\System32\Python27.dll
PYTHON_HOME=C:\Python27
PYTHON_VERSION=27
QTDIR=C:\Qt\5.9\msvc2013
VCDIR=C:\Program Files\Microsoft Visual Studio 12.0\VC
PGDIR=C:\Program Files\PostgreSQL\12
PYTHON_DLL=C:\Python38\Python38.dll
PYTHON_HOME=C:\Python38
PYTHON_VERSION=38
QTDIR=C:\Qt\5.14.2\msvc2015
VCDIR=C:\Program Files\Microsoft Visual Studio 14.0\VC
To build the installer:
+1 -5
View File
@@ -1,11 +1,7 @@
import os
import sys
import inspect
if sys.version_info[0] >= 3:
import builtins
else:
import __builtin__ as builtins
import builtins
# Ensure the global server mode is set.
builtins.SERVER_MODE = None
+1 -5
View File
@@ -14,11 +14,7 @@
import os
import sys
if sys.version_info[0] >= 3:
import builtins
else:
import __builtin__ as builtins
import builtins
# Ensure the global server mode is set.
builtins.SERVER_MODE = None
+3 -4
View File
@@ -17,7 +17,6 @@ maintenance functions to be executed. Multiple versions are included in the
following directories to allow use with different versions of the database
server:
* PostgreSQL 9.4: */usr/local/pgsql-9.4*
* PostgreSQL 9.5: */usr/local/pgsql-9.5*
* PostgreSQL 9.6: */usr/local/pgsql-9.6*
* PostgreSQL 10: */usr/local/pgsql-10*
@@ -60,7 +59,7 @@ expected paths are /certs/server.crt and /certs/server.key
Specify the local address that the servers listens on. The default should work
for most users - in IPv4-only environments, this may need to be set to
127.0.0.1.
0.0.0.0.
**PGADMIN_LISTEN_PORT**
@@ -115,8 +114,8 @@ instances.
.. warning:: Warning: pgAdmin runs as the *pgadmin* user (UID: 5050) in the
*pgadmin* group (GID: 5050) in the container. You must ensure that all files
are readable, and where necessary (e.g. the working/session directory) for
this user on the host machine. For example:
are readable, and where necessary (e.g. the working/session directory)
writeable for this user on the host machine. For example:
.. code-block:: bash
+4 -2
View File
@@ -16,9 +16,9 @@ superuser privileges to use the debugger.
Before using the debugger, you must modify the *postgresql.conf* file, adding
the server-side debugger components to the the value of the
*shared_preload_libraries* parameter:
*shared_preload_libraries* parameter, for example:
shared_preload_libraries = '$libdir/*other_libraries*/plugin_debugger'
shared_preload_libraries = '$libdir/plugin_debugger'
After modifying the *shared_preload_libraries* parameter, restart the server to
apply the changes.
@@ -81,6 +81,8 @@ Use the fields on the *Debugger* dialog to provide a value for each parameter:
Provide values required by the program, and click the *Debug* button to start
stepping through the program.
The values of the arguments provided here are saved. The values will be pre-filled
next time the dialog opens. To clear the values, use the *Clear All* button.
.. image:: images/debug_step_in.png
:alt: Debugger step-in demo
+6
View File
@@ -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 |
+--------------------------+--------------------+---------------------------------------------------------------+
+1
View File
@@ -14,3 +14,4 @@ PL/SQL code.
debugger
query_tool
editgrid
schema_diff
@@ -0,0 +1,77 @@
.. _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 the distinguished name (DN) for the top-most user
directory that you want to search. You can use this parameter for limiting the search
request to a specific group of users. For example, if you want to search only within
the Organizational Unit named sales, you can define the value for LDAP_SEARCH_BASE_DN
parameter as following:
LDAP_SEARCH_BASE_DN = ‘ou=sales,dc=example,dc=com'
This is an optional parameter. If you do not specify any value for LDAP_SEARCH_BASE_DN,
then the value for LDAP_BASE_DN will be considered for the same."
"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*."
+6 -6
View File
@@ -35,15 +35,15 @@ Click the *Definition* tab to continue.
Use the fields in the *Definition* tab to define the event trigger:
* Select a radio button in the *Enabled Status* field to specify a status for
the trigger: *Enable* *Disable*, *Replica* *Always*.
* Select a value from the drop down of *Trigger Enabled* field to specify a status
for the trigger: *Enable* *Disable*, *Replica* *Always*.
* Use the drop-down listbox next to *Trigger function* to specify an existing
function. A trigger function takes an empty argument list, and returns a
value of type event_trigger.
* Select a radio button in the *Events* field to specify when the event trigger
will fire: *DDL COMMAND START*, *DDL COMMAND END*, or *SQL DROP*.
* Use the *When* field to write a condition for the event trigger that must be
satisfied before the event trigger can execute.
* Select a value from the drop down of *Events* field to specify when the event
trigger will fire: *DDL COMMAND START*, *DDL COMMAND END*, or *SQL DROP*.
* Use the *When TAG in* field to enter filter values for TAG for which the trigger
will be executed. The values must be in single quotes separated by comma.
Click the *Security Labels* tab to continue.
+4
View File
@@ -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*
Executable → Regular
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 62 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 48 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Executable → Regular
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 29 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 45 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

After

Width:  |  Height:  |  Size: 185 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 127 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 100 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 135 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 135 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 77 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 142 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 KiB

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 89 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 87 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 247 KiB

After

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Executable → Regular
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 52 KiB

+25 -6
View File
@@ -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.
+4 -3
View File
@@ -67,9 +67,10 @@ thresholds; use the *Table* tab and the *Toast Table* tab to customize values
for the table and the associated toast table. To change the default values:
* Move the *Custom auto-vacuum?* switch to the *Yes* position to perform custom
maintenance on the materialized view.
* Move the *Enabled?* switch to the *Yes* position to select values in the
*Vacuum table*. Provide values for each row in the *Value* column.
maintenance on the materialized view and to select values in the
*Vacuum table*. The *Vacuum Table* provides default values for maintenance
operations.
* Changing *Autovacuum enabled?* to *Not set* will reset autovacuum_enabled.
Click the *Security* tab to continue.
+21 -6
View File
@@ -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
@@ -376,6 +381,18 @@ Query Tool window navigation:
:alt: Preferences dialog sql keyboard shortcuts section
:align: center
The Schema Diff Node
********************
Expand the *Schema Diff* node to specify your display preferences.
.. image:: images/preferences_schema_diff.png
:alt: Preferences schema diff
:align: center
Use the *Open in new browser tab* switch to indicate if you would like Schema Diff
to open in a new tab.
The Storage Node
****************
@@ -399,5 +416,3 @@ Use the fields on the *Options* panel to specify storage preferences.
* When the *Show hidden files and folders?* switch is set to *True*, the file
manager will display hidden files and folders.
+15 -20
View File
@@ -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
+1 -1
View File
@@ -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.
+4 -3
View File
@@ -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. | |
+----------------------+---------------------------------------------------------------------------------------------------+----------------+
+5
View File
@@ -11,6 +11,11 @@ notes for it.
.. toctree::
:maxdepth: 1
release_notes_4_22
release_notes_4_21
release_notes_4_20
release_notes_4_19
release_notes_4_18
release_notes_4_17
release_notes_4_16
release_notes_4_15
+43
View File
@@ -0,0 +1,43 @@
************
Version 4.18
************
Release date: 2020-02-06
This release contains a number of bug fixes and new features since the release of pgAdmin4 4.17.
New features
************
| `Issue #2554 <https://redmine.postgresql.org/issues/2554>`_ - Added support for a multi-level partitioned table.
| `Issue #3452 <https://redmine.postgresql.org/issues/3452>`_ - Added a Schema Diff tool to compare two schemas and generate a diff script.
| `Issue #4762 <https://redmine.postgresql.org/issues/4762>`_ - Allow screen-reader to read label & description of non-textable elements.
| `Issue #4763 <https://redmine.postgresql.org/issues/4763>`_ - Allow screen-reader to identify the alert errors.
| `Issue #4770 <https://redmine.postgresql.org/issues/4770>`_ - Added labels and titles after parsing and validating all the pgAdmin4 web pages for accessibility.
| `Issue #4993 <https://redmine.postgresql.org/issues/4993>`_ - Set input controls as read-only instead of disabled will allow tab navigation in the properties tab and also allow screen readers to read it.
Housekeeping
************
| `Issue #5049 <https://redmine.postgresql.org/issues/5049>`_ - Improve code coverage and API test cases for the CAST module.
| `Issue #5050 <https://redmine.postgresql.org/issues/5050>`_ - Improve code coverage and API test cases for the LANGUAGE module.
| `Issue #5071 <https://redmine.postgresql.org/issues/5071>`_ - Improve the test framework to run for multiple classes defined in a single file.
| `Issue #5072 <https://redmine.postgresql.org/issues/5072>`_ - Updated wcDocker package which includes aria-label accessibility improvements.
| `Issue #5096 <https://redmine.postgresql.org/issues/5096>`_ - Replace node-sass with sass for SCSS compilation.
Bug fixes
*********
| `Issue #3812 <https://redmine.postgresql.org/issues/3812>`_ - Ensure that path file name should not disappear when changing ext from the dropdown in file explorer dialog.
| `Issue #4410 <https://redmine.postgresql.org/issues/4410>`_ - Fixed an issue while editing char[] or character varying[] column from View/Edit data throwing an error.
| `Issue #4511 <https://redmine.postgresql.org/issues/4511>`_ - Fixed an issue where Grant wizard unable to handle multiple objects when the query string parameter exceeds its limit.
| `Issue #4601 <https://redmine.postgresql.org/issues/4601>`_ - Added tab navigation on close buttons for all the panels and create/properties dialog.
| `Issue #4827 <https://redmine.postgresql.org/issues/4827>`_ - Fix column resizable issue in the file explorer dialog.
| `Issue #5000 <https://redmine.postgresql.org/issues/5000>`_ - Logout the pgAdmin session when no user activity of mouse move, click or keypress.
| `Issue #5025 <https://redmine.postgresql.org/issues/5025>`_ - Fix an issue where setting STORAGE_DIR to empty should show all the volumes on Windows in server mode.
| `Issue #5065 <https://redmine.postgresql.org/issues/5065>`_ - Updated the incorrect icon used for the cast node on refresh.
| `Issue #5066 <https://redmine.postgresql.org/issues/5066>`_ - Fix an issue where refreshing a package results in the change in the object completely.
| `Issue #5074 <https://redmine.postgresql.org/issues/5074>`_ - Fix an issue where select, insert and update scripts on tables throwing an error.
| `Issue #5076 <https://redmine.postgresql.org/issues/5076>`_ - Ensure Postfix starts in the container, now it runs as non-root by default.
| `Issue #5116 <https://redmine.postgresql.org/issues/5116>`_ - Fixed an issue where Save Password control disappears after clicking on it while creating a server.
+37
View File
@@ -0,0 +1,37 @@
************
Version 4.19
************
Release date: 2020-03-05
This release contains a number of bug fixes and new features since the release of pgAdmin4 4.18.
New features
************
| `Issue #5154 <https://redmine.postgresql.org/issues/5154>`_ - Added accessibility support in AlertifyJS.
| `Issue #5170 <https://redmine.postgresql.org/issues/5170>`_ - Added Czech language support.
| `Issue #5179 <https://redmine.postgresql.org/issues/5179>`_ - Added Python 3.8 support.
Housekeeping
************
| `Issue #5088 <https://redmine.postgresql.org/issues/5088>`_ - Improve code coverage and API test cases for the Event Trigger module.
| `Issue #5133 <https://redmine.postgresql.org/issues/5133>`_ - Improvements in the UI for both default and dark themes.
| `Issue #5176 <https://redmine.postgresql.org/issues/5176>`_ - Enhance logging by tracking stdout and stderr of subprocess when log level set to DEBUG.
| `Issue #5185 <https://redmine.postgresql.org/issues/5185>`_ - Added option to override the class name of a label tag for select2 control.
Bug fixes
*********
| `Issue #4955 <https://redmine.postgresql.org/issues/4955>`_ - Changed the color of selected and hovered item for Select2 dropdown.
| `Issue #4996 <https://redmine.postgresql.org/issues/4996>`_ - Improve the style of the highlighted code after query execution for Dark mode.
| `Issue #5058 <https://redmine.postgresql.org/issues/5058>`_ - Ensure that AlertifyJS should not be visible as a title for alert dialog.
| `Issue #5077 <https://redmine.postgresql.org/issues/5077>`_ - Changed background pattern for geometry viewer to use #fff for all themes.
| `Issue #5101 <https://redmine.postgresql.org/issues/5101>`_ - Fix an issue where debugger not showing all arguments anymore after hitting SQL error while debugging.
| `Issue #5107 <https://redmine.postgresql.org/issues/5107>`_ - Set proper focus on tab navigation for file manager dialog.
| `Issue #5115 <https://redmine.postgresql.org/issues/5115>`_ - Fix an issue where command and statements were parsed incorrectly for Rules.
| `Issue #5142 <https://redmine.postgresql.org/issues/5142>`_ - Ensure that all the transactions should be canceled before closing the connections when a server is disconnected using pgAdmin.
| `Issue #5184 <https://redmine.postgresql.org/issues/5184>`_ - Fixed Firefox monospaced issue by updating the font to the latest version.
| `Issue #5214 <https://redmine.postgresql.org/issues/5214>`_ - Update Flask-SQLAlchemy and SQLAlchemy package which is not working on Windows with Python 3.8.
| `Issue #5215 <https://redmine.postgresql.org/issues/5215>`_ - Fix syntax error when changing the event type for the existing rule.
+32
View File
@@ -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.
+96
View File
@@ -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.
+54
View File
@@ -0,0 +1,54 @@
************
Version 4.22
************
Release date: 2020-05-28
This release contains a number of bug fixes and new features since the release of pgAdmin4 4.21.
New features
************
| `Issue #5452 <https://redmine.postgresql.org/issues/5452>`_ - Added connected pgAdmin user and connection name in the log file.
| `Issue #5489 <https://redmine.postgresql.org/issues/5489>`_ - Show the startup log as well as the server log in the runtime's log viewer.
Housekeeping
************
| `Issue #5255 <https://redmine.postgresql.org/issues/5255>`_ - Implement Selenium Grid to run multiple tests across different browsers, operating systems, and machines in parallel.
| `Issue #5333 <https://redmine.postgresql.org/issues/5333>`_ - Improve code coverage and API test cases for Indexes.
| `Issue #5334 <https://redmine.postgresql.org/issues/5334>`_ - Improve code coverage and API test cases for the Rules module.
| `Issue #5335 <https://redmine.postgresql.org/issues/5335>`_ - Improve code coverage and API test cases for Triggers and Compound Triggers.
| `Issue #5443 <https://redmine.postgresql.org/issues/5443>`_ - Remove support for Python 2.
| `Issue #5444 <https://redmine.postgresql.org/issues/5444>`_ - Cleanup Python detection in the runtime project file.
| `Issue #5455 <https://redmine.postgresql.org/issues/5455>`_ - Refactor pgAdmin4.py so it can be imported and is a lot more readable.
| `Issue #5493 <https://redmine.postgresql.org/issues/5493>`_ - Search object UI improvements.
| `Issue #5525 <https://redmine.postgresql.org/issues/5525>`_ - Cleanup and refactor the macOS build scripts.
| `Issue #5552 <https://redmine.postgresql.org/issues/5552>`_ - Update dependencies in the Docker container.
| `Issue #5553 <https://redmine.postgresql.org/issues/5553>`_ - Remove PG 9.4 utilities from the Docker container as it's now out of support.
Bug fixes
*********
| `Issue #3694 <https://redmine.postgresql.org/issues/3694>`_ - Gracefully informed the user that the database is already connected when they click on "Connect Database...".
| `Issue #4033 <https://redmine.postgresql.org/issues/4033>`_ - Fixed an issue where clicking on the cross button of the alert box on the login page is not working.
| `Issue #4099 <https://redmine.postgresql.org/issues/4099>`_ - Fixed the SQL help issue for EDB Postgres Advanced Server.
| `Issue #4223 <https://redmine.postgresql.org/issues/4223>`_ - Ensure that maintenance job should be worked properly for indexes under a materialized view.
| `Issue #4279 <https://redmine.postgresql.org/issues/4279>`_ - Ensure that file browse "home" button should point to $HOME rather than /.
| `Issue #4840 <https://redmine.postgresql.org/issues/4840>`_ - Ensure that 'With OID' option should be disabled while taking backup of database server version 12 and above.
| `Issue #5001 <https://redmine.postgresql.org/issues/5001>`_ - Fixed invalid literal issue when removing the connection limit for the existing role.
| `Issue #5052 <https://redmine.postgresql.org/issues/5052>`_ - Fixed internal server error when clicking on Triggers -> 'Enable All' for partitions.
| `Issue #5398 <https://redmine.postgresql.org/issues/5398>`_ - Fixed generated SQL issue for auto vacuum options.
| `Issue #5422 <https://redmine.postgresql.org/issues/5422>`_ - Ensure that the dependencies tab shows correct information for Synonyms.
| `Issue #5434 <https://redmine.postgresql.org/issues/5434>`_ - Fixed an issue where the newly added table is not alphabetically added to the tree.
| `Issue #5440 <https://redmine.postgresql.org/issues/5440>`_ - Fixed list sorting issue in the schema diff tool.
| `Issue #5449 <https://redmine.postgresql.org/issues/5449>`_ - Fixed an issue while comparing the two identical schemas using the schema diff tool.
| `Issue #5450 <https://redmine.postgresql.org/issues/5450>`_ - Fixed an issue when renaming the column not added in the proper order.
| `Issue #5466 <https://redmine.postgresql.org/issues/5466>`_ - Correct ipv4 "all interfaces" address in the container docs, per Frank Limpert.
| `Issue #5469 <https://redmine.postgresql.org/issues/5469>`_ - Fixed an issue where select2 hover is inconsistent for the SSL field in create server dialog.
| `Issue #5473 <https://redmine.postgresql.org/issues/5473>`_ - Fixed post-login redirect location when running in server mode under a non-default root.
| `Issue #5480 <https://redmine.postgresql.org/issues/5480>`_ - Fixed an issue where the background job creation fails if there is only a version-specific python binary available in PATH.
| `Issue #5481 <https://redmine.postgresql.org/issues/5481>`_ - Fixed data truncation issue when updating the data of type character with length.
| `Issue #5487 <https://redmine.postgresql.org/issues/5487>`_ - Fixed an issue where if LDAP_SEARCH_BASE_DN is not set then, the value for LDAP_BASE_DN will be considered.
| `Issue #5496 <https://redmine.postgresql.org/issues/5496>`_ - Fixed an issue where clicking on Select All button, not selecting all the options in pgAgent job scheduler.
| `Issue #5503 <https://redmine.postgresql.org/issues/5503>`_ - Clarify and correct the docs on enabling the pl/debugger plugin on the server.
| `Issue #5510 <https://redmine.postgresql.org/issues/5510>`_ - Fixed Unicode decode error 'utf-8' codec can't decode byte.
+136
View File
@@ -0,0 +1,136 @@
.. _schema_diff_feature:
********************
`Schema Diff`:index:
********************
**Schema Diff** is a feature that allows you to compare schema objects between
two database schemas. Use the *Tools* menu to access Schema Diff.
The Schema Diff feature allows you to:
* Compare and synchronize the database schemas (from source to target).
* Visualize the differences between database schemas.
* List the differences in SQL statement for target schema objects.
* Generate synchronization scripts.
**Note** - The source and target databases must be of the same major
version.
Click on *Schema Diff* under the *Tools* menu to open a selection panel. Choose
the source and target servers, databases, and schemas that will be
compared. After selecting the objects, click on the *Compare* button.
You can open multiple copies of *Schema Diff* in individual tabs
simultaneously. To close a copy of Schema Diff, click the *X* in the
upper-right hand corner of the tab bar.
.. image:: images/schema_diff_dialog.png
:alt: schema diff dialog
:align: center
Use the :ref:`Preferences <preferences>` dialog to specify if *Schema Diff*
should open in a new browser tab. Set *Open in new browser tab* option to true.
The *Schema Diff* panel is divided into two panels; an Object Comparison panel
and a DDL Comparison panel.
The Schema Diff Object Comparison Panel
========================================
In the object comparison panel, you can select the source and target servers
of the same major version, databases, and schemas to be compared. You can
select any server listed under the browser tree whether it is connected or
disconnected. If you select a server that is not connected then it will
prompt you for the password before using the server.
Next, select the databases that will be compared. The databases can be the
same or different (and within the same server or from different servers).
Lastly, select the source and target schemas which will be compared.
.. image:: images/schema_diff_compare_button.png
:alt: Schema diff compare button
:align: center
After you select servers, databases, and schemas, click on the
*Compare* button to obtain the *Comparison Result*.
.. image:: images/schema_diff_comparison_results.png
:alt: Schema diff comparison results
:align: center
Use the drop-down lists of Functions, Materialized Views, Tables,
Trigger Functions, Procedures, and Views to view the DDL statements of
all the schema objects.
In the upper-right hand corner of the object comparison panel is a *Filter*
option that you can use to filter the schema objects based on the
following comparison criteria:
* Identical – If the object is found in both schemas with the same SQL statement, then the comparison result is identical.
* Different – If the object is found in both schemas but have different SQL statements, then the comparison result is different.
* Source Only – If the object is found in source schema only and not in target schema, then the comparison result is source only.
* Target Only – If the object is found in target schema only and not in source schema, then the comparison result is target only.
.. image:: images/schema_diff_filter_option.png
:alt: Schema diff filter option
:align: center
Click on any of the schema objects in the object comparison panel to
display the DDL Statements of that object in the DDL Comparison panel.
Schema Diff DDL Comparison Panel
================================
The *DDL Comparison* panel displays three columns:
* The first column displays the DDL statement of the object from the source schema.
* The second column displays the DDL statement of the object from the target schema.
* The third column displays the difference in the SQL statement of the target schema object.
.. image:: images/schema_diff_DDL_comparison.png
:alt: Schema diff DDL comparison
:align: center
You can review the DDL statements of all the schema objects to
check for the differences in the SQL statements.
Also, you can generate the SQL script of the differences found in the
target schema object based on the SQL statement of the source schema
object. To generate the script, select the checkboxes of the schema
objects in the object comparison panel and then click on the *Generate Script*
button in the upper-right hand corner of the object comparison panel.
.. image:: images/schema_diff_generate_script.png
:alt: Schema diff generate script
:align: center
Select the schema objects and click on the *Generate Script*
button to open the *Query Tool* in a new tab, with the difference
in the SQL statement displayed in the *Query Editor*.
If you have clicked on the schema object to check the difference
generated in the *DDL Comparison* Panel, and you have not selected the
checkbox of the schema object, PEM will open the *Query Tool* in a new
tab, with the differences in the SQL statements displayed in the *Query Editor*.
You can also use the *Copy* button to copy the difference generated in
the *DDL Comparison* panel.
.. image:: images/schema_diff_generate_script_query_editor.png
:alt: Schema diff generate script query editor
:align: center
Apply the SQL Statement in the target schema to synchronize the schemas.
+37
View File
@@ -0,0 +1,37 @@
.. _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 currently. Examples are: abc,
%ab%, ab%c, %%%, etc.
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 click on the ellipsis appended to
the function and procedure names to see there arguments.
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>`.
+27 -2
View File
@@ -26,6 +26,8 @@ Use the fields in the *General* tab to identify the table:
drop-down listbox in the *Schema* field.
* Use the drop-down listbox in the *Tablespace* field to specify the tablespace
in which the table will be stored.
* Move the *Partitioned Table?* switch to the *Yes* in case you want to create a
partitioned table. Option is available for PostgreSQL 10 and above.
* Store notes about the table in the *Comment* field.
Click the *Columns* tab to continue.
@@ -393,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
@@ -449,6 +459,21 @@ icon (+) to add each partition:
* If partition type is Hash then *Modulus* and *Remainder* fields will be
enabled.
Users can create a partition and define them as a partitioned table. Click
the *Edit* icon to expand the properties of a partition.
Use the *Partition* tab to create that partition as a partitioned table.
* Move the *Partitioned Table?* switch to the *Yes* in case you want to create a
partitioned table.
* Select a partition type from the *Partition Type* selection box.
* Use the *Partition Keys* panel to define the partition keys.
View of multi level Partitioned Table in browser tree:
.. image:: images/table_partition_tree.png
:alt: Table dialog partition tree
:align: center
Click the *Parameter* tab to continue.
.. image:: images/table_parameter.png
@@ -460,10 +485,10 @@ thresholds; use the *Table* tab and the *Toast Table* tab to customize values
for the table and the associated toast table:
* Move the *Custom auto-vacuum?* switch to the *Yes* position to perform custom
maintenance on the table.
* Move the *Enabled?* switch to the *Yes* position to select values in the
maintenance on the table and to select values in the
*Vacuum table*. The *Vacuum Table* provides default values for maintenance
operations.
* Changing *Autovacuum enabled?* to *Not set* will reset autovacuum_enabled.
Provide a custom value in the *Value* column for each metric listed in the
*Label* column.
+3 -1
View File
@@ -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.
+22 -14
View File
@@ -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.
+383 -486
View File
File diff suppressed because it is too large. Load diff
+155
View File
@@ -0,0 +1,155 @@
This directory contains the build runner script for creating .DEB packages for
Debian and Ubuntu.
Supported platforms
===================
Debian 9 & 10
Ubuntu 16.04, 18.04, 19.04 & 19.10
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.
Building a repo
===============
An APT repo can be created by building DEBs for the required platforms, moving
them into the required directory structure, and then running a number of
commands to create the required metadata. The pgAdmin repos use the following
structure (which doesn't entirely follow the normal structure for APT, but
does seem to work well unlike other attempts):
<root>
bionic
dists
pgadmin4
InRelease
main
binary-all
Packages
Packages.gz
pgadmin4_4.21_all.deb
pgadmin4-web_4.21_all.deb
binary-amd64
Packages
Packages.gz
pgadmin4-desktop_4.21_amd64.deb
pgadmin4-server_4.21_amd64.deb
binary-i386
Packages
Packages.gz
Release
Release.gpg
Release.gz
buster
disco
eoan
focal
README
stretch
xenial
Note that only the first branches are shown above; other branches (e.g. for
buster, disco etc. follow the structure shown for bionic.
Technically there are actually multiple repos here, one for each OS release.
Note also that the binary-i386 directories do not contain any packages as we're
not building 32bit packages for Linux. The directories and package indexes are
present though, to prevent warnings being emitted on amd64 machines which are
configured to support 32bit packages as well.
In order to sign the repositories you need to import your signing private key
into the gnupg2 keystore, for example:
gpg --import signing_key.priv
Once the files are in the right structure, we need to run a number of commands
to generate the metadata, and sign the relevant files using GPG (in APT, we
sign the repository indexes rather than the packages themselves.
To create the metadata, first we create a config file for the apt-ftparchive
program in $HOME/aptftp.conf (without the start/end markers):
----------
APT::FTPArchive::Release {
Origin "pgAdmin Development Team";
Label "pgAdmin 4";
Suite "pgadmin4";
Architectures "amd64 all";
Components "main";
Description "pgAdmin 4 - Development Tools for PostgreSQL";
};
Default {
Packages::Compress ". gzip bzip2";
Sources::Compress ". gzip bzip2";
Contents::Compress ". gzip bzip2";
};
----------
Next, we create the package indexes. Run the following command for each OS
release to be included (in the example, we're using bionic):
for ARCH in all amd64 i386; do cd <root>/bionic && apt-ftparchive packages -c=$HOME/aptftp.conf dists/pgadmin4/main/binary-${ARCH} > dists/pgadmin4/main/binary-${ARCH}/Packages && gzip -k dists/pgadmin4/main/binary-${ARCH}/Packages; done
Now we need to create the release file for each OS release (again, using bionic
in the example:
cd <root>/bionic/dists/pgadmin4 && apt-ftparchive release -c=$HOME/aptftp.conf . > Release && gzip -k Release
Finally, we can sign the release files. Replace <key name> with the email
address on your signing key:
cd <root>/bionic/dists/pgadmin4 && gpg -u <key name> -bao Release.gpg Release
cd <root>/bionic/dists/pgadmin4 && gpg -u <key name> --clear-sign --output InRelease Release
Note that it is important to run each command in the correct directory (hence
the cd commands) to ensure the relative paths are created correctly in the
indexes.
Repository Configuration
========================
pgAdmin repo configurations live in /etc/apt/sources.list.d/pgadmin4.list. The
file can be created with a command such as:
sudo sh -c 'echo "deb https://server.company.com/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'
Assuming that <root> in the repository structure corresponds to
https://server.company.com/apt/ from the client's perspective.
If you have signed the repository, you'll also need to import the key on the
client. This is done as follows for the pgAdmin signing key; adjust the URL as
needed for your own:
curl http://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add
+108
View File
@@ -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"
+9
View File
@@ -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>
+29
View File
@@ -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 python3-wheel libpq-dev libffi-dev qt5-default nodejs yarn
+1 -1
View File
@@ -48,7 +48,7 @@ if [ ! -f /var/lib/pgadmin/pgadmin4.db ]; then
fi
# Start Postfix to handle password resets etc.
/usr/sbin/postfix start
sudo /usr/sbin/postfix start
# Get the session timeout from the pgAdmin config. We'll use this (in seconds)
# to define the Gunicorn worker timeout
+3
View File
@@ -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!
+161
View File
@@ -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
PGADMIN_PYTHON_DIR=/usr qmake-qt5
else
PGADMIN_PYTHON_DIR=/usr 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/"
}
+5
View File
@@ -0,0 +1,5 @@
HELP_PATH = '../../../share/docs/en_US/html/'
DEFAULT_BINARY_PATHS = {
'pg': '/usr/bin',
'ppas': ''
}
+10
View File
@@ -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;
+108
View File
@@ -0,0 +1,108 @@
#!/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 1> /dev/null
setsebool -P httpd_can_network_connect_db 1 1> /dev/null
semanage fcontext -a -t httpd_var_lib_t '/var/lib/pgadmin(/.*)?' 1> /dev/null
restorecon -R -v /var/lib/pgadmin 1> /dev/null
semanage fcontext -a -t httpd_log_t '/var/log/pgadmin(/.*)?' 1> /dev/null
restorecon -R -v /var/log/pgadmin 1> /dev/null
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."
echo "You can now start using pgAdmin 4 in web mode at http://127.0.0.1/pgadmin4"
fi;;
* )
exit 1;;
esac
fi
exit 0
+45
View File
@@ -0,0 +1,45 @@
Building pgAdmin4.dmg on Mac OS X
=================================
Required Packages (Either build the sources or get them from macports or
similar):
1. Python installation
- Python 3.4+ or above from https://www.python.org/
2. QT installation
- Qt 5 from http://www.qt.io/
3. PostgreSQL installation
- PostgreSQL 9.5 or above from http://www.postgresql.org/
Building:
1. If a value different from the default of /usr/local/python is required, set
the PGADMIN_PYTHON_DIR environment variable to the Python root installation
directory, e.g.
export PGADMIN_PYTHON_DIR=/opt/local
2. If a value different from the default of ~/Qt/5.13.2/clang_64, is required,
set the PGADMIN_QT_DIR environment variable to the QT root installation
directory, e.g.
export PGADMIN_QT_DIR=~/Qt/5.14.2/clang_64
3. If a value different from the default of /usr/local/pgsql is required, set
the PGADMIN_POSTGRES_DIR environment variable to the PostgreSQL installation
directory, e.g.
export PGADMIN_POSTGRES_DIR=/opt/local/pgsql
4. Copy framework.conf.in to framework.conf, and edit the values accordingly.
5. If you want to codesign the appbundle, copy codesign.conf.in to
codesign.conf and set the values accordingly.
6. To build, go to pgAdmin4 source root directory and execute "make appbundle".
This will create the python virtual environment and install all the required
python modules mentioned in the requirements file using pip, build the
runtime code and finally create the app bundle and the DMG in ./dist
directory.
-32
View File
@@ -1,32 +0,0 @@
Building pgAdmin4.dmg on Mac OS X
=================================
Required Packages (Either build the sources or get them from macports or similar):
1. Python installation
- Python 2.7 or 3.4+ or above from https://www.python.org/
2. QT installation
- Qt 4 or 5 from http://www.qt.io/
3. PostgreSQL installation
- PostgreSQL 9.1 or above from http://www.postgresql.org/
Building:
1. Set the PYTHON_HOME environment variable to the Python root installation directory, e.g.
export PYTHON_HOME=/System/Library/Frameworks/Python.framework/Versions/2.7
2. Set the QTDIR environment variable to the QT root installation directory, e.g.
export QTDIR=~/Qt/5.5/clang_64
3. Set the PGDIR environment variable to the PostgreSQL installation directory, e.g.
export PGDIR=/usr/local/pgsql
4. To build, go to pgAdmin4 source root directory and execute "make appbundle". This will
create the python virtual environment and install all the required python modules mentioned in the
requirements file using pip, build the runtime code and finally create the app bundle and the DMG
in ./dist directory
+382
View File
@@ -0,0 +1,382 @@
_setup_env() {
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/^ //'`
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
BUNDLE_DIR="${BUILD_ROOT}/${APP_NAME}.app"
}
_cleanup() {
echo Cleaning up the old environment and app bundle...
rm -rf ${SOURCE_DIR}/runtime/*.app
rm -rf ${BUILD_ROOT}
rm -f ${DIST_ROOT}/*.dmg
}
_create_venv() {
PATH=${PGADMIN_POSTGRES_DIR}/bin:${PATH}
LD_LIBRARY_PATH=${PGADMIN_POSTGRES_DIR}/lib:${LD_LIBRARY_PATH}
test -d ${BUILD_ROOT} || mkdir ${BUILD_ROOT}
cd ${BUILD_ROOT}
${PYTHON_EXE} -m venv --copies venv
source venv/bin/activate
pip install --no-cache-dir --no-binary psycopg2 -r ${SOURCE_DIR}/requirements.txt
# Figure the source path for use when completing the venv
SOURCE_PYMODULES_PATH=$(dirname $("${PYTHON_EXE}" -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"))
# Figure the target path for use when completing the venv
# Use "python" here as we want the venv path
TARGET_PYMODULES_PATH=$(dirname $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"))
# Copy in the additional system python modules
cp -R ${SOURCE_PYMODULES_PATH}/* "${TARGET_PYMODULES_PATH}/"
# Link the python<version> directory to python so that the private environment path is found by the application.
ln -s "$(basename ${TARGET_PYMODULES_PATH})" "${TARGET_PYMODULES_PATH}/../python"
# Remove tests
find venv -name "test" -type d -print0 | xargs -0 rm -rf
find venv -name "tests" -type d -print0 | xargs -0 rm -rf
}
_build_runtime() {
cd ${SOURCE_DIR}/runtime
if [ -f Makefile ]; then
make clean
fi
${QMAKE}
make
cp -r pgAdmin4.app "${BUNDLE_DIR}"
}
_build_docs() {
cd ${SOURCE_DIR}/docs/en_US
test -d "${BUNDLE_DIR}/Contents/Resources/docs/en_US" || mkdir -p "${BUNDLE_DIR}/Contents/Resources/docs/en_US"
cp -r _build/html "${BUNDLE_DIR}/Contents/Resources/docs/en_US/"
}
_complete_bundle() {
cd ${SCRIPT_DIR}
# Copy the binary utilities into place
mkdir -p "${BUNDLE_DIR}/Contents/SharedSupport/"
cp "${PGADMIN_POSTGRES_DIR}/bin/pg_dump" "${BUNDLE_DIR}/Contents/SharedSupport/"
cp "${PGADMIN_POSTGRES_DIR}/bin/pg_dumpall" "${BUNDLE_DIR}/Contents/SharedSupport/"
cp "${PGADMIN_POSTGRES_DIR}/bin/pg_restore" "${BUNDLE_DIR}/Contents/SharedSupport/"
cp "${PGADMIN_POSTGRES_DIR}/bin/psql" "${BUNDLE_DIR}/Contents/SharedSupport/"
# Replace the place holders with the current version
sed -e "s/PGADMIN_LONG_VERSION/${APP_LONG_VERSION}/g" -e "s/PGADMIN_SHORT_VERSION/${APP_SHORT_VERSION}/g" pgadmin.Info.plist.in > pgadmin.Info.plist
# copy Python private environment to app bundle
cp -PR ${BUILD_ROOT}/venv "${BUNDLE_DIR}/Contents/Resources/"
# Remove any TCL-related files that may cause us problems
find "${BUNDLE_DIR}/Contents/Resources/venv/" -name "_tkinter*" -print0 | xargs -0 rm -f
test -d "${BUNDLE_DIR}/Contents/Resources" || mkdir -p "${BUNDLE_DIR}/Contents/Resources"
# Create qt.conf so that app knows where the Plugins are present
cat >> "${BUNDLE_DIR}/Contents/Resources/qt.conf" << EOF
[Paths]
Plugins = PlugIns
EOF
test -d "${BUNDLE_DIR}/Contents/Frameworks" || mkdir -p "${BUNDLE_DIR}/Contents/Frameworks"
test -d "${BUNDLE_DIR}/Contents/PlugIns/platforms" || mkdir -p "${BUNDLE_DIR}/Contents/PlugIns/platforms"
test -d "${BUNDLE_DIR}/Contents/PlugIns/imageformats" || mkdir -p "${BUNDLE_DIR}/Contents/PlugIns/imageformats"
cp -f ${PGADMIN_QT_DIR}/plugins/platforms/libqcocoa.dylib "${BUNDLE_DIR}/Contents/PlugIns/platforms"
cp -f ${PGADMIN_QT_DIR}/plugins/imageformats/libqsvg.dylib "${BUNDLE_DIR}/Contents/PlugIns/imageformats"
cp -f ${PGADMIN_POSTGRES_DIR}/lib/libpq.5.dylib "${BUNDLE_DIR}/Contents/Frameworks"
local todo todo_old fw_relpath lib lib_bn
pushd "${BUNDLE_DIR}" > /dev/null
# We skip nested apps here - those are treated specially
todo=$(file `find ./ -perm +0111 ! -type d ! -path "*.app/*" ! -name "*.app"` | grep -E "Mach-O 64-bit" | awk -F ':| ' '{ORS=" "; print $1}')
echo "Found executables: ${todo}"
while test "${todo}" != ""; do
todo_old=${todo} ;
todo="" ;
for todo_obj in ${todo_old}; do
echo "Post-processing: ${todo_obj}"
# Figure out the relative path from todo_obj to Contents/Frameworks
fw_relpath=$(echo "${todo_obj}" | sed -n 's|^\(\.//*\)\(\([^/][^/]*/\)*\)[^/][^/]*$|\2|gp' | sed -n 's|[^/][^/]*/|../|gp')"Contents/Frameworks"
fw_relpath_old=${fw_relpath}
# Find all libraries $todo_obj depends on, but skip system libraries
for lib in $(otool -L ${todo_obj} | grep "Qt\|dylib\|Frameworks\|PlugIns" | grep -v ":" | sed 's/(.*//' | egrep -v '(/usr/lib)|(/System)|@executable_path@'); 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}"
if [ "$(basename ${todo_obj})" = "${lib}" ]; then
lib_loc="$(dirname ${todo_obj})"
qtfw_path=$(echo ${lib_loc} | sed 's/Contents\/Frameworks\///')
fi
elif echo ${lib} | grep "Python" > /dev/null; then
pyfw_path="$(dirname ${lib} | sed 's|.*\(Python.*framework\)|\1|')"
lib_loc="Contents/Frameworks/${pyfw_path}"
if [ "$(basename ${todo_obj})" = "${lib}" ]; then
lib_loc="$(dirname ${todo_obj})"
pyfw_path=$(echo ${lib_loc} | sed 's/Contents\/Frameworks\///')
fi
else
lib_loc="Contents/Frameworks"
fi
lib_bn="$(basename "${lib}")" ;
if ! test -f "${lib_loc}/${lib_bn}"; then
target_file=""
target_path=""
echo "Adding symlink: ${lib_bn} (because of: ${todo_obj})"
# Copy the QT and Python framework
if echo ${lib} | grep Qt > /dev/null ; then
test -d ${lib_loc} || mkdir -p ${lib_loc}
echo Copying -R ${PGADMIN_QT_DIR}/lib/${qtfw_path}/${lib_bn} to ${lib_loc}/
cp ${PGADMIN_QT_DIR}/lib/${qtfw_path}/${lib_bn} ${lib_loc}/
elif echo ${lib} | grep Python > /dev/null ; then
test -d ${lib_loc} || mkdir -p ${lib_loc}
cp -R "${lib}" "${lib_loc}/${lib_bn}"
else
cp -R "${lib}" "${lib_loc}/${lib_bn}"
fi
if ! test -L "${lib_loc}/${lib_bn}"; then
chmod 755 "${lib_loc}/${lib_bn}"
else
target_file=$(readlink "${lib}")
target_path=$(dirname "${lib}")/${target_file}
echo "Adding symlink target: ${target_path}"
cp "${target_path}" "${lib_loc}/${target_file}"
chmod 755 "${lib_loc}/${target_file}"
fi
echo "Rewriting ID in ${lib_loc}/${lib_bn} to ${lib_bn}"
install_name_tool -id "${lib_bn}" "${lib_loc}/${lib_bn}"
todo="${todo} ./${lib_loc}/${lib_bn}"
fi
if echo ${lib} | grep Qt > /dev/null ; then
fw_relpath="${fw_relpath}/${qtfw_path}"
fi
if echo ${lib} | grep Python > /dev/null ; then
fw_relpath="${fw_relpath}/${pyfw_path}"
fi
chmod +w ${todo_obj}
echo "Rewriting library ${lib} to @loader_path/${fw_relpath}/${lib_bn} in ${todo_obj}"
install_name_tool -change "${lib}" "@loader_path/${fw_relpath}/${lib_bn}" "${todo_obj}"
install_name_tool -change "${target_path}" "@loader_path/${fw_relpath}/${target_file}" "${todo_obj}"
fw_relpath="${fw_relpath_old}"
done
done
done
# Fix the rpaths for psycopg module
find "${BUNDLE_DIR}/Contents/Resources/venv/" -name _psycopg.so -print0 | xargs -0 install_name_tool -change libpq.5.dylib @loader_path/../../../../../../Frameworks/libpq.5.dylib
find "${BUNDLE_DIR}/Contents/Resources/venv/" -name _psycopg.so -print0 | xargs -0 install_name_tool -change libssl.1.0.0.dylib @loader_path/../../../../../../Frameworks/libssl.1.0.0.dylib
find "${BUNDLE_DIR}/Contents/Resources/venv/" -name _psycopg.so -print0 | xargs -0 install_name_tool -change libcrypto.1.0.0.dylib @loader_path/../../../../../../Frameworks/libcrypto.1.0.0.dylib
echo "App completed: ${BUNDLE_DIR}"
popd > /dev/null
pushd ${SOURCE_DIR}/web > /dev/null
yarn install
yarn run bundle
curl https://curl.haxx.se/ca/cacert.pem -o cacert.pem -s
popd > /dev/null
# copy the web directory to the bundle as it is required by runtime
cp -r ${SOURCE_DIR}/web "${BUNDLE_DIR}/Contents/Resources/"
cd "${BUNDLE_DIR}/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 -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
echo "DEFAULT_BINARY_PATHS = {" >> config_distro.py
echo " 'pg': '\$DIR/../../SharedSupport'," >> config_distro.py
echo " 'ppas': ''" >> config_distro.py
echo "}" >> config_distro.py
# Remove the .pyc files if any
find "${BUNDLE_DIR}" -name "*.pyc" -print0 | xargs -0 rm -f
}
_framework_config() {
# Get the config
source ${SCRIPT_DIR}/framework.conf
echo Reorganising the framework structure...
# Create "Current" and "Current/Resources" inside each of the framework dirs
find "${BUNDLE_DIR}/Contents/Frameworks"/*framework -type d -name "Versions" | while read -r framework_dir; do
pushd "${framework_dir}" > /dev/null
# Create framework 'Current' soft link
VERSION_NUMBER=`ls -1`
ln -s ${VERSION_NUMBER} Current
# Create "Resources" subdirectory
if [ ! -d Current/Resources ]; then
mkdir Current/Resources
fi
popd > /dev/null
done
# Stuff for Qt framework files only
find "${BUNDLE_DIR}/Contents/Frameworks" -type d -name "Qt*framework" | while read -r framework_dir; do
pushd "${framework_dir}" > /dev/null
# Create soft link to the framework binary
ln -s Versions/Current/Qt*
# Create soft link to the framework Resources dir
ln -s Versions/Current/Resources
# Create the Info.plist files
MYNAME=`ls -1 Qt*`
if [ -f Resources/Info.plist ]; then
chmod +w Resources/Info.plist
fi
sed 's/__SHORT_VERSION__/${QT_SHORT_VERSION}/' "${SCRIPT_DIR}/Info.plist-template_Qt5" | sed 's/__FULL_VERSION__/${QT_FULL_VERSION}/' | sed "s/__FRAMEWORK_NAME__/${MYNAME}/" > "Resources/Info.plist"
popd > /dev/null
done
# Same thing, but specific to the Python framework dir
find "${BUNDLE_DIR}/Contents/Frameworks" -type d -name "P*framework" | while read -r framework_dir; do
pushd "${framework_dir}" > /dev/null
# Create soft link to the framework binary
ln -s Versions/Current/Py*
# Create soft link to the framework Resources dir
ln -s Versions/Current/Resources
# Create the Info.plist file
MYNAME=`ls -1 Py*`
sed 's/__SHORT_VERSION__/${PYTHON_SHORT_VERSION}/' "${SCRIPT_DIR}/Info.plist-template_Python" | sed 's/__FULL_VERSION__/${PYTHON_FULL_VERSION}/' | sed "s/__FRAMEWORK_NAME__/${MYNAME}/" > "Resources/Info.plist"
popd > /dev/null
done
}
_codesign_binaries() {
if [ ${CODESIGN} -eq 0 ]; then
return
fi
if [ -z "${DEVELOPER_ID}" ] ; then
echo "Developer ID Application not found in codesign.conf" >&2
exit 1
fi
if [ -z "${DEVELOPER_BUNDLE_ID}" ]; then
echo "Developer Bundle Identifier not found in codesign.conf" >&2
fi
echo Signing ${BUNDLE_DIR} binaries...
IFS=$'\n'
for i in $(find "${BUNDLE_DIR}" -type f -perm +111 -exec file "{}" \; | grep -E "Mach-O executable|Mach-O 64-bit executable|Mach-O 64-bit bundle" | awk -F":| \\\(" '{print $1}' | uniq)
do
codesign --deep --force --verify --verbose --timestamp --options runtime -i "${DEVELOPER_BUNDLE_ID}" --sign "${DEVELOPER_ID}" "$i"
done
echo Signing ${BUNDLE_DIR} libraries...
for i in $(find "${BUNDLE_DIR}" -type f -name "*.dylib*")
do
codesign --deep --force --verify --verbose --timestamp --options runtime -i "${DEVELOPER_BUNDLE_ID}" --sign "${DEVELOPER_ID}" "$i"
done
}
_codesign_bundle() {
if [ ${CODESIGN} -eq 0 ]; then
return
fi
# Sign the .app
echo Signing ${BUNDLE_DIR}...
codesign --deep --force --verify --verbose --timestamp --options runtime -i "${DEVELOPER_BUNDLE_ID}" --sign "${DEVELOPER_ID}" "${BUNDLE_DIR}"
# Verify it worked
echo Verifying the signature...
codesign --verify --verbose --deep --force "${BUNDLE_DIR}"
echo ${BUNDLE_DIR} successfully signed.
}
_create_dmg() {
# move to the directory where we want to create the DMG
test -d ${DIST_ROOT} || mkdir ${DIST_ROOT}
cd ${DIST_ROOT}
DMG_LICENCE=./../pkg/mac/licence.rtf
DMG_VOLUME_NAME=${APP_NAME}
DMG_NAME=`echo ${DMG_VOLUME_NAME} | sed 's/ //g' | awk '{print tolower($0)}'`
DMG_IMAGE=${DMG_NAME}-${APP_LONG_VERSION}.dmg
DMG_DIR=./${DMG_IMAGE}.src
if test -e "${DMG_DIR}"; then
echo "Directory ${DMG_DIR} already exists. Please delete it manually." >&2
exit 1
fi
echo "Cleaning up"
rm -f "${DMG_IMAGE}"
mkdir "${DMG_DIR}"
echo "Copying data into temporary directory"
cp -R "${BUNDLE_DIR}" "${DMG_DIR}"
echo "Creating image"
hdiutil create -quiet -srcfolder "$DMG_DIR" -fs HFS+ -format UDZO -volname "${DMG_VOLUME_NAME}" -ov "${DMG_IMAGE}"
rm -rf "${DMG_DIR}"
echo Attaching License to image...
python ${SCRIPT_DIR}/dmg-license.py "${DMG_IMAGE}" "${DMG_LICENCE}" -c bz2
}
_codesign_dmg() {
if [ ${CODESIGN} -eq 0 ]; then
return
fi
DMG_VOLUME_NAME=${APP_NAME}
DMG_NAME=`echo ${DMG_VOLUME_NAME} | sed 's/ //g' | awk '{print tolower($0)}'`
DMG_IMAGE=${DIST_ROOT}/${DMG_NAME}-${APP_LONG_VERSION}.dmg
if ! test -f "${DMG_IMAGE}" ; then
echo "${DMG_IMAGE} is no disk image!" >&2
exit 1
fi
# Sign the .app
echo Signing ${DMG_IMAGE}...
codesign --deep --force --verify --verbose --timestamp --options runtime -i "${DEVELOPER_BUNDLE_ID}" --sign "${DEVELOPER_ID}" "${DMG_IMAGE}"
# Verify it worked
echo Verifying the signature...
codesign --verify --verbose --force "${DMG_IMAGE}"
echo ${DMG_IMAGE} successfully signed.
}
+45 -250
View File
@@ -2,13 +2,19 @@
# Build script to create Mac App Bundle and DMG for pgAdmin4 runtime
export WD=$(cd `dirname $0` && pwd)
export SOURCEDIR=${WD}/../..
export BUILDROOT=${WD}/../../mac-build
export DISTROOT=${WD}/../../dist
export VIRTUALENV=venv
# Exit when any command fails
set -e -E
if [ ! -f ${SOURCEDIR}/pkg/mac/framework.conf ]; then
# 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
SCRIPT_DIR=$(cd `dirname $0` && pwd)
SOURCE_DIR=$(realpath ${SCRIPT_DIR}/../..)
BUILD_ROOT=$(realpath ${SCRIPT_DIR}/../..)/mac-build
DIST_ROOT=$(realpath ${SCRIPT_DIR}/../..)/dist
if [ ! -f ${SCRIPT_DIR}/framework.conf ]; then
echo
echo "Error: pkg/mac/framework.conf not found!"
echo "Copy pkg/mac/framework.conf.in to pkg/mac/framework.conf and edit as required for the current system."
@@ -16,272 +22,61 @@ if [ ! -f ${SOURCEDIR}/pkg/mac/framework.conf ]; then
exit 1
fi
export SYSTEM_PYTHON=0
if [ "x${PYTHON_HOME}" == "x" ]; then
echo "PYTHON_HOME not set. Setting it to default"
export PYTHON_HOME=/System/Library/Frameworks/Python.framework/Versions/2.7
export PYTHON_VERSION=27
export SYSTEM_PYTHON=1
CODESIGN=1
if [ ! -f ${SCRIPT_DIR}/codesign.conf ]; then
echo
echo "******************************************************************"
echo "* ${SCRIPT_DIR}/codesign.conf not found. NOT signing the binaries."
echo "******************************************************************"
echo
CODESIGN=0
sleep 5
else
source ${SCRIPT_DIR}/codesign.conf
fi
if [ "x${PGADMIN_PYTHON_DIR}" == "x" ]; then
echo "PGADMIN_PYTHON_DIR not set. Setting it to the default: /usr/local/python"
export PGADMIN_PYTHON_DIR=/usr/local/python
fi
PYTHON_EXE=${PGADMIN_PYTHON_DIR}/bin/python3
# Check if Python is working and calculate PYTHON_VERSION
if ${PYTHON_HOME}/bin/python2 -V > /dev/null 2>&1; then
export PYTHON_VERSION=`${PYTHON_HOME}/bin/python2 -V 2>&1 | awk '{print $2}' | cut -d"." -f1-2 | sed 's/\.//'`
elif ${PYTHON_HOME}/bin/python3 -V > /dev/null 2>&1; then
export PYTHON_VERSION=`${PYTHON_HOME}/bin/python3 -V 2>&1 | awk '{print $2}' | cut -d"." -f1-2 | sed 's/\.//'`
if ${PYTHON_EXE} -V > /dev/null 2>&1; then
PYTHON_VERSION=`${PYTHON_EXE} -V 2>&1 | awk '{print $2}' | cut -d"." -f1-2 | sed 's/\.//'`
else
echo "Error: Python installation missing!"
exit 1
fi
if [ "${PYTHON_VERSION}" -gt "37" -a "${PYTHON_VERSION}" -lt "27" ]; then
echo "Python version not supported"
if [ "${PYTHON_VERSION}" -gt "38" ] && [ "${PYTHON_VERSION}" -lt "34" ]; then
echo "Python version not supported."
exit 1
fi
if [ "${PYTHON_VERSION}" -ge "30" ]; then
export PYTHON=${PYTHON_HOME}/bin/python3
export PIP=pip3
else
export PYTHON=${PYTHON_HOME}/bin/python2
export PIP=pip
if [ "x${PGADMIN_QT_DIR}" == "x" ]; then
echo "PGADMIN_QT_DIR not set. Setting it to the default: ~/Qt/5.13.2/clang_64"
export PGADMIN_QT_DIR=~/Qt/5.13.2/clang_64
fi
if [ "x${QTDIR}" == "x" ]; then
echo "QTDIR not set. Setting it to default"
export QTDIR=~/Qt/5.8/clang_64
fi
export QMAKE=${QTDIR}/bin/qmake
QMAKE=${PGADMIN_QT_DIR}/bin/qmake
if ! ${QMAKE} --version > /dev/null 2>&1; then
echo "Error: qmake not found. QT installation is not present or incomplete."
exit 1
fi
if [ "x${PGDIR}" == "x" ]; then
echo "PGDIR not set. Setting it to default"
export PGDIR=/usr/local/pgsql
if [ "x${PGADMIN_POSTGRES_DIR}" == "x" ]; then
echo "PGADMIN_POSTGRES_DIR not set. Setting it to the default: /usr/local/pgsql"
export PGADMIN_POSTGRES_DIR=/usr/local/pgsql
fi
_get_version() {
export APP_RELEASE=`grep "^APP_RELEASE" web/config.py | cut -d"=" -f2 | sed 's/ //g'`
export APP_REVISION=`grep "^APP_REVISION" web/config.py | cut -d"=" -f2 | sed 's/ //g'`
export APP_NAME=`grep "^APP_NAME" web/config.py | cut -d"=" -f2 | sed "s/'//g" | sed 's/^ //'`
export APP_BUNDLE_NAME=${APP_NAME}.app
export APP_LONG_VERSION=${APP_RELEASE}.${APP_REVISION}
export APP_SHORT_VERSION=`echo ${APP_LONG_VERSION} | cut -d . -f1,2`
export APP_SUFFIX=`grep "^APP_SUFFIX" web/config.py | cut -d"=" -f2 | sed 's/ //g' | sed "s/'//g"`
if [ ! -z ${APP_SUFFIX} ]; then
export APP_LONG_VERSION=${APP_LONG_VERSION}-${APP_SUFFIX}
fi
}
source ${SCRIPT_DIR}/build-functions.sh
_cleanup() {
echo "Cleaning up the old environment and app bundle"
rm -rf ${SOURCEDIR}/runtime/pgAdmin4.app
rm -rf ${BUILDROOT}
rm -f ${DISTROOT}/pgadmin4*.dmg
}
_create_python_virtualenv() {
export PATH=${PGDIR}/bin:${PATH}
export LD_LIBRARY_PATH=${PGDIR}/lib:${LD_LIBRARY_PATH}
test -d ${BUILDROOT} || mkdir ${BUILDROOT} || exit 1
cd ${BUILDROOT}
if [ ${SYSTEM_PYTHON} -eq 1 ]; then
test -d ${VIRTUALENV} || virtualenv -p ${PYTHON} ${VIRTUALENV} || exit 1
else
test -d ${VIRTUALENV} || virtualenv -p ${PYTHON} --always-copy ${VIRTUALENV} || exit 1
fi
source ${VIRTUALENV}/bin/activate
${PIP} install --no-cache-dir --no-binary psycopg2 -r ${SOURCEDIR}/requirements.txt || { echo PIP install failed. Please resolve the issue and rerun the script; exit 1; }
# Figure out some paths for use when completing the venv
# Use "python" here as we want the venv path
export PYMODULES_PATH=`python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"`
export DIR_PYMODULES_PATH=`dirname ${PYMODULES_PATH}`
# Use $PYTHON here as we want the system path
export PYSYSLIB_PATH=`${PYTHON} -c "import sys; print('%s/lib/python%d.%.d' % (sys.prefix, sys.version_info.major, sys.version_info.minor))"`
# 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
if [ ${SYSTEM_PYTHON} -eq 1 ]; then
ln -s ${FULLPATH} ${FILE}
else
cp ${FULLPATH} ${FILE}
fi
fi
done
# Paths
for FULLPATH in ${PYSYSLIB_PATH}/*/; do
FULLPATH=${FULLPATH%*/}
FILE=${FULLPATH##*/}
if [ ! -e ${FILE} ]; then
if [ ${SYSTEM_PYTHON} -eq 1 ]; then
ln -s ${FULLPATH} ${FILE}
else
cp -R ${FULLPATH} ${FILE}
fi
fi
done
# Remove tests
cd site-packages
find . -name "test" -type d -exec rm -rf "{}" \;
find . -name "tests" -type d -exec 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() {
_create_python_virtualenv || exit 1
cd ${SOURCEDIR}/runtime
make clean
${QMAKE} || { echo qmake failed; exit 1; }
make || { echo make failed; exit 1; }
cp -r pgAdmin4.app "${BUILDROOT}/${APP_BUNDLE_NAME}"
}
_build_doc() {
cd ${SOURCEDIR}/docs/en_US
test -d "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/Resources" || "mkdir -p ${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/Resources"
test -d "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/Resources/docs/en_US" || mkdir -p "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/Resources/docs/en_US"
cp -r _build/html "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/Resources/docs/en_US/" || exit 1
}
_complete_bundle() {
cd ${SOURCEDIR}/pkg/mac
# Copy the binary utilities into place
mkdir -p "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/SharedSupport/" || exit 1
cp "${PGDIR}/bin/pg_dump" "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/SharedSupport/" || exit 1
cp "${PGDIR}/bin/pg_dumpall" "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/SharedSupport/" || exit 1
cp "${PGDIR}/bin/pg_restore" "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/SharedSupport/" || exit 1
cp "${PGDIR}/bin/psql" "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/SharedSupport/" || exit 1
# Replace the place holders with the current version
sed -e "s/PGADMIN_LONG_VERSION/${APP_LONG_VERSION}/g" -e "s/PGADMIN_SHORT_VERSION/${APP_SHORT_VERSION}/g" pgadmin.Info.plist.in > pgadmin.Info.plist
# copy Python private environment to app bundle
cp -PR ${BUILDROOT}/${VIRTUALENV} "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/Resources/" || exit 1
if [ ${SYSTEM_PYTHON} -eq 1 ]; then
# remove the python bin and include from app bundle as it is not needed
rm -rf "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/Resources/${VIRTUALENV}/bin" "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/Resources/${VIRTUALENV}/include"
rm -rf "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/Resources/${VIRTUALENV}/.Python"
fi
# Remove any TCL-related files that may cause us problems
find "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/Resources/${VIRTUALENV}/" -name "_tkinter*" -exec 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; }
pushd ${SOURCEDIR}/web
yarn install || exit 1
yarn run bundle || exit 1
curl https://curl.haxx.se/ca/cacert.pem -o cacert.pem -s || { echo Failed to download cacert.pem; exit 1; }
popd
# copy the web directory to the bundle as it is required by runtime
cp -r ${SOURCEDIR}/web "${BUILDROOT}/${APP_BUNDLE_NAME}/Contents/Resources/" || exit 1
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 "{}" \;
echo "SERVER_MODE = False" > config_distro.py
echo "HELP_PATH = '../../../docs/en_US/html/'" >> config_distro.py
echo "DEFAULT_BINARY_PATHS = {" >> config_distro.py
echo " 'pg': '\$DIR/../../SharedSupport'," >> config_distro.py
echo " 'ppas': ''" >> config_distro.py
echo "}" >> config_distro.py
# Remove the .pyc files if any
cd "${BUILDROOT}/${APP_BUNDLE_NAME}"
find . -name *.pyc | xargs rm -f
}
_framework_config() {
cd ${SOURCEDIR}/pkg/mac
./framework-config.sh "${BUILDROOT}/${APP_BUNDLE_NAME}" || { echo "framework-config.sh failed"; exit 1; }
}
_codesign_binaries() {
cd ${SOURCEDIR}/pkg/mac
if [ ! -f codesign.conf ]; then
echo
echo "******************************************************************"
echo "* codesign.conf not found. NOT signing the binaries."
echo "******************************************************************"
echo
sleep 5
return
fi
./codesign-binaries.sh "${BUILDROOT}/${APP_BUNDLE_NAME}" || { echo codesign-binaries.sh failed; exit 1; }
}
_codesign_bundle() {
cd ${SOURCEDIR}/pkg/mac
if [ ! -f codesign.conf ]; then
echo
echo "******************************************************************"
echo "* codesign.conf not found. NOT signing the bundle."
echo "******************************************************************"
echo
sleep 5
return
fi
./codesign-bundle.sh "${BUILDROOT}/${APP_BUNDLE_NAME}" || { echo codesign-bundle.sh failed; exit 1; }
}
_create_dmg() {
cd ${SOURCEDIR}
./pkg/mac/create-dmg.sh || { echo create-dmg.sh failed; exit 1; }
# Clean the mac-build/ on successful build
rm -rf ${BUILDROOT}/*
}
_codesign_dmg() {
cd ${SOURCEDIR}/pkg/mac
if [ ! -f codesign.conf ]; then
echo
echo "******************************************************************"
echo "* codesign.conf not found. NOT signing the disk image."
echo "******************************************************************"
echo
sleep 5
return
fi
./codesign-dmg.sh || { echo codesign-bundle.sh failed; exit 1; }
}
_get_version || { echo Could not get versioning; exit 1; }
_setup_env
_cleanup
_build_runtime || { echo Runtime build failed; exit 1; }
_build_doc
_create_venv
_build_runtime
_build_docs
_complete_bundle
_framework_config
_codesign_binaries
-37
View File
@@ -1,37 +0,0 @@
#!/bin/sh
BUNDLE="$1"
if ! test -d "${BUNDLE}" ; then
echo "${BUNDLE} is no bundle!" >&2
exit 1
fi
# Get the config
source codesign.conf
if [ -z "${DEVELOPER_ID}" ] ; then
echo "Developer ID Application not found in codesign.conf" >&2
exit 1
fi
if [ -z "${DEVELOPER_BUNDLE_ID}" ]; then
echo "Developer Bundle Identifier not found in codesign.conf" >&2
fi
echo Signing ${BUNDLE} binaries
IFS=$'\n'
for i in $(find "${BUNDLE}" -type f)
do
file "${i}" | grep -E "Mach-O executable|Mach-O 64-bit executable|Mach-O 64-bit bundle"
if [ $? -eq 0 ] ; then
codesign --deep -f -i "${DEVELOPER_BUNDLE_ID}" -s "${DEVELOPER_ID}" --options runtime ${i}
fi
done
echo Signing ${BUNDLE} libraries
for i in $(find "${BUNDLE}" -type f -name "*.dylib*")
do
codesign --deep -f -i "${DEVELOPER_BUNDLE_ID}" -s "${DEVELOPER_ID}" --options runtime ${i}
done
-26
View File
@@ -1,26 +0,0 @@
#!/bin/sh
BUNDLE="$1"
if ! test -d "${BUNDLE}" ; then
echo "${BUNDLE} is no bundle!" >&2
exit 1
fi
# Get the config
source codesign.conf
# Sign the .app
echo Signing ${BUNDLE}
codesign --sign "${DEVELOPER_ID}" --verbose --deep --force "${BUNDLE}"
# Verify it worked
echo Verifying the signature
codesign --verify --verbose --deep --force "${BUNDLE}"
RETURN_STATUS=$?
if [ ${RETURN_STATUS} -ne 0 ]; then
echo Code signing did not work, check the log
exit 1
else
echo ${BUNDLE} successfully signed
fi
-30
View File
@@ -1,30 +0,0 @@
#!/bin/bash
DMG_VOLUME_NAME=${APP_NAME}
DMG_NAME=`echo ${DMG_VOLUME_NAME} | sed 's/ //g' | awk '{print tolower($0)}'`
DMG_IMAGE=${DISTROOT}/${DMG_NAME}-${APP_LONG_VERSION}.dmg
if ! test -f "${DMG_IMAGE}" ; then
echo "${DMG_IMAGE} is no disk image!" >&2
exit 1
fi
# Get the config
source codesign.conf
SCRIPT_DIR=`pwd`
# Sign the .app
echo Signing ${DMG_IMAGE}
codesign --sign "${DEVELOPER_ID}" --verbose --force "${DMG_IMAGE}"
# Verify it worked
echo Verifying the signature
codesign --verify --verbose --force "${DMG_IMAGE}"
RETURN_STATUS=$?
if [ ${RETURN_STATUS} -ne 0 ]; then
echo ERROR: Code signing did not work
exit 1
else
echo ${DMG_IMAGE} successfully signed
fi
+1 -1
View File
@@ -1,5 +1,5 @@
# In order to enable codesigning of the Mac Appbundle, copy this file to
# codesign.conf, and edit the value below to reflect your developer ID
# codesign.conf, and edit the values below to reflect your developer ID.
DEVELOPER_ID="Developer ID Application: My Name (12345ABCD)"
DEVELOPER_BUNDLE_ID="Developer Bundle Identifier (pgadmin4-4)"
-142
View File
@@ -1,142 +0,0 @@
#!/bin/sh
bundle="$1"
if ! test -d "$bundle" ; then
echo "${bundle} is no bundle!" >&2
exit 1
fi
if test -z ${QTDIR} ; then
echo "QTDIR environment variable not set"
exit 1
else
echo "QTDIR=${QTDIR}"
fi
test -d "${bundle}/Contents/Resources" || mkdir -p "${bundle}/Contents/Resources" || exit 1
# Create qt.conf so that app knows where the Plugins are present
cat >> "${bundle}/Contents/Resources/qt.conf" << EOF
[Paths]
Plugins = PlugIns
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
cp -f ${QTDIR}/plugins/platforms/libqcocoa.dylib "${bundle}/Contents/PlugIns/platforms" || { echo libqcocoa.dylib not found in ${QTDIR}/plugins/platforms; exit 1; }
cp -f ${PGDIR}/lib/libpq.5.dylib "${bundle}/Contents/Frameworks" || { echo libpq.5.dylib not found in ${PGDIR}; exit 1; }
function CompleteSingleApp() {
local bundle=$1 tag=$(basename "$1") todo todo_old fw_relpath lib lib_bn nested_app na_relpath
echo "Completing app: ${bundle}"
pushd "${bundle}" > /dev/null
#We skip nested apps here - those are treated specially
todo=$(file `find ./ -perm +0111 ! -type d ! -path "*.app/*" ! -name "*.app"` | grep -E "Mach-O 64-bit" | awk -F ':| ' '{ORS=" "; print $1}')
echo "App: ${tag}: Found executables: ${todo}"
while test "${todo}" != ""; do
todo_old=${todo} ;
todo="" ;
for todo_obj in ${todo_old}; do
echo "App: ${tag}: Post-processing: ${todo_obj}"
#Figure out the relative path from todo_obj to Contents/Frameworks
fw_relpath=$(echo "${todo_obj}" |\
sed -n 's|^\(\.//*\)\(\([^/][^/]*/\)*\)[^/][^/]*$|\2|gp' | \
sed -n 's|[^/][^/]*/|../|gp' \
)"Contents/Frameworks"
fw_relpath_old=${fw_relpath}
fw_loc="Contents/Frameworks"
#Find all libraries $todo_obj depends on, but skip system libraries
for lib in $(
otool -L ${todo_obj} | \
grep "Qt\|dylib\|Frameworks\|PlugIns" | grep -v ":" | sed 's/(.*//' | egrep -v '(/usr/lib)|(/System)|@executable_path@' \
) $(otool -L ${todo_obj} | grep "Python" | grep -v ":" | sed 's/(.*//' \
); do
if echo ${lib} | grep "PlugIns\|libqcocoa" > /dev/null; then
lib_loc="Contents/PlugIns/platforms"
elif echo ${lib} | grep "Qt" > /dev/null; then
qtfw_path="$(dirname ${lib} | sed 's|.*\(Qt.*framework\)|\1|')"
lib_loc="Contents/Frameworks/${qtfw_path}"
if [ "$(basename ${todo_obj})" = "${lib}" ]; then
lib_loc="$(dirname ${todo_obj})"
qtfw_path=$(echo ${lib_loc} | sed 's/Contents\/Frameworks\///')
fi
elif echo ${lib} | grep "Python" > /dev/null; then
pyfw_path="$(dirname ${lib} | sed 's|.*\(Python.*framework\)|\1|')"
lib_loc="Contents/Frameworks/${pyfw_path}"
if [ "$(basename ${todo_obj})" = "${lib}" ]; then
lib_loc="$(dirname ${todo_obj})"
pyfw_path=$(echo ${lib_loc} | sed 's/Contents\/Frameworks\///')
fi
else
lib_loc="Contents/Frameworks"
fi
lib_bn="$(basename "${lib}")" ;
if ! test -f "${lib_loc}/${lib_bn}"; then
target_file=""
target_path=""
echo "App: ${tag}: Adding symlink: ${lib_bn} (because of: ${todo_obj})"
# Copy the QT and Python framework
if echo ${lib} | grep Qt > /dev/null ; then
test -d ${lib_loc} || mkdir -p ${lib_loc}
echo Copying -R ${QTDIR}/lib/${qtfw_path}/${lib_bn} to ${lib_loc}/
cp ${QTDIR}/lib/${qtfw_path}/${lib_bn} ${lib_loc}/
elif echo ${lib} | grep Python > /dev/null ; then
test -d ${lib_loc} || mkdir -p ${lib_loc}
cp -R "${lib}" "${lib_loc}/${lib_bn}"
else
cp -R "${lib}" "${lib_loc}/${lib_bn}"
fi
if ! test -L "${lib_loc}/${lib_bn}"; then
chmod 755 "${lib_loc}/${lib_bn}"
else
target_file=$(readlink "${lib}")
target_path=$(dirname "${lib}")/${target_file}
echo "App: ${tag}: Adding symlink target: ${target_path}"
cp "${target_path}" "${lib_loc}/${target_file}"
chmod 755 "${lib_loc}/${target_file}"
fi
echo "Rewriting ID in ${lib_loc}/${lib_bn} to ${lib_bn}"
echo install_name_tool -id "${lib_bn}" "${lib_loc}/${lib_bn}"
install_name_tool \
-id "${lib_bn}" \
"${lib_loc}/${lib_bn}" || exit 1
todo="${todo} ./${lib_loc}/${lib_bn}"
fi
if echo ${lib} | grep Qt > /dev/null ; then
fw_relpath="${fw_relpath}/${qtfw_path}"
fi
if echo ${lib} | grep Python > /dev/null ; then
fw_relpath="${fw_relpath}/${pyfw_path}"
fi
chmod +w ${todo_obj}
echo "Rewriting library ${lib} to @loader_path/${fw_relpath}/${lib_bn} in ${todo_obj}"
echo install_name_tool -change "${lib}" "@loader_path/${fw_relpath}/${lib_bn}" "${todo_obj}"
install_name_tool -change \
"${lib}" \
"@loader_path/${fw_relpath}/${lib_bn}" \
"${todo_obj}" || exit 1
install_name_tool -change \
"${target_path}" \
"@loader_path/${fw_relpath}/${target_file}" \
"${todo_obj}" || exit 1
fw_relpath="${fw_relpath_old}"
done
done
done
# Fix the rpaths for psycopg module
find "${bundle}/Contents/Resources/venv/" -name _psycopg.so -print0 | xargs -0 install_name_tool -change libpq.5.dylib @loader_path/../../../../../../Frameworks/libpq.5.dylib
find "${bundle}/Contents/Resources/venv/" -name _psycopg.so -print0 | xargs -0 install_name_tool -change libssl.1.0.0.dylib @loader_path/../../../../../../Frameworks/libssl.1.0.0.dylib
find "${bundle}/Contents/Resources/venv/" -name _psycopg.so -print0 | xargs -0 install_name_tool -change libcrypto.1.0.0.dylib @loader_path/../../../../../../Frameworks/libcrypto.1.0.0.dylib
echo "App completed: ${bundle}"
popd > /dev/null
}
CompleteSingleApp "${bundle}"
-36
View File
@@ -1,36 +0,0 @@
#!/bin/sh
# move to the directory where we want to create the DMG
test -d ${DISTROOT} || mkdir ${DISTROOT}
cd ${DISTROOT}
DMG_SOURCES="./../mac-build/${APP_BUNDLE_NAME}"
DMG_LICENCE=./../pkg/mac/licence.rtf
DMG_VOLUME_NAME=${APP_NAME}
DMG_NAME=`echo ${DMG_VOLUME_NAME} | sed 's/ //g' | awk '{print tolower($0)}'`
DMG_IMAGE=${DMG_NAME}-${APP_LONG_VERSION}.dmg
HDIUTIL=/usr/bin/hdiutil
REZ="/usr/bin/Rez"
DMG_DIR=./${DMG_IMAGE}.src
if test -e "${DMG_DIR}"; then
echo "Directory ${DMG_DIR} already exists. Please delete it manually." >&2
exit 1
fi
echo "Cleaning up"
rm -f "${DMG_IMAGE}" || exit 1
mkdir "${DMG_DIR}" || exit 1
echo "Copying data into temporary directory"
for src in "${DMG_SOURCES}"; do
cp -R "${src}" "${DMG_DIR}" || exit 1
done
echo "Creating image"
${HDIUTIL} create -quiet -srcfolder "$DMG_DIR" -fs HFS+ -format UDZO -volname "${DMG_VOLUME_NAME}" -ov "${DMG_IMAGE}" || exit 1
rm -rf "${DMG_DIR}" || exit 1
echo "Attaching License to image"
python ./../pkg/mac/dmg-license.py "${DMG_IMAGE}" "${DMG_LICENCE}" -c bz2
-71
View File
@@ -1,71 +0,0 @@
#!/bin/sh
BUNDLE="$1"
if ! test -d "${BUNDLE}" ; then
echo "${BUNDLE} is no bundle!" >&2
exit 1
fi
# Get the config
source framework.conf
SCRIPT_DIR=`pwd`
echo Reorganising the framework structure
# Create "Current" and "Current/Resources" inside each of the framework dirs
MYDIR=`pwd`
find "${BUNDLE}/Contents/Frameworks"/*framework -type d -name "Versions" | while read -r framework_dir; do
cd "${framework_dir}"
# Create framework 'Current' soft link
VERSION_NUMBER=`ls -1`
ln -s ${VERSION_NUMBER} Current || { echo "link creation in framework-config.sh failed"; exit 1; }
# Create "Resources" subdirectory
if [ ! -d Current/Resources ]; then
mkdir Current/Resources
fi
cd "${MYDIR}"
done
# Stuff for Qt framework files only
find "${BUNDLE}/Contents/Frameworks" -type d -name "Qt*framework" | while read -r framework_dir; do
cd "${framework_dir}"
# Create soft link to the framework binary
ln -s Versions/Current/Qt* || { echo "link creation in framework-config.sh failed"; exit 1; }
# Create soft link to the framework Resources dir
ln -s Versions/Current/Resources || { echo "link creation in framework-config.sh failed"; exit 1; }
# Create the Info.plist files
MYNAME=`ls -1 Qt*`
if [ -f Resources/Info.plist ]; then
chmod +w Resources/Info.plist
fi
sed 's/__SHORT_VERSION__/${QT_SHORT_VERSION}/' "${SCRIPT_DIR}/Info.plist-template_Qt5" | sed 's/__FULL_VERSION__/${QT_FULL_VERSION}/' | sed "s/__FRAMEWORK_NAME__/${MYNAME}/" > "Resources/Info.plist" || { echo "sed replacement in framework-config.sh failed"; exit 1; }
cd "${MYDIR}"
done
# Same thing, but specific to the Python framework dir
find "${BUNDLE}/Contents/Frameworks" -type d -name "P*framework" | while read -r framework_dir; do
cd "${framework_dir}"
# Create soft link to the framework binary
ln -s Versions/Current/Py* || { echo "link creation in framework-config.sh failed"; exit 1; }
# Create soft link to the framework Resources dir
ln -s Versions/Current/Resources || { echo "link creation in framework-config.sh failed"; exit 1; }
# Create the Info.plist file
MYNAME=`ls -1 Py*`
sed 's/__SHORT_VERSION__/${PYTHON_SHORT_VERSION}/' "${SCRIPT_DIR}/Info.plist-template_Python" | sed 's/__FULL_VERSION__/${PYTHON_FULL_VERSION}/' | sed "s/__FRAMEWORK_NAME__/${MYNAME}/" > "Resources/Info.plist" || { echo "sed replacement in framework-config.sh failed"; exit 1; }
cd "${MYDIR}"
done
echo ${BUNDLE} framework config finished
+6 -6
View File
@@ -1,10 +1,10 @@
# copy this file to framework.conf, and edit the values below to reflect your environment
# (versions of Python/Qt used)
# Copy this file to framework.conf, and edit the values below to reflect your
# environment (versions of Python/Qt used)
PYTHON_SHORT_VERSION=2.7
PYTHON_FULL_VERSION=2.7.10
PYTHON_SHORT_VERSION=3.8
PYTHON_FULL_VERSION=3.8.2
QT_SHORT_VERSION=5.8
QT_FULL_VERSION=5.8.0
QT_SHORT_VERSION=5.14
QT_FULL_VERSION=5.14.2
+1 -1
View File
@@ -102,7 +102,7 @@ echo recursive-include pgadmin4 \* > pip-build/MANIFEST.in
# Run the build
echo Building wheel...
cd pip-build
python ../pkg/pip/setup_pip.py bdist_wheel --universal
python ../pkg/pip/setup_pip.py bdist_wheel
cd ../
# Get the build
Loaded 100 of 1217 files, more files were not shown because too many files have changed in this diff. Show more