Compare commits

..
67 Commits
Author SHA1 Message Date
Akshay Joshi f881542834 Fix RESQL/MSQL test cases for Python 2.7 2019-09-17 11:41:57 +05:30
Akshay Joshi e64d6edc73 Update version for release. 2019-09-17 11:06:58 +05:30
Akshay Joshi b10378fe70 Fix query history issue for Python 2.7, it is a regression of #4750. 2019-09-17 11:01:13 +05:30
Murtuza Zabuawala 80b05973c6 Fix query history exception for Python 3.6. Fixes #4750. 2019-09-16 19:09:22 +05:30
Akshay Joshi 426d9d5872 Fix SQL issue of length and precision when changing the data type of Column. Fixes #4698 2019-09-16 18:57:57 +05:30
Dave Page 110a51c5b2 Refactor Dockerfile to avoid needing to run supporting scripts (i.e. 'docker build .' will work) and minimise layers. Fixes #4752 2019-09-16 13:48:11 +01:00
Khushboo Vashi aa668856f7 1) Add Reverse Engineered and Modified SQL tests for Primary Keys. Fixes #4624.
2) Ensure Primary Key should be created with Index. Fixes #4742.
2019-09-16 12:05:29 +05:30
Murtuza Zabuawala d923dcf98b Added MSQL test cases for Roles. 2019-09-16 11:41:48 +05:30
Identifier Anonymous 6e7759f1d5 Update Japanese translation. 2019-09-16 11:30:20 +05:30
Akshay Joshi 2acd2a5615 Update message catalogs. 2019-09-13 18:13:21 +05:30
Akshay Joshi f5a6df4ddb Fix issue where EXEC script doesn't write the complete script for Procedures. Fixes #4727 2019-09-13 16:58:25 +05:30
Akshay Joshi da553eec9b Ensure port and username should not be mandatory when a service is provided. Fixes #4642 2019-09-13 11:54:16 +05:30
Aditya Toshniwal 9a69d27009 Fix webpack issue where multiple assets emit to the same file. 2019-09-13 11:08:08 +05:30
Aditya Toshniwal 83170a0e94 Fix display of validation error message in SlickGrid cells. Fixes #4408 2019-09-12 20:27:44 -04:00
Akshay Joshi 6d8c53bffd Fix query tool and view data issue with the Italian language. Fixes #4736 2019-09-12 17:20:35 +05:30
Akshay Joshi 7944e75695 Ensure sequence with negative value should be created. Fixes #4726 2019-09-12 14:18:30 +05:30
Dave Page 31653aef70 Remove quotes that shouldn't be there. 2019-09-11 16:00:53 -04:00
Akshay Joshi 6a931588aa 1) Add Reverse Engineered and Modified SQL tests for Foreign Keys. Fixes #4616
2) Fix issue where Validated switch option is inverted for the Foreign Key. Fixes #4412
2019-09-11 15:59:13 +05:30
Dave Page b4a754bdc0 Remove copy of file that's now created on the fly. 2019-09-09 13:35:55 -04:00
Domenico Sgarbossa 199844e82c Italian translation improvements. 2019-09-09 11:33:51 +05:30
Nagesh Dhope db06dd0275 Add msql tests for FTS Dictionaries 2019-09-06 16:00:33 +01:00
Dave Page 72505b27cb Update feature test to support changed editor options. 2019-09-06 13:32:13 +01:00
Nagesh Dhope 9f26e7ed20 Added MSQL test cases for Extension. 2019-09-06 16:28:41 +05:30
Akshay Joshi 8e4e8b3e5a 1) Add Reverse Engineered and Modified SQL tests for Indexes. Fixes #4621
2) Fix modified SQL for Index when reset the value of Fill factor and Clustered?. Fixes #4702
3) Fix reversed engineered SQL for btree Index when provided sort order and NULLs. Fixes #4703
2019-09-06 14:10:46 +05:30
Akshay Joshi 9eff2e9926 Modified RE-SQL/MSQL test cases of foreign tables for EPAS 9.4 and 9.5 2019-09-05 12:01:03 +05:30
Aditya Toshniwal 1c2ba72f02 Add editor options for plain text mode and to disable block folding to
workaround rendering speed issues in CodeMirror with very large scripts.
Fixes #4631.

Re-arrange editor options in the Preferences dialogue to tidy things up.
2019-09-04 15:46:08 +01:00
Akshay Joshi 5e54f20578 Add Reverse Engineered and Modified SQL tests for Foreign Tables. Fixes #4618. 2019-09-04 18:33:07 +05:30
Ashesh Vashi 2d4429fa64 Update yarn.lock to update the vulnerable javascripts
i.e.
eslint-utils >= 1.4.1
2019-09-04 10:20:28 +05:30
Ganesh Jaybhay 85baa22ca1 Added Modified SQL test cases for FTS Configurations. 2019-09-03 17:42:44 +05:30
navnath gadakh 4690700a24 Added Modified SQL test cases for Packages. 2019-09-03 17:33:57 +05:30
Akshay Joshi 4745ad56e9 1) Add Reverse Engineered and Modified SQL tests for Foreign Servers. Fixes #4617
2) Add Reverse Engineered and Modified SQL tests for User Mappings. Fixes #4627
2019-09-03 16:27:41 +05:30
Aditya Toshniwal 04357b7a55 Fix error while importing data to a table using Import/Export dialog and providing Not null columns option. Fixes #4461. 2019-09-03 11:19:33 +05:30
Shubham Agarwal a0f6e5272a Add MSQL test cases for FTS Parser. 2019-09-03 10:28:11 +05:30
Murtuza Zabuawala eeeb350ed2 Add Modified SQL tests for Resource Group. Fixes #4690 2019-09-03 10:18:09 +05:30
Aditya Toshniwal a68f0702e2 Re-fix database name unescaping the query tool title bar. 2019-09-02 16:57:28 +01:00
Domenico Sgarbossa 60a6c501fb Add an Italian translation. 2019-09-02 13:35:32 +01:00
Akshay Joshi 5ff3f40116 Add Reverse Engineered and Modified SQL tests for FTS Templates. Fixes #4619 2019-09-02 15:24:41 +05:30
Akshay Joshi 662266a367 Added MSQL test cases for Cast and Language. 2019-09-02 14:11:59 +05:30
Aditya Toshniwal bc91a7c7b2 Increase cache control max age for static files to improve performance over longer run. Fixes #4681 2019-09-02 12:17:43 +05:30
Neel Patel 0ca65d7cfe Added MSQL test cases for Domain. 2019-09-02 11:52:19 +05:30
Aditya Toshniwal 47f26cc377 Fix exception in query history for python 2.7. Fixes #4663 2019-08-30 09:07:03 +05:30
Akshay Joshi e0c53e7d1d Add Reverse Engineered SQL tests for Schemas. Fixes #4575 2019-08-29 18:32:08 +05:30
Aditya Toshniwal d6da1cf25c Added MSQL test cases for Sequences and cover missing ACL RE-SQL test cases. 2019-08-29 14:15:34 +05:30
Shubham Agarwal fc4bef56a0 Further code refactoring to stabilise the Feature Tests. Fixes #3936 2019-08-28 18:04:08 +05:30
Aditya Toshniwal 028473eb83 Fix an issue where oid column should not be pasted when copy/paste row is used on query output containing the oid column. Fixes #4381 2019-08-28 13:35:40 +05:30
Usman Muzaffar ac298b03c0 1) Add Reverse Engineered SQL tests for Views. Fixes #4576
2) Ensure View should be created with special characters. Fixes #4486
2019-08-28 12:48:59 +05:30
Aditya Toshniwal 06ad6b8ba8 1) Ensure Boolean columns should be editable using keyboard keys. Fixes #3778
2) Ensure Boolean columns should be editable in View/Edit data and Query Tool. Fixes #4487
2019-08-28 11:09:30 +05:30
Aditya Toshniwal dbbbb2e5ed Fix query tool launch error if user name contain html characters. Fixes #4674 2019-08-28 10:46:28 +05:30
Akshay Joshi 28b741a13a Fixed timezone issue in RE-SQL test cases for Roles. 2019-08-27 19:54:30 +05:30
Murtuza Zabuawala 1ddc9cc889 Modified RE-SQL test to cover Password, Account Expire, Connection Limit and Variables for Roles. 2019-08-26 18:25:48 +05:30
Aditya Toshniwal 53ab4d7e8d Fix an error that could be seen when click on any system column of a table. Fixes #4577 2019-08-26 14:36:07 +05:30
Yosry Muhammad f8f7d5ac6f Ensure editable and read-only columns in Query Tool should be identified by icons and tooltips in the column header. Fixes #4667 2019-08-26 14:17:40 +05:30
Yosry Muhammad 5887fb3815 Some refactoring of sqleditor.js. 2019-08-23 16:15:43 +01:00
Aditya Toshniwal 234efc3be7 Don't wait for the database connection before rendering the Query Tool UI, for improved UX. Fixes #4453
In addition, unescape HTML entities in database names in the Query Tool title bar. Fixes #4584
2019-08-23 12:14:20 +01:00
Dave Page 25f85fe123 Fix PGADMIN_SERVER_JSON_FILE environment variable support in the container. Fixes #4657 2019-08-23 09:53:24 +01:00
Aditya Toshniwal 3dadb8989b Fix a debugger error when using Python 2.7. Fixes #4419
Also fixes a minor bug where a reload warning was unnecessarily given when closing the debugger.
2019-08-23 09:43:51 +01:00
Akshay Joshi 232fe286ee Fix SQL tab issue for Views. It's a regression of compound triggers. Fixes #4650 2019-08-23 10:22:20 +05:30
Dave Page 6192c48ef9 Further tweaks for formatting. 2019-08-22 15:41:24 +01:00
Dave Page 92aabb215f Improve formatting. 2019-08-22 15:34:04 +01:00
Dave Page c76b30e353 Allow configuration options to be set from the environment in the container distribution. Fixes #4651 2019-08-22 15:24:04 +01:00
Dave Page 1795141aec Minor doc styling tweaks. 2019-08-22 15:11:59 +01:00
Shubham Agarwal 9f455a514e Feature test improvement and fix intermittent failures part of #3936 2019-08-22 14:50:51 +05:30
Akshay Joshi 7090c02014 Move schema precondition logic into separate function for RE-SQL. 2019-08-21 18:12:33 +05:30
Neel Patel dc64ce331a Fix length and precision enable/disable issue when changing the data type for Domain node. Fixes #4644. 2019-08-21 16:27:23 +05:30
Akshay Joshi 094e5577e8 Add Reverse Engineered SQL tests for Rules. Fixes #4600 2019-08-21 16:06:05 +05:30
Akshay Joshi 41e2a674e3 Fix Truncate option deselect issue for compound triggers. Fixes #4643 2019-08-20 17:09:26 +05:30
Akshay Joshi bdff046c57 1) Added ProjectSet icon for explain module. Fixes #2706
2) Added Gather Merge, Named Tuple Store Scan and Table Function Scan icon for explain module. Fixes #2828
2019-08-20 16:47:53 +05:30
535 changed files with 26408 additions and 6267 deletions

No files matched your search

+174
View File
@@ -0,0 +1,174 @@
########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2018, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
#########################################################################
#########################################################################
# Create a Node container which will be used to build the JS components
# and clean up the web/ source code
#########################################################################
FROM node:8-alpine AS app-builder
RUN apk add --no-cache \
autoconf \
automake \
bash \
g++ \
libc6-compat \
libjpeg-turbo-dev \
libpng-dev \
make \
nasm \
git \
zlib-dev
# Create the /pgadmin4 directory and copy the source into it. Explicitly
# remove the node_modules directory as we'll recreate a clean version, as well
# as various other files we don't want
COPY web /pgadmin4/web
RUN rm -rf /pgadmin4/web/*.log \
/pgadmin4/web/config_*.py \
/pgadmin4/web/node_modules \
/pgadmin4/web/regression \
`find /pgadmin4/web -type d -name tests` \
`find /pgadmin4/web -type f -name .DS_Store`
WORKDIR /pgadmin4/web
# Build the JS vendor code in the app-builder, and then remove the vendor source.
RUN npm install && \
npm audit fix && \
rm -f yarn.lock && \
yarn import && \
yarn audit && \
rm -f package-lock.json && \
yarn run bundle && \
rm -rf node_modules \
yarn.lock \
package.json \
.[^.]* \
babel.cfg \
webpack.* \
karma.conf.js \
./pgadmin/static/js/generated/.cache
#########################################################################
# Now, create a documentation build container for the Sphinx docs
#########################################################################
FROM python:3.7-alpine3.10 as docs-builder
# Install only dependencies absolutely required for documentation building
RUN apk add --no-cache \
make \
build-base \
openssl-dev \
libffi-dev && \
pip install --no-cache-dir \
sphinx \
flask_security \
flask_paranoid \
python-dateutil \
flask_sqlalchemy \
flask_gravatar \
flask_migrate \
simplejson \
cryptography
# Copy the docs from the local tree. Explicitly remove any existing builds that
# may be present
COPY docs /pgadmin4/docs
COPY web /pgadmin4/web
RUN rm -rf /pgadmin4/docs/en_US/_build
# Build the docs
RUN LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 make -C /pgadmin4/docs/en_US -f Makefile.sphinx html
#########################################################################
# 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 alpine:3.10 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/
COPY --from=pg95-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-9.5/
COPY --from=pg96-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-9.6/
COPY --from=pg96-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-9.6/
COPY --from=pg96-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-9.6/
COPY --from=pg96-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-9.6/
COPY --from=pg10-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-10/
COPY --from=pg10-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-10/
COPY --from=pg10-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-10/
COPY --from=pg10-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-10/
COPY --from=pg11-builder /usr/local/bin/pg_dump /usr/local/pgsql/pgsql-11/
COPY --from=pg11-builder /usr/local/bin/pg_dumpall /usr/local/pgsql/pgsql-11/
COPY --from=pg11-builder /usr/local/bin/pg_restore /usr/local/pgsql/pgsql-11/
COPY --from=pg11-builder /usr/local/bin/psql /usr/local/pgsql/pgsql-11/
#########################################################################
# Assemble everything into the final container.
#########################################################################
FROM python:3.7-alpine3.10
COPY --from=tool-builder /usr/local/pgsql /usr/local/
WORKDIR /pgadmin4
ENV PYTHONPATH=/pgadmin4
# Copy in the code and docs
COPY --from=app-builder /pgadmin4/web /pgadmin4
COPY --from=docs-builder /pgadmin4/docs/en_US/_build/html/ /pgadmin4/docs
COPY requirements.txt /pgadmin4/requirements.txt
# Install build-dependencies, build & install C extensions and purge deps in
# one RUN step
RUN apk add --no-cache --virtual \
build-deps \
build-base \
postgresql-dev \
libffi-dev \
linux-headers && \
apk add \
postfix \
postgresql-client \
postgresql-libs && \
pip install --upgrade pip && \
pip install --no-cache-dir -r requirements.txt && \
pip install --no-cache-dir gunicorn && \
apk del --no-cache build-deps
# Copy the runner script
COPY pkg/docker/run_pgadmin.py /pgadmin4
COPY pkg/docker/entrypoint.sh /entrypoint.sh
# Precompile and optimize python code to save time and space on startup
RUN python -O -m compileall -x node_modules /pgadmin4
# Finish up
VOLUME /var/lib/pgadmin
EXPOSE 80 443
ENTRYPOINT ["/entrypoint.sh"]
+2 -5
View File
@@ -77,7 +77,7 @@ runtime:
cd runtime && qmake CONFIG+=release && make
# Include all clean sub-targets in clean
clean: clean-appbundle clean-docker clean-dist clean-docs clean-node clean-pip clean-src clean-runtime
clean: clean-appbundle clean-dist clean-docs clean-node clean-pip 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/*
@@ -90,9 +90,6 @@ clean-runtime:
clean-appbundle:
rm -rf mac-build/
clean-docker:
rm -rf docker-build/
clean-dist:
rm -rf dist/
@@ -109,7 +106,7 @@ clean-src:
rm -rf src-build/
docker:
./pkg/docker/build.sh
docker build `python -c 'import web.config as c; print("-t {0} -t {0}:latest -t {0}:{1} -t {0}:{1}.{2}".format(c.APP_NAME.replace(" ", "").lower(), c.APP_RELEASE, c.APP_REVISION))'` .
docs:
LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 $(MAKE) -C docs/en_US -f Makefile.sphinx html
+34
View File
@@ -0,0 +1,34 @@
.. _config_py:
***************************
`The config.py File`:index:
***************************
There are multiple configuration files that are read at startup by pgAdmin. These
are as follows:
* ``config.py``: This is the main configuration file, and should not be modified.
It can be used as a reference for configuration settings, that may be overridden
in one of the following files.
* ``config_distro.py``: This file is read after ``config.py`` and is intended for
packagers to change any settings that are required for their pgAdmin distribution.
This may typically include certain paths and file locations. This file is optional,
and may be created by packagers in the same directory as ``config.py`` if
needed.
* ``config_local.py``: This file is read after ``config_distro.py`` and is intended
for end users to change any default or packaging specific settings that they may
wish to adjust to meet local preferences or standards.This file is optional,
and may be created by users in the same directory as ``config.py`` if
needed.
.. note:: If the SERVER_MODE setting is changed in ``config_distro.py`` or ``config_local.py``,
you will most likely need to re-set the LOG_FILE, SQLITE_PATH, SESSION_DB_PATH
and STORAGE_DIR values as well as they will have been set based on the default
configuration or overridden by the runtime.
The default ``config.py`` file is shown below for reference:
.. literalinclude:: ../../web/config.py
:language: python
+56 -27
View File
@@ -31,19 +31,19 @@ Environment Variables
The container will accept the following variables at startup:
*PGADMIN_DEFAULT_EMAIL*
**PGADMIN_DEFAULT_EMAIL**
This is the email address used when setting up the initial administrator account
to login to pgAdmin. This variable is required and must be set at launch time.
*PGADMIN_DEFAULT_PASSWORD*
**PGADMIN_DEFAULT_PASSWORD**
This is the password used when setting up the initial administrator account to
login to pgAdmin. This variable is required and must be set at launch time.
*PGADMIN_ENABLE_TLS*
**PGADMIN_ENABLE_TLS**
Default: <null>
*Default: <null>*
If left un-set, the container will listen on port 80 for connections in plain
text. If set to any value, the container will listen on port 443 for TLS
@@ -53,36 +53,51 @@ When TLS is enabled, a certificate and key must be provided. Typically these
should be stored on the host file system and mounted from the container. The
expected paths are /certs/server.crt and /certs/server.key
*PGADMIN_LISTEN_ADDRESS*
**PGADMIN_LISTEN_ADDRESS**
Default: [::]
*Default: [::]*
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.
*PGADMIN_LISTEN_PORT*
**PGADMIN_LISTEN_PORT**
Default: 80 or 443 (if TLS is enabled)
*Default: 80 or 443 (if TLS is enabled)*
Allows the port that the server listens on to be set to a specific value rather
than using the default.
*PGADMIN_SERVER_JSON_FILE*
**PGADMIN_SERVER_JSON_FILE**
Default: /pgadmin4/servers.json
*Default: /pgadmin4/servers.json*
Override the default file path for the server definition list. See the
/pgadmin4/servers.json mapped file below for more information.
*GUNICORN_THREADS*
**GUNICORN_THREADS**
Default: 25
*Default: 25*
Adjust the number of threads the Gunicorn server uses to handle incoming
requests. This should typically be left as-is, except in highly loaded systems
where it may be increased.
**PGADMIN_CONFIG_**
This is a variable prefix that can be used to override any of the configuration
options in pgAdmin's *config.py* file. Add the *PGADMIN_CONFIG_* prefix to any
variable name from *config.py* and give the value in the format 'string value'
for strings, True/False for booleans or 123 for numbers. See below for an
example.
Settings are written to */pgadmin4/config_distro.py* within the container, which
is read after */pgadmin4/config.py* and before */pgadmin4/config_local.py*.
Any settings given will therefore override anything in config.py, but can be
overridden by settings in config_local.py.
See :ref:`config_py` for more information on the available configuration settings.
Mapped Files and Directories
****************************
@@ -90,20 +105,21 @@ The following files or directories can be mapped from the container onto the
host machine to allow configuration to be customised and shared between
instances:
*/var/lib/pgadmin*
**/var/lib/pgadmin**
This is the working directory in which pgAdmin stores session data, user files,
configuration files, and it's configuration database. Mapping this directory
onto the host machine gives you an easy way to maintain configuration between
invocations of the container.
*/pgadmin4/config_local.py*
**/pgadmin4/config_local.py**
This file can be used to override configuration settings in pgAdmin. Settings
found in config.py can be overridden with deployment specific values if
required.
required. Settings in config_local.py will also override anything specified in
the container environment through *PGADMIN_CONFIG_* prefixed variables.
*/pgadmin4/servers.json*
**/pgadmin4/servers.json**
If this file is mapped, server definitions found in it will be loaded at launch
time. This allows connection information to be pre-loaded into the instance of
@@ -111,11 +127,11 @@ pgAdmin in the container. Note that server definitions are only loaded on first
launch, i.e. when the configuration database is created, and not on subsequent
launches using the same configuration database.
*/certs/server.cert*
**/certs/server.cert**
If TLS is enabled, this file will be used as the servers TLS certificate.
*/certs/server.key*
**/certs/server.key**
If TLS is enabled, this file will be used as the key file for the servers TLS
certificate.
@@ -129,8 +145,21 @@ Run a simple container over port 80:
docker pull dpage/pgadmin4
docker run -p 80:80 \
-e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
-e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
-e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' \
-e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' \
-d dpage/pgadmin4
Run a simple container over port 80, setting some configuration options:
.. code-block:: bash
docker pull dpage/pgadmin4
docker run -p 80:80 \
-e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' \
-e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' \
-e 'PGADMIN_CONFIG_ENHANCED_COOKIE_PROTECTION=True' \
-e 'PGADMIN_CONFIG_LOGIN_BANNER="Authorised users only!"' \
-e 'PGADMIN_CONFIG_CONSOLE_LOG_LEVEL=10' \
-d dpage/pgadmin4
Run a TLS secured container using a shared config/storage directory in
@@ -141,13 +170,13 @@ Run a TLS secured container using a shared config/storage directory in
docker pull dpage/pgadmin4
docker run -p 443:443 \
-v "/private/var/lib/pgadmin:/var/lib/pgadmin" \
-v "/path/to/certificate.cert:/certs/server.cert" \
-v "/path/to/certificate.key:/certs/server.key" \
-v "/tmp/servers.json:/servers.json" \
-e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
-e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
-e "PGADMIN_ENABLE_TLS=True" \
-v /private/var/lib/pgadmin:/var/lib/pgadmin \
-v /path/to/certificate.cert:/certs/server.cert \
-v /path/to/certificate.key:/certs/server.key \
-v /tmp/servers.json:/servers.json \
-e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' \
-e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' \
-e 'PGADMIN_ENABLE_TLS=True' \
-d dpage/pgadmin4
Reverse Proxying
+3 -2
View File
@@ -12,7 +12,8 @@ will provide detailed information about creating a custom deployment.
.. toctree::
:maxdepth: 2
config_py
desktop_deployment
server_deployment
container_deployment
container_deployment
+2 -24
View File
@@ -36,32 +36,10 @@ this is overridden by the desktop runtime at startup. In most environments, no
Python configuration is required unless you wish to override other default
settings.
There are multiple configuration files that are read at startup by pgAdmin. These
are as follows:
* ``config.py``: This is the main configuration file, and should not be modified.
It can be used as a reference for configuration settings, that may be overridden
in one of the following files.
* ``config_distro.py``: This file is read after ``config.py`` and is intended for
packagers to change any settings that are required for their pgAdmin distribution.
This may typically include certain paths and file locations. This file is optional,
and may be created by packagers in the same directory as ``config.py`` if
needed.
* ``config_local.py``: This file is read after ``config_distro.py`` and is intended
for end users to change any default or packaging specific settings that they may
wish to adjust to meet local preferences or standards.This file is optional,
and may be created by users in the same directory as ``config.py`` if
needed.
.. note:: If the SERVER_MODE setting is changed in ``config_distro.py`` or ``config_local.py``,
you will most likely need to re-set the LOG_FILE, SQLITE_PATH, SESSION_DB_PATH
and STORAGE_DIR values as well as they will have been set based on the default
configuration or overridden by the runtime.
See :ref:`config_py` for more information on configuration settings.
Runtime
-------
*******
When executed, the runtime will automatically try to execute the pgAdmin Python
application. If execution fails, it will prompt you to adjust the Python Path
+2 -2
View File
@@ -35,6 +35,8 @@ disabled in either mode. Please see
:ref:`The Query Tool Toolbar <query_tool_toolbar>` for a description of the
available controls.
.. _data-grid:
The Data Grid
*************
@@ -42,8 +44,6 @@ The top row of the data grid displays the name of each column, the data type,
and if applicable, the number of characters allowed. A column that is part of
the primary key will additionally be marked with [PK].
.. _modifying-data-grid:
To modify the displayed data:
* To change a numeric value within the grid, double-click the value to select
Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 79 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 100 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 104 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 143 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

+31 -18
View File
@@ -268,6 +268,37 @@ Tool display.
a positive value above zero is specified, the notifier will be displayed for
the specified number of seconds. The default is *5*.
.. image:: images/preferences_sql_editor.png
:alt: Preferences dialog sqleditor editor settings
:align: center
Use the fields on the *Editor* panel to change settings of the query editor.
* When the *Brace matching?* switch is set to *True*, the editor will highlight
pairs of matched braces.
* When the *Code folding?* switch is set to *False*, the editor will disable
code folding. Disabling will improve editor performance with large files.
* Use the *Font size* field to specify the font size that will be used in text
boxes and editors.
* When the *Insert bracket pairs?* switch is set to *True*, the editor will
automatically insert paired brackets.
* When the *Line wrapping* switch is set to *True*, the editor will implement
line-wrapping behavior.
* When the *Plain text mode?* switch is set to *True*, the editor mode will be
changed to text/plain. Keyword highlighting and code folding will be disabled.
This will improve editor performance with large files.
* Use the *Tab size* field to specify the number of spaces per tab character in
the editor.
* When the *Use spaces* switch is set to *True*, the editor will insert spaces
(instead of tab characters) when the tab key or auto-indent are used.
.. image:: images/preferences_sql_explain.png
:alt: Preferences dialog sqleditor explain options
:align: center
@@ -300,18 +331,6 @@ Use the fields on the *Options* panel to manage editor preferences.
* When the *Auto-Rollback?* switch is set to *True*, failed queries are rolled
back.
* When the *Brace matching?* switch is set to *True*, the editor will highlight
pairs of matched braces.
* Use the *Font size* field to specify the font size that will be used in text
boxes and editors.
* When the *Insert bracket pairs?* switch is set to *True*, the editor will
automatically insert paired brackets.
* When the *Line wrapping* switch is set to *True*, the editor will implement
line-wrapping behavior.
* When the *Prompt to save unsaved data changes?* switch is set to *True*, the
editor will prompt the user to saved unsaved data when exiting the data
editor.
@@ -324,12 +343,6 @@ 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.
* Use the *Tab size* field to specify the number of spaces per tab character in
the editor.
* When the *Use spaces* switch is set to *True*, the editor will insert spaces
(instead of tab characters) when the tab key or auto-indent are used.
.. image:: images/preferences_sql_results_grid.png
:alt: Preferences dialog sql results grid section
:align: center
+17 -5
View File
@@ -130,15 +130,27 @@ You can:
A result set is updatable if:
* All the columns belong to the same table.
* All the primary keys or OIDs of the table are explicitly selected.
* No columns are duplicated.
* All columns are either selected directly from a single table, or
are not table columns at all (e.g. concatenation of 2 columns).
Only columns that are selected directly from the table are
editable, other columns are read-only.
* All the primary key columns or OIDs of the table are selected in the
result set.
Any columns that are renamed or selected more than once are also read-only.
Editable and read-only columns are identified using pencil and lock icons
(respectively) in the column headers.
.. image:: images/query_tool_editable_columns.png
:alt: Query tool editable and read-only columns
:align: center
The psycopg2 driver version should be equal to or above 2.8 for updatable
query result sets to work.
An updatable result set can be modified just like in
:ref:`View/Edit Data <modifying-data-grid>` mode.
An updatable result set is identical to the :ref:`Data Grid <data-grid>` in
View/Edit Data mode, and can be modified in the same way.
If Auto-commit is off, the data changes are made as part of the ongoing
transaction, if no transaction is ongoing a new one is initiated. The data
+1
View File
@@ -11,6 +11,7 @@ notes for it.
.. toctree::
:maxdepth: 1
release_notes_4_13
release_notes_4_12
release_notes_4_11
release_notes_4_10
+65
View File
@@ -0,0 +1,65 @@
************
Version 4.13
************
Release date: 2019-09-19
This release contains a number of bug fixes and new features since the release of pgAdmin4 4.12.
New features
************
| `Issue #2828 <https://redmine.postgresql.org/issues/2828>`_ - Added Gather Merge, Named Tuple Store Scan and Table Function Scan icon for explain module.
| `Issue #4553 <https://redmine.postgresql.org/issues/4553>`_ - Don't wait for the database connection before rendering the Query Tool UI, for improved UX.
| `Issue #4651 <https://redmine.postgresql.org/issues/4651>`_ - Allow configuration options to be set from the environment in the container distribution.
| `Issue #4667 <https://redmine.postgresql.org/issues/4667>`_ - Ensure editable and read-only columns in Query Tool should be identified by icons and tooltips in the column header.
| `Issue #4691 <https://redmine.postgresql.org/issues/4691>`_ - Add an Italian translation.
| `Issue #4752 <https://redmine.postgresql.org/issues/4752>`_ - Refactor Dockerfile to avoid needing to run supporting scripts (i.e. 'docker build .' will work) and minimise layers.
Housekeeping
************
| `Issue #4575 <https://redmine.postgresql.org/issues/4575>`_ - Add Reverse Engineered SQL tests for Schemas.
| `Issue #4576 <https://redmine.postgresql.org/issues/4576>`_ - Add Reverse Engineered SQL tests for Views.
| `Issue #4600 <https://redmine.postgresql.org/issues/4600>`_ - Add Reverse Engineered SQL tests for Rules.
| `Issue #4616 <https://redmine.postgresql.org/issues/4616>`_ - Add Reverse Engineered and Modified SQL tests for Foreign Keys.
| `Issue #4617 <https://redmine.postgresql.org/issues/4617>`_ - Add Reverse Engineered and Modified SQL tests for Foreign Servers.
| `Issue #4618 <https://redmine.postgresql.org/issues/4618>`_ - Add Reverse Engineered and Modified SQL tests for Foreign Tables.
| `Issue #4619 <https://redmine.postgresql.org/issues/4619>`_ - Add Reverse Engineered and Modified SQL tests for FTS Templates.
| `Issue #4621 <https://redmine.postgresql.org/issues/4621>`_ - Add Reverse Engineered and Modified SQL tests for Indexes.
| `Issue #4624 <https://redmine.postgresql.org/issues/4624>`_ - Add Reverse Engineered and Modified SQL tests for Primary Keys.
| `Issue #4627 <https://redmine.postgresql.org/issues/4627>`_ - Add Reverse Engineered and Modified SQL tests for User Mappings.
| `Issue #4690 <https://redmine.postgresql.org/issues/4690>`_ - Add Modified SQL tests for Resource Group.
Bug fixes
*********
| `Issue #2706 <https://redmine.postgresql.org/issues/2706>`_ - Added ProjectSet icon for explain module.
| `Issue #3778 <https://redmine.postgresql.org/issues/3778>`_ - Ensure Boolean columns should be editable using keyboard keys.
| `Issue #3936 <https://redmine.postgresql.org/issues/3936>`_ - Further code refactoring to stabilise the Feature Tests.
| `Issue #4381 <https://redmine.postgresql.org/issues/4381>`_ - Fix an issue where oid column should not be pasted when copy/paste row is used on query output containing the oid column.
| `Issue #4408 <https://redmine.postgresql.org/issues/4408>`_ - Fix display of validation error message in SlickGrid cells.
| `Issue #4412 <https://redmine.postgresql.org/issues/4412>`_ - Fix issue where Validated switch option is inverted for the Foreign Key.
| `Issue #4419 <https://redmine.postgresql.org/issues/4419>`_ - Fix a debugger error when using Python 2.7.
| `Issue #4461 <https://redmine.postgresql.org/issues/4461>`_ - Fix error while importing data to a table using Import/Export dialog and providing "Not null columns" option.
| `Issue #4486 <https://redmine.postgresql.org/issues/4486>`_ - Ensure View should be created with special characters.
| `Issue #4487 <https://redmine.postgresql.org/issues/4487>`_ - Ensure Boolean columns should be editable in View/Edit data and Query Tool.
| `Issue #4577 <https://redmine.postgresql.org/issues/4577>`_ - Fix an error that could be seen when click on any system column of a table.
| `Issue #4584 <https://redmine.postgresql.org/issues/4584>`_ - Unescape HTML entities in database names in the Query Tool title bar.
| `Issue #4631 <https://redmine.postgresql.org/issues/4631>`_ - Add editor options for plain text mode and to disable block folding to workaround rendering speed issues in CodeMirror with very large scripts.
| `Issue #4642 <https://redmine.postgresql.org/issues/4642>`_ - Ensure port and username should not be mandatory when a service is provided.
| `Issue #4643 <https://redmine.postgresql.org/issues/4643>`_ - Fix Truncate option deselect issue for compound triggers.
| `Issue #4644 <https://redmine.postgresql.org/issues/4644>`_ - Fix length and precision enable/disable issue when changing the data type for Domain node.
| `Issue #4650 <https://redmine.postgresql.org/issues/4650>`_ - Fix SQL tab issue for Views. It's a regression of compound triggers.
| `Issue #4657 <https://redmine.postgresql.org/issues/4657>`_ - Fix PGADMIN_SERVER_JSON_FILE environment variable support in the container.
| `Issue #4663 <https://redmine.postgresql.org/issues/4663>`_ - Fix exception in query history for python 2.7.
| `Issue #4674 <https://redmine.postgresql.org/issues/4674>`_ - Fix query tool launch error if user name contain html characters.
| `Issue #4681 <https://redmine.postgresql.org/issues/4681>`_ - Increase cache control max age for static files to improve performance over longer run.
| `Issue #4698 <https://redmine.postgresql.org/issues/4698>`_ - Fix SQL issue of length and precision when changing the data type of Column.
| `Issue #4702 <https://redmine.postgresql.org/issues/4702>`_ - Fix modified SQL for Index when reset the value of Fill factor and Clustered?.
| `Issue #4703 <https://redmine.postgresql.org/issues/4703>`_ - Fix reversed engineered SQL for btree Index when provided sort order and NULLs.
| `Issue #4726 <https://redmine.postgresql.org/issues/4726>`_ - Ensure sequence with negative value should be created.
| `Issue #4727 <https://redmine.postgresql.org/issues/4727>`_ - Fix issue where EXEC script doesn't write the complete script for Procedures.
| `Issue #4736 <https://redmine.postgresql.org/issues/4736>`_ - Fix query tool and view data issue with the Italian language.
| `Issue #4742 <https://redmine.postgresql.org/issues/4742>`_ - Ensure Primary Key should be created with Index.
| `Issue #4750 <https://redmine.postgresql.org/issues/4750>`_ - Fix query history exception for Python 3.6.
+7 -18
View File
@@ -59,24 +59,7 @@ In order to configure pgAdmin to run in server mode, it may be necessary to
configure the Python code to run in multi-user mode, and then to configure the
web server to find and execute the code.
Note that there are multiple configuration files that are read at startup by
pgAdmin. These are as follows:
* ``config.py``: This is the main configuration file, and should not be modified.
It can be used as a reference for configuration settings, that may be overridden
in one of the following files.
* ``config_distro.py``: This file is read after ``config.py`` and is intended for
packagers to change any settings that are required for their pgAdmin distribution.
This may typically include certain paths and file locations. This file is optional,
and may be created by packagers in the same directory as ``config.py`` if
needed.
* ``config_local.py``: This file is read after ``config_distro.py`` and is intended
for end users to change any default or packaging specific settings that they may
wish to adjust to meet local preferences or standards. This file is optional,
and may be created by administrators in the same directory as ``config.py`` if
needed.
See :ref:`config_py` for more information on configuration settings.
Python
------
@@ -117,6 +100,12 @@ In order to configure the Python code, follow these steps:
# chown www-data:www-data /var/lib/pgadmin4/pgadmin4.db
Hosting
*******
There are many possible ways to host pgAdmin in server mode. Some examples are
given below:
Apache HTTPD Configuration (Windows)
------------------------------------
+4 -8
View File
@@ -47,15 +47,15 @@ a:hover {
}
div.body dd, div.body blockquote {
line-height: 1.8em;
line-height: 1.4em;
}
div.body p{
line-height: 1.8em;
line-height: 1.4em;
}
div.body ul li{
line-height: 1.8em;
line-height: 1.4em;
}
div.body p strong{
@@ -66,10 +66,6 @@ div.body li em, div.body p em{
font-weight: 400;
}
div.toctree-wrapper ul li.toctree-l1{
list-style: none;
}
div.toctree-wrapper ul li.toctree-l1 a cite{
font-weight: 500;
font-style: normal;
@@ -262,7 +258,7 @@ div.sphinxsidebar form div:first-child{
}
div.sphinxsidebar {
line-height: 1.4rem;
line-height: 1.2rem;
font-size: 0.85rem;
color: #858da0;
background-color: #ebeef3;
-2
View File
@@ -1,2 +0,0 @@
pgadmin4/web/**/tests/
pgadmin4/web/regression/
-99
View File
@@ -1,99 +0,0 @@
########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2018, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
#########################################################################
# First of all, build frontend with NodeJS in a separate builder container
# Node-8 is supported by all needed C++ packages
FROM node:8 AS node-builder
COPY ./pgadmin4/web/ /pgadmin4/web/
WORKDIR /pgadmin4/web
RUN yarn install --cache-folder ./ycache --verbose && \
yarn run bundle && \
rm -rf ./ycache ./pgadmin/static/js/generated/.cache
# Build Sphinx documentation in separate container
FROM python:3.7-alpine3.9 as docs-builder
# Install only dependencies absolutely required for documentation building
RUN apk add --no-cache make build-base openssl-dev libffi-dev && \
pip install --no-cache-dir sphinx flask_security flask_paranoid python-dateutil flask_sqlalchemy flask_gravatar flask_migrate simplejson cryptography
COPY ./pgadmin4/ /pgadmin4
# Build the docs
RUN LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 make -C /pgadmin4/docs/en_US -f Makefile.sphinx html
# Get the PG binaries
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
# Then install backend, copy static files and set up entrypoint
FROM python:3.7-alpine3.9
# Copy the PG binaries
COPY --from=pg94-builder /usr/local/bin/pg_dump /usr/local/pgsql-9.4/
COPY --from=pg94-builder /usr/local/bin/pg_dumpall /usr/local/pgsql-9.4/
COPY --from=pg94-builder /usr/local/bin/pg_restore /usr/local/pgsql-9.4/
COPY --from=pg94-builder /usr/local/bin/psql /usr/local/pgsql-9.4/
COPY --from=pg95-builder /usr/local/bin/pg_dump /usr/local/pgsql-9.5/
COPY --from=pg95-builder /usr/local/bin/pg_dumpall /usr/local/pgsql-9.5/
COPY --from=pg95-builder /usr/local/bin/pg_restore /usr/local/pgsql-9.5/
COPY --from=pg95-builder /usr/local/bin/psql /usr/local/pgsql-9.5/
COPY --from=pg96-builder /usr/local/bin/pg_dump /usr/local/pgsql-9.6/
COPY --from=pg96-builder /usr/local/bin/pg_dumpall /usr/local/pgsql-9.6/
COPY --from=pg96-builder /usr/local/bin/pg_restore /usr/local/pgsql-9.6/
COPY --from=pg96-builder /usr/local/bin/psql /usr/local/pgsql-9.6/
COPY --from=pg10-builder /usr/local/bin/pg_dump /usr/local/pgsql-10/
COPY --from=pg10-builder /usr/local/bin/pg_dumpall /usr/local/pgsql-10/
COPY --from=pg10-builder /usr/local/bin/pg_restore /usr/local/pgsql-10/
COPY --from=pg10-builder /usr/local/bin/psql /usr/local/pgsql-10/
COPY --from=pg11-builder /usr/local/bin/pg_dump /usr/local/pgsql-11/
COPY --from=pg11-builder /usr/local/bin/pg_dumpall /usr/local/pgsql-11/
COPY --from=pg11-builder /usr/local/bin/pg_restore /usr/local/pgsql-11/
COPY --from=pg11-builder /usr/local/bin/psql /usr/local/pgsql-11/
WORKDIR /pgadmin4
ENV PYTHONPATH=/pgadmin4
#Copy in the docs and JS/CSS bundles
COPY --from=node-builder /pgadmin4/web/pgadmin/static/js/generated/ /pgadmin4/pgadmin/static/js/generated/
COPY --from=docs-builder /pgadmin4/docs/en_US/_build/html/ /pgadmin4/docs/
# Install build-dependencies, build & install C extensions and purge deps in one RUN step
# so that deps do not increase the size of resulting image by remaining in layers
COPY ./pgadmin4/requirements.txt /pgadmin4
RUN apk add --no-cache --virtual build-deps build-base postgresql-dev libffi-dev linux-headers && \
apk add postfix postgresql-client postgresql-libs && \
pip install --upgrade pip && \
pip install --no-cache-dir -r requirements.txt && \
pip install --no-cache-dir gunicorn && \
apk del --no-cache build-deps
# Copy the code
COPY ./pgadmin4/web /pgadmin4
COPY ./run_pgadmin.py /pgadmin4
COPY ./config_distro.py /pgadmin4
COPY ./entrypoint.sh /entrypoint.sh
# Precompile and optimize python code to save time and space on startup
RUN python -O -m compileall /pgadmin4
# Finish up
VOLUME /var/lib/pgadmin
EXPOSE 80 443
ENTRYPOINT ["/entrypoint.sh"]
+13 -118
View File
@@ -1,129 +1,24 @@
This directory contains the files required to create a docker container running pgAdmin.
This directory contains the files required to create a docker container running
pgAdmin.
Building
========
Whilst you can just use the Dockerfile directly, it requires that various pre-configuration steps are performed, for
example, the pgAdmin web code must be copied to `./web`, Sphinx documentation source must be copied to `./docs`
and `requirements.txt` is also expected to be in this directory.
From the top level directory of the pgAdmin source tree, simply run:
The recommended (and easy) way to build the container is to do:
docker build .
```console
cd $PGADMIN_SRC/
workon pgadmin-venv
make docker
```
You can also run 'make docker', which will call 'docker build .' but also tag
the image like:
This will call the build script $PGADMIN_SRC/pkg/docker/build.sh which will prepare a staging directory containing all
the required files, then build the container and push it to your repo.
pgadmin4 pgadmin4:latest pgadmin4:4 pgadmin4:4.12
WARNING: The build should be run in a CLEAN source tree. Whilst some potentially
dangerous files such as config_local.py or log files will be explicitly
excluded from the final image, other files will not be.
Running
=======
Environment Variables
---------------------
The container will accept the following variables at startup:
*PGADMIN_DEFAULT_EMAIL*
This is the email address used when setting up the initial administrator account
to login to pgAdmin. This variable is required and must be set at launch time.
*PGADMIN_DEFAULT_PASSWORD*
This is the password used when setting up the initial administrator account to
login to pgAdmin. This variable is required and must be set at launch time.
*PGADMIN_ENABLE_TLS*
Default: <null>
If left un-set, the container will listen on port 80 for connections in plain
text. If set to any value, the container will listen on port 443 for TLS
connections.
When TLS is enabled, a certificate and key must be provided. Typically these
should be stored on the host file system and mounted from the container. The
expected paths are /certs/server.crt and /certs/server.key
*PGADMIN_LISTEN_PORT*
Default: 80 or 443 (if TLS is enabled)
Allows the port that the server listens on to be set to a specific value rather
than using the default.
*GUNICORN_THREADS*
Default: 25
Adjust the number of threads the Gunicorn server uses to handle incoming
requests. This should typically be left as-is, except in highly loaded systems
where it may be increased.
Mapped Files and Directories
----------------------------
The following files or directories can be mapped from the container onto the
host machine to allow configuration to be customised and shared between
instances:
*/var/lib/pgadmin*
This is the working directory in which pgAdmin stores session data, user files,
configuration files, and it's configuration database. Mapping this directory
onto the host machine gives you an easy way to maintain configuration between
invocations of the container.
*/pgadmin4/config_local.py*
This file can be used to override configuration settings in pgAdmin. Settings
found in config.py can be overridden with deployment specific values if
required.
*/pgadmin4/servers.json*
If this file is mapped, server definitions found in it will be loaded at launch
time. This allows connection information to be pre-loaded into the instance of
pgAdmin in the container.
*/certs/server.cert*
If TLS is enabled, this file will be used as the servers TLS certificate.
*/certs/server.key*
If TLS is enabled, this file will be used as the key file for the servers TLS
certificate.
Examples
--------
Run a simple container over port 80:
```
docker pull dpage/pgadmin4
docker run -p 80:80 \
-e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
-e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
-d dpage/pgadmin4
```
Run a TLS secured container using a shared config/storage directory in
/private/var/lib/pgadmin on the host, and servers pre-loaded from
/tmp/servers.json on the host:
```
docker pull dpage/pgadmin4
docker run -p 443:443 \
-v "/private/var/lib/pgadmin:/var/lib/pgadmin" \
-v "/path/to/certificate.cert:/certs/server.cert" \
-v "/path/to/certificate.key:/certs/server.key" \
-v "/tmp/servers.json:/servers.json" \
-e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
-e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
-e "PGADMIN_ENABLE_TLS=True" \
-d dpage/pgadmin4
```
See the documentation at docs/en_US/container_deployment.rst for information on
running the container.
-62
View File
@@ -1,62 +0,0 @@
#!/bin/bash
########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2019, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
#########################################################################
# Runtime checks
if [ ! -d runtime -a ! -d web ]; then
echo This script must be run from the top-level directory of the source tree.
exit 1
fi
if [ ! -d .git -a ! -f .git/config ]; then
echo This script must be run from a git checkout of the source tree.
exit 1
fi
# Get the required package info
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
export APP_LONG_VERSION=${APP_LONG_VERSION}-${APP_SUFFIX}
fi
CONTAINER_NAME=`echo ${APP_NAME} | sed 's/ //g' | awk '{print tolower($0)}'`
# Output basic details to show we're working
echo Building Docker Container for ${APP_NAME} version ${APP_LONG_VERSION}...
# Create/clearout the build directory
echo Creating/cleaning required directories...
if [ -d docker-build ]; then
rm -rf docker-build
fi
mkdir -p docker-build/pgadmin4
# Build the clean tree
echo Copying source tree...
git archive HEAD -- docs web requirements.txt | tar xvf - -C docker-build/pgadmin4
# Copy the Docker specific assets into place
cp pkg/docker/Dockerfile \
pkg/docker/entrypoint.sh \
pkg/docker/config_distro.py \
pkg/docker/run_pgadmin.py \
pkg/docker/.dockerignore \
docker-build/
# Build the container
docker build docker-build -t ${CONTAINER_NAME} \
-t ${CONTAINER_NAME}:latest \
-t ${CONTAINER_NAME}:${APP_RELEASE} \
-t ${CONTAINER_NAME}:${APP_LONG_VERSION}
-4
View File
@@ -1,4 +0,0 @@
HELP_PATH = '../../docs'
DEFAULT_BINARY_PATHS = {
'pg': '/usr/local/pgsql-11'
}
+19 -1
View File
@@ -1,5 +1,23 @@
#!/bin/sh
# Create config_distro.py. This has some default config, as well as anything
# provided by the user through the PGADMIN_CONFIG_* environment variables.
# Only write the file on first launch.
if [ ! -f /pgadmin4/config_distro.py ]; then
cat << EOF > /pgadmin4/config_distro.py
HELP_PATH = '../../docs'
DEFAULT_BINARY_PATHS = {
'pg': '/usr/local/pgsql-11'
}
EOF
# This is a bit kludgy, but necessary as the container uses BusyBox/ash as
# it's shell and not bash which would allow a much cleaner implementation
for var in $(env | grep PGADMIN_CONFIG_ | cut -d "=" -f 1); do
echo ${var#PGADMIN_CONFIG_} = $(eval "echo \$$var") >> /pgadmin4/config_distro.py
done
fi
if [ ! -f /var/lib/pgadmin/pgadmin4.db ]; then
if [ -z "${PGADMIN_DEFAULT_EMAIL}" -o -z "${PGADMIN_DEFAULT_PASSWORD}" ]; then
echo 'You need to specify PGADMIN_DEFAULT_EMAIL and PGADMIN_DEFAULT_PASSWORD environment variables'
@@ -15,7 +33,7 @@ if [ ! -f /var/lib/pgadmin/pgadmin4.db ]; then
# Importing pgadmin4 (from this script) is enough
python run_pgadmin.py
export PGADMIN_SERVER_JSON_FILE=${PGADMIN_SERVER_JSON:-/pgadmin4/servers.json}
export PGADMIN_SERVER_JSON_FILE=${PGADMIN_SERVER_JSON_FILE:-/pgadmin4/servers.json}
# Pre-load any required servers
if [ -f "${PGADMIN_SERVER_JSON_FILE}" ]; then
/usr/local/bin/python /pgadmin4/setup.py --load-servers "${PGADMIN_SERVER_JSON_FILE}" --user ${PGADMIN_DEFAULT_EMAIL}
+2 -2
View File
@@ -8,9 +8,9 @@
<key>CFBundleName</key>
<string>pgAdmin 4</string>
<key>CFBundleShortVersionString</key>
<string>4.12.0</string>
<string>4.13.0</string>
<key>CFBundleVersion</key>
<string>4.12.0</string>
<string>4.13.0</string>
<key>LSMinimumSystemVersion</key>
<string>10.10</string>
<key>NSHumanReadableCopyright</key>
+1 -1
View File
@@ -1,4 +1,4 @@
VERSION = 4.12.0.0
VERSION = 4.13.0.0
QMAKE_TARGET_COMPANY = "The pgAdmin Development Team"
QMAKE_TARGET_PRODUCT = "pgAdmin 4"
QMAKE_TARGET_DESCRIPTION = "pgAdmin 4 Desktop Runtime"
+6 -2
View File
@@ -50,7 +50,7 @@ APP_ICON = 'pg-icon'
# Application version number components
APP_RELEASE = 4
APP_REVISION = 12
APP_REVISION = 13
# Application version suffix, e.g. 'beta1', 'dev'. Usually an empty string
# for GA releases.
@@ -59,7 +59,7 @@ APP_SUFFIX = ''
# Numeric application version for upgrade checks. Should be in the format:
# [X]XYYZZ, where X is the release version, Y is the revision, with a leading
# zero if needed, and Z represents the suffix, with a leading zero if needed
APP_VERSION_INT = 41200
APP_VERSION_INT = 41300
# DO NOT CHANGE!
# The application version string, constructed from the components
@@ -85,6 +85,7 @@ LANGUAGES = {
'zh': 'Chinese (Simplified)',
'fr': 'French',
'de': 'German',
'it': 'Italian',
'ja': 'Japanese',
'ko': 'Korean',
'pl': 'Polish',
@@ -163,6 +164,9 @@ SECURITY_PASSWORD_HASH = 'pbkdf2_sha512'
# has no effect on <= Python 2.7.
MINIFY_PAGE = True
# Set the cache control max age for static files in flask to 1 year
SEND_FILE_MAX_AGE_DEFAULT = 31556952
# This will be added to static urls as url parameter with value as
# APP_VERSION_INT for cache busting on version upgrade. If the value is set as
# None or empty string then it will not be added.
+91
View File
@@ -0,0 +1,91 @@
"""Change the not null constraints for port, username as it should not
compulsory when service is provided. RM #4642
Revision ID: a77a0932a568
Revises: 35f29b1701bd
Create Date: 2019-09-09 15:41:30.084753
"""
from alembic import op
import sqlalchemy as sa
from pgadmin.model import db
# revision identifiers, used by Alembic.
revision = 'a77a0932a568'
down_revision = '35f29b1701bd'
branch_labels = None
depends_on = None
def upgrade():
# To Save previous data
db.engine.execute("ALTER TABLE server RENAME TO server_old")
# Create table with drop constraint for port and username definition
db.engine.execute("""
CREATE TABLE server (
id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
servergroup_id INTEGER NOT NULL,
name VARCHAR(128) NOT NULL,
host VARCHAR(128),
port INTEGER,
maintenance_db VARCHAR(64) NOT NULL,
username VARCHAR(64),
password VARCHAR(64),
role VARCHAR(64),
ssl_mode VARCHAR(16) NOT NULL CHECK(ssl_mode IN
( 'allow' , 'prefer' , 'require' , 'disable' ,
'verify-ca' , 'verify-full' )
),
comment VARCHAR(1024),
discovery_id VARCHAR(128),
hostaddr TEXT(1024),
db_res TEXT,
passfile TEXT,
sslcert TEXT,
sslkey TEXT,
sslrootcert TEXT,
sslcrl TEXT,
sslcompression INTEGER DEFAULT 0,
bgcolor TEXT(10),
fgcolor TEXT(10),
service TEXT,
use_ssh_tunnel INTEGER DEFAULT 0,
tunnel_host TEXT,
tunnel_port TEXT,
tunnel_username TEXT,
tunnel_authentication INTEGER DEFAULT 0,
tunnel_identity_file TEXT, connect_timeout INTEGER DEFAULT 0, tunnel_password TEXT(64),
PRIMARY KEY(id),
FOREIGN KEY(user_id) REFERENCES user(id),
FOREIGN KEY(servergroup_id) REFERENCES servergroup(id)
)
""")
# Copy old data again into table
db.engine.execute("""
INSERT INTO server (
id, user_id, servergroup_id, name, host, port, maintenance_db,
username, password, role, ssl_mode, comment, discovery_id, hostaddr,
db_res, passfile, sslcert, sslkey, sslrootcert, sslcrl,
sslcompression, bgcolor, fgcolor, service, use_ssh_tunnel,
tunnel_host, tunnel_port, tunnel_username, tunnel_authentication,
tunnel_identity_file
) SELECT
id, user_id, servergroup_id, name, host, port, maintenance_db,
username, password, role, ssl_mode, comment, discovery_id, hostaddr,
db_res, passfile, sslcert, sslkey, sslrootcert, sslcrl,
sslcompression, bgcolor, fgcolor, service, use_ssh_tunnel,
tunnel_host, tunnel_port, tunnel_username, tunnel_authentication,
tunnel_identity_file
FROM server_old""")
# Remove old data
db.engine.execute("DROP TABLE server_old")
def downgrade():
pass
@@ -723,9 +723,8 @@ class ServerNode(PGChildNodeView):
"""Add a server node to the settings database"""
required_args = [
u'name',
u'port',
u'db',
u'sslmode',
u'username'
]
data = request.form if request.form else json.loads(
@@ -741,7 +740,8 @@ class ServerNode(PGChildNodeView):
if 'service' in data and not data['service']:
required_args.extend([
u'host',
u'db',
u'port',
u'username',
u'role'
])
for arg in required_args:
@@ -0,0 +1,2 @@
COMMENT ON CAST (money AS bigint)
IS 'Cast from money to bigint';
@@ -0,0 +1,2 @@
COMMENT ON CAST (money AS bigint)
IS 'Cast from money to bigint';
@@ -0,0 +1,2 @@
CREATE CAST (money AS bigint)
WITHOUT FUNCTION;
@@ -0,0 +1,3 @@
CREATE CAST (money AS bigint)
WITHOUT FUNCTION
AS IMPLICIT;
@@ -5,6 +5,7 @@
"name": "Create IMPLICIT Cast",
"endpoint": "NODE-cast.obj",
"sql_endpoint": "NODE-cast.sql_id",
"msql_endpoint": "NODE-cast.msql",
"data": {
"castcontext": "IMPLICIT",
"encoding": "UTF8",
@@ -12,17 +13,20 @@
"srctyp": "money",
"trgtyp": "bigint"
},
"expected_sql_file": "create_implicit_cast.sql"
"expected_sql_file": "create_implicit_cast.sql",
"expected_msql_file": "create_implicit_cast_msql.sql"
},
{
"type": "alter",
"name": "Alter IMPLICIT Cast",
"endpoint": "NODE-cast.obj_id",
"sql_endpoint": "NODE-cast.sql_id",
"msql_endpoint": "NODE-cast.msql_id",
"data": {
"description": "Cast from money to bigint"
},
"expected_sql_file": "alter_implicit_cast.sql"
"expected_sql_file": "alter_implicit_cast.sql",
"expected_msql_file": "alter_implicit_cast_msql.sql"
},
{
"type": "delete",
@@ -37,6 +41,7 @@
"name":"Create EXPLICIT Cast",
"endpoint": "NODE-cast.obj",
"sql_endpoint": "NODE-cast.sql_id",
"msql_endpoint": "NODE-cast.msql",
"data": {
"castcontext": "EXPLICIT",
"encoding": "UTF8",
@@ -44,17 +49,20 @@
"srctyp": "money",
"trgtyp": "bigint"
},
"expected_sql": "-- Cast: money -> bigint\n\n-- DROP CAST (money AS bigint);\n\nCREATE CAST (money AS bigint)\n\tWITHOUT FUNCTION;"
"expected_sql": "-- Cast: money -> bigint\n\n-- DROP CAST (money AS bigint);\n\nCREATE CAST (money AS bigint)\n\tWITHOUT FUNCTION;",
"expected_msql_file": "create_explicit_cast_msql.sql"
},
{
"type": "alter",
"name": "Alter EXPLICIT Cast",
"endpoint": "NODE-cast.obj_id",
"sql_endpoint": "NODE-cast.sql_id",
"msql_endpoint": "NODE-cast.msql_id",
"data": {
"description": "Cast from money to bigint"
},
"expected_sql": "-- Cast: money -> bigint\n\n-- DROP CAST (money AS bigint);\n\nCREATE CAST (money AS bigint)\n\tWITHOUT FUNCTION;\n\nCOMMENT ON CAST (money AS bigint) IS 'Cast from money to bigint';"
"expected_sql": "-- Cast: money -> bigint\n\n-- DROP CAST (money AS bigint);\n\nCREATE CAST (money AS bigint)\n\tWITHOUT FUNCTION;\n\nCOMMENT ON CAST (money AS bigint) IS 'Cast from money to bigint';",
"expected_msql_file": "alter_explicit_cast_msql.sql"
},
{
"type": "delete",
@@ -0,0 +1,2 @@
ALTER EXTENSION sslinfo
SET SCHEMA public;
@@ -0,0 +1,2 @@
ALTER EXTENSION citext
UPDATE TO "1.1";
@@ -0,0 +1,3 @@
CREATE EXTENSION sslinfo
SCHEMA test_extension_schema
VERSION "1.0";
@@ -5,23 +5,27 @@
"name": "Create Extension with all options",
"endpoint": "NODE-extension.obj",
"sql_endpoint": "NODE-extension.sql_id",
"msql_endpoint": "NODE-extension.msql",
"data": {
"name": "sslinfo",
"schema": "test_extension_schema",
"version": "1.0"
},
"expected_sql_file": "create_extension_with_all_options.sql",
"expected_msql_file": "msql_create_extension_with_all_options.sql",
"precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='sslinfo' and e2.version='1.0';"
},
{
"type": "alter",
"name": "Alter Extension version",
"name": "Alter Extension schema",
"endpoint": "NODE-extension.obj_id",
"sql_endpoint": "NODE-extension.sql_id",
"msql_endpoint": "NODE-extension.msql_id",
"data": {
"schema": "public"
},
"expected_sql_file": "alter_extension_schema.sql",
"expected_msql_file": "msql_alter_extension_schema.sql",
"precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='sslinfo' and e2.version='1.0';"
},
{
@@ -36,11 +40,13 @@
"name": "Create Extension with default schema",
"endpoint": "NODE-extension.obj",
"sql_endpoint": "NODE-extension.sql_id",
"msql_endpoint": "NODE-extension.msql",
"data": {
"name": "citext",
"version": "1.0"
},
"expected_sql_file": "create_extension_with_default_schema.sql",
"expected_msql_file": "msql_create_extension_with_default_schema.sql",
"precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='citext' and e2.version='1.0';"
},
{
@@ -48,10 +54,12 @@
"name": "Alter Extension version",
"endpoint": "NODE-extension.obj_id",
"sql_endpoint": "NODE-extension.sql_id",
"msql_endpoint": "NODE-extension.msql_id",
"data": {
"version": "1.1"
},
"expected_sql_file": "alter_extension_version.sql",
"expected_msql_file": "msql_alter_extension_version.sql",
"precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='citext' and e2.version='1.1';"
},
{
@@ -0,0 +1,2 @@
ALTER EXTENSION sslinfo
SET SCHEMA public;
@@ -0,0 +1,3 @@
CREATE EXTENSION sslinfo
SCHEMA test_extension_schema
VERSION "1.0";
@@ -5,23 +5,27 @@
"name": "Create Extension with all options",
"endpoint": "NODE-extension.obj",
"sql_endpoint": "NODE-extension.sql_id",
"msql_endpoint": "NODE-extension.msql",
"data": {
"name": "sslinfo",
"schema": "test_extension_schema",
"version": "1.0"
},
"expected_sql_file": "create_extension_with_all_options.sql",
"expected_msql_file": "msql_create_extension_with_all_options.sql",
"precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='sslinfo' and e2.version='1.0';"
},
{
"type": "alter",
"name": "Alter Extension version",
"name": "Alter Extension schema",
"endpoint": "NODE-extension.obj_id",
"sql_endpoint": "NODE-extension.sql_id",
"msql_endpoint": "NODE-extension.msql_id",
"data": {
"schema": "public"
},
"expected_sql_file": "alter_extension_schema.sql",
"expected_msql_file": "msql_alter_extension_schema.sql",
"precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='sslinfo' and e2.version='1.0';"
},
{
@@ -0,0 +1,2 @@
ALTER EXTENSION sslinfo
SET SCHEMA public;
@@ -0,0 +1,2 @@
ALTER EXTENSION adminpack
UPDATE TO "1.1";
@@ -0,0 +1,3 @@
CREATE EXTENSION sslinfo
SCHEMA test_extension_schema
VERSION "1.2";
@@ -0,0 +1,2 @@
CREATE EXTENSION adminpack
VERSION "1.0";
@@ -5,23 +5,27 @@
"name": "Create Extension with all options",
"endpoint": "NODE-extension.obj",
"sql_endpoint": "NODE-extension.sql_id",
"msql_endpoint": "NODE-extension.msql",
"data": {
"name": "sslinfo",
"schema": "test_extension_schema",
"version": "1.2"
},
"expected_sql_file": "create_extension_with_all_options.sql",
"expected_msql_file": "msql_create_extension_with_all_options.sql",
"precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='sslinfo' and e2.version='1.2';"
},
{
"type": "alter",
"name": "Alter Extension version",
"name": "Alter Extension schema",
"endpoint": "NODE-extension.obj_id",
"sql_endpoint": "NODE-extension.sql_id",
"msql_endpoint": "NODE-extension.msql_id",
"data": {
"schema": "public"
},
"expected_sql_file": "alter_extension_schema.sql",
"expected_msql_file": "msql_alter_extension_schema.sql",
"precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='sslinfo' and e2.version='1.2';"
},
{
@@ -36,11 +40,13 @@
"name": "Create Extension with default schema",
"endpoint": "NODE-extension.obj",
"sql_endpoint": "NODE-extension.sql_id",
"msql_endpoint": "NODE-extension.msql",
"data": {
"name": "adminpack",
"version": "1.0"
},
"expected_sql_file": "create_extension_with_default_schema.sql",
"expected_msql_file": "msql_create_extension_with_default_schema.sql",
"precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='adminpack' and e2.version='1.0';"
},
{
@@ -48,10 +54,12 @@
"name": "Alter Extension version",
"endpoint": "NODE-extension.obj_id",
"sql_endpoint": "NODE-extension.sql_id",
"msql_endpoint": "NODE-extension.msql_id",
"data": {
"version": "1.1"
},
"expected_sql_file": "alter_extension_version.sql",
"expected_msql_file": "msql_alter_extension_version.sql",
"precondition_sql": "select count(e1.name) \nfrom pg_available_extensions e1, pg_available_extension_versions e2\nwhere e1.name = e2.name and e1.name='adminpack' and e2.version='1.0';"
},
{
@@ -19,3 +19,4 @@ FROM
LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
GROUP BY g.rolname, gt.rolname
ORDER BY grantee
@@ -15,7 +15,6 @@ CREATE SERVER {{ conn|qtIdent(data.name) }}{% if data.fsrvtype %}
{# ============= Set the owner for foreign server ============= #}
{% if data.fsrvowner %}
ALTER SERVER {{ conn|qtIdent(data.name) }}
OWNER TO {{ conn|qtIdent(data.fsrvowner) }};
{% endif %}
@@ -31,4 +31,4 @@ COMMENT ON SERVER {{ conn|qtIdent(data.name) }}
{% for priv in data.fsrvacl %}
{{ PRIVILEGE.APPLY(conn, 'FOREIGN SERVER', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}{% endfor %}
{% endif %}
{% endif %}
{% endif %}
@@ -0,0 +1,13 @@
-- Foreign Server: FS_$%{}[]()&*^!@"'`\/#
-- DROP SERVER FS_$%{}[]()&*^!@"'`\/#
CREATE SERVER "FS_$%{}[]()&*^!@""'`\/#"
VERSION '1.1'
FOREIGN DATA WRAPPER test_fdw_for_fs;
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
OWNER TO postgres;
COMMENT ON SERVER "FS_$%{}[]()&*^!@""'`\/#"
IS 'Test comment';
@@ -0,0 +1,5 @@
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
VERSION 1.1;
COMMENT ON SERVER "FS_$%{}[]()&*^!@""'`\/#"
IS 'Test comment';
@@ -0,0 +1,18 @@
-- Foreign Server: FS_$%{}[]()&*^!@"'`\/#
-- DROP SERVER FS_$%{}[]()&*^!@"'`\/#
CREATE SERVER "FS_$%{}[]()&*^!@""'`\/#"
VERSION '1.1'
FOREIGN DATA WRAPPER test_fdw_for_fs
OPTIONS (host '192.168.1.1', dbname 'edb', port '5450');
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
OWNER TO postgres;
COMMENT ON SERVER "FS_$%{}[]()&*^!@""'`\/#"
IS 'Test comment';
GRANT USAGE ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" TO PUBLIC;
GRANT USAGE ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" TO postgres;
@@ -0,0 +1,4 @@
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
OPTIONS (ADD host '192.168.1.1', ADD dbname 'edb', ADD port '5450');
GRANT USAGE ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" TO PUBLIC;
@@ -0,0 +1,15 @@
-- Foreign Server: FS_$%{}[]()&*^!@"'`\/#
-- DROP SERVER FS_$%{}[]()&*^!@"'`\/#
CREATE SERVER "FS_$%{}[]()&*^!@""'`\/#"
VERSION '1.1'
FOREIGN DATA WRAPPER test_fdw_for_fs;
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
OWNER TO postgres;
COMMENT ON SERVER "FS_$%{}[]()&*^!@""'`\/#"
IS 'Test comment';
GRANT USAGE ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" TO postgres;
@@ -0,0 +1,4 @@
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
OPTIONS (DROP host, DROP dbname, DROP port);
REVOKE ALL ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" FROM PUBLIC;
@@ -0,0 +1,18 @@
-- Foreign Server: FS_$%{}[]()&*^!@"'`\/#
-- DROP SERVER FS_$%{}[]()&*^!@"'`\/#
CREATE SERVER "FS_$%{}[]()&*^!@""'`\/#"
TYPE 'oracle'
VERSION '1.1'
FOREIGN DATA WRAPPER test_fdw_for_fs
OPTIONS (host '192.168.1.1', dbname 'edb', port '5450');
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
OWNER TO postgres;
COMMENT ON SERVER "FS_$%{}[]()&*^!@""'`\/#"
IS 'Test comment';
GRANT USAGE ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" TO PUBLIC;
GRANT USAGE ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" TO postgres;
@@ -0,0 +1,13 @@
CREATE SERVER "FS_$%{}[]()&*^!@""'`\/#"
TYPE 'oracle'
VERSION 1.1
FOREIGN DATA WRAPPER test_fdw_for_fs
OPTIONS (host '192.168.1.1', dbname 'edb', port '5450');
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
OWNER TO postgres;
COMMENT ON SERVER "FS_$%{}[]()&*^!@""'`\/#"
IS 'Test comment';
GRANT USAGE ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" TO PUBLIC;
@@ -0,0 +1,159 @@
{
"scenarios": [
{
"type": "create",
"name": "Create FDW for foreign server",
"endpoint": "NODE-foreign_data_wrapper.obj",
"sql_endpoint": "NODE-foreign_data_wrapper.sql_id",
"data": {
"name": "test_fdw_for_fs",
"fdwacl": [],
"fdwoptions": []
},
"store_object_id": "True"
}, {
"type": "create",
"name": "Create foreign server with all options",
"endpoint": "NODE-foreign_server.obj",
"sql_endpoint": "NODE-foreign_server.sql_id",
"msql_endpoint": "NODE-foreign_server.msql",
"data": {
"name":"FS_$%{}[]()&*^!@\"'`\\/#",
"fsrvtype":"oracle",
"fsrvversion":"1.1",
"fsrvoptions":[
{
"fsrvoption":"host",
"fsrvvalue":"192.168.1.1"
},{
"fsrvoption":"dbname",
"fsrvvalue":"edb"
},{
"fsrvoption":"port",
"fsrvvalue":"5450"
}],
"fsrvowner":"postgres",
"description":"Test comment",
"fsrvacl":[{
"grantee":"PUBLIC",
"grantor":"postgres",
"privileges":[{
"privilege_type":"U",
"privilege":true,
"with_grant":false
}]
}]
},
"expected_sql_file": "create_fs_all_options.sql",
"expected_msql_file": "create_fs_all_options_msql.sql"
}, {
"type": "delete",
"name": "Drop foreign server",
"endpoint": "NODE-foreign_server.delete_id",
"data": {
"name": "FS_$%{}[]()&*^!@\"'`\\/#"
}
}, {
"type": "create",
"name": "Create foreign server",
"endpoint": "NODE-foreign_server.obj",
"sql_endpoint": "NODE-foreign_server.sql_id",
"data": {
"name":"FS_$%{}[]()&*^!@\"'`\\/#",
"fsrvowner":"postgres"
}
}, {
"type": "alter",
"name": "Alter foreign server comment and version",
"endpoint": "NODE-foreign_server.obj_id",
"sql_endpoint": "NODE-foreign_server.sql_id",
"msql_endpoint": "NODE-foreign_server.msql_id",
"data": {
"fsrvversion":"1.1",
"description":"Test comment"
},
"expected_sql_file": "alter_comment_version.sql",
"expected_msql_file": "alter_comment_version_msql.sql"
}, {
"type": "alter",
"name": "Alter foreign server add options and privileges",
"endpoint": "NODE-foreign_server.obj_id",
"sql_endpoint": "NODE-foreign_server.sql_id",
"msql_endpoint": "NODE-foreign_server.msql_id",
"data": {
"fsrvoptions":{
"added": [{
"fsrvoption":"host",
"fsrvvalue":"192.168.1.1"
},{
"fsrvoption":"dbname",
"fsrvvalue":"edb"
},{
"fsrvoption":"port",
"fsrvvalue":"5450"
}]
},
"fsrvacl":{
"added": [{
"grantee":"PUBLIC",
"grantor":"postgres",
"privileges":[{
"privilege_type":"U",
"privilege":true,
"with_grant":false
}]
}]
}
},
"expected_sql_file": "alter_options_privileges.sql",
"expected_msql_file": "alter_options_privileges_msql.sql"
}, {
"type": "alter",
"name": "Alter foreign server add options and privileges",
"endpoint": "NODE-foreign_server.obj_id",
"sql_endpoint": "NODE-foreign_server.sql_id",
"msql_endpoint": "NODE-foreign_server.msql_id",
"data": {
"fsrvoptions":{
"deleted": [{
"fsrvoption":"host",
"fsrvvalue":"192.168.1.1"
},{
"fsrvoption":"dbname",
"fsrvvalue":"edb"
},{
"fsrvoption":"port",
"fsrvvalue":"5450"
}]
},
"fsrvacl":{
"deleted": [{
"grantee":"PUBLIC",
"grantor":"postgres",
"privileges":[{
"privilege_type":"U",
"privilege":true,
"with_grant":false
}]
}]
}
},
"expected_sql_file": "alter_remove_options_priv.sql",
"expected_msql_file": "alter_remove_options_priv_msql.sql"
}, {
"type": "delete",
"name": "Drop foreign server",
"endpoint": "NODE-foreign_server.delete_id",
"data": {
"name": "FS_$%{}[]()&*^!@\"'`\\/#"
}
}, {
"type": "delete",
"name": "Drop FDW",
"endpoint": "NODE-foreign_data_wrapper.delete_id",
"data": {
"name": "test_fdw_for_fs"
}
}
]
}
@@ -0,0 +1,13 @@
-- Foreign Server: FS_$%{}[]()&*^!@"'`\/#
-- DROP SERVER FS_$%{}[]()&*^!@"'`\/#
CREATE SERVER "FS_$%{}[]()&*^!@""'`\/#"
VERSION '1.1'
FOREIGN DATA WRAPPER test_fdw_for_fs;
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
OWNER TO enterprisedb;
COMMENT ON SERVER "FS_$%{}[]()&*^!@""'`\/#"
IS 'Test comment';
@@ -0,0 +1,5 @@
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
VERSION 1.1;
COMMENT ON SERVER "FS_$%{}[]()&*^!@""'`\/#"
IS 'Test comment';
@@ -0,0 +1,18 @@
-- Foreign Server: FS_$%{}[]()&*^!@"'`\/#
-- DROP SERVER FS_$%{}[]()&*^!@"'`\/#
CREATE SERVER "FS_$%{}[]()&*^!@""'`\/#"
VERSION '1.1'
FOREIGN DATA WRAPPER test_fdw_for_fs
OPTIONS (host '192.168.1.1', dbname 'edb', port '5450');
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
OWNER TO enterprisedb;
COMMENT ON SERVER "FS_$%{}[]()&*^!@""'`\/#"
IS 'Test comment';
GRANT USAGE ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" TO PUBLIC;
GRANT USAGE ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" TO enterprisedb;
@@ -0,0 +1,4 @@
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
OPTIONS (ADD host '192.168.1.1', ADD dbname 'edb', ADD port '5450');
GRANT USAGE ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" TO PUBLIC;
@@ -0,0 +1,15 @@
-- Foreign Server: FS_$%{}[]()&*^!@"'`\/#
-- DROP SERVER FS_$%{}[]()&*^!@"'`\/#
CREATE SERVER "FS_$%{}[]()&*^!@""'`\/#"
VERSION '1.1'
FOREIGN DATA WRAPPER test_fdw_for_fs;
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
OWNER TO enterprisedb;
COMMENT ON SERVER "FS_$%{}[]()&*^!@""'`\/#"
IS 'Test comment';
GRANT USAGE ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" TO enterprisedb;
@@ -0,0 +1,4 @@
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
OPTIONS (DROP host, DROP dbname, DROP port);
REVOKE ALL ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" FROM PUBLIC;
@@ -0,0 +1,18 @@
-- Foreign Server: FS_$%{}[]()&*^!@"'`\/#
-- DROP SERVER FS_$%{}[]()&*^!@"'`\/#
CREATE SERVER "FS_$%{}[]()&*^!@""'`\/#"
TYPE 'oracle'
VERSION '1.1'
FOREIGN DATA WRAPPER test_fdw_for_fs
OPTIONS (host '192.168.1.1', dbname 'edb', port '5450');
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
OWNER TO enterprisedb;
COMMENT ON SERVER "FS_$%{}[]()&*^!@""'`\/#"
IS 'Test comment';
GRANT USAGE ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" TO PUBLIC;
GRANT USAGE ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" TO enterprisedb;
@@ -0,0 +1,13 @@
CREATE SERVER "FS_$%{}[]()&*^!@""'`\/#"
TYPE 'oracle'
VERSION 1.1
FOREIGN DATA WRAPPER test_fdw_for_fs
OPTIONS (host '192.168.1.1', dbname 'edb', port '5450');
ALTER SERVER "FS_$%{}[]()&*^!@""'`\/#"
OWNER TO enterprisedb;
COMMENT ON SERVER "FS_$%{}[]()&*^!@""'`\/#"
IS 'Test comment';
GRANT USAGE ON FOREIGN SERVER "FS_$%{}[]()&*^!@""'`\/#" TO PUBLIC;
@@ -0,0 +1,159 @@
{
"scenarios": [
{
"type": "create",
"name": "Create FDW for foreign server",
"endpoint": "NODE-foreign_data_wrapper.obj",
"sql_endpoint": "NODE-foreign_data_wrapper.sql_id",
"data": {
"name": "test_fdw_for_fs",
"fdwacl": [],
"fdwoptions": []
},
"store_object_id": "True"
}, {
"type": "create",
"name": "Create foreign server with all options",
"endpoint": "NODE-foreign_server.obj",
"sql_endpoint": "NODE-foreign_server.sql_id",
"msql_endpoint": "NODE-foreign_server.msql",
"data": {
"name":"FS_$%{}[]()&*^!@\"'`\\/#",
"fsrvtype":"oracle",
"fsrvversion":"1.1",
"fsrvoptions":[
{
"fsrvoption":"host",
"fsrvvalue":"192.168.1.1"
},{
"fsrvoption":"dbname",
"fsrvvalue":"edb"
},{
"fsrvoption":"port",
"fsrvvalue":"5450"
}],
"fsrvowner":"enterprisedb",
"description":"Test comment",
"fsrvacl":[{
"grantee":"PUBLIC",
"grantor":"enterprisedb",
"privileges":[{
"privilege_type":"U",
"privilege":true,
"with_grant":false
}]
}]
},
"expected_sql_file": "create_fs_all_options.sql",
"expected_msql_file": "create_fs_all_options_msql.sql"
}, {
"type": "delete",
"name": "Drop foreign server",
"endpoint": "NODE-foreign_server.delete_id",
"data": {
"name": "FS_$%{}[]()&*^!@\"'`\\/#"
}
}, {
"type": "create",
"name": "Create foreign server",
"endpoint": "NODE-foreign_server.obj",
"sql_endpoint": "NODE-foreign_server.sql_id",
"data": {
"name":"FS_$%{}[]()&*^!@\"'`\\/#",
"fsrvowner":"enterprisedb"
}
}, {
"type": "alter",
"name": "Alter foreign server comment and version",
"endpoint": "NODE-foreign_server.obj_id",
"sql_endpoint": "NODE-foreign_server.sql_id",
"msql_endpoint": "NODE-foreign_server.msql_id",
"data": {
"fsrvversion":"1.1",
"description":"Test comment"
},
"expected_sql_file": "alter_comment_version.sql",
"expected_msql_file": "alter_comment_version_msql.sql"
}, {
"type": "alter",
"name": "Alter foreign server add options and privileges",
"endpoint": "NODE-foreign_server.obj_id",
"sql_endpoint": "NODE-foreign_server.sql_id",
"msql_endpoint": "NODE-foreign_server.msql_id",
"data": {
"fsrvoptions":{
"added": [{
"fsrvoption":"host",
"fsrvvalue":"192.168.1.1"
},{
"fsrvoption":"dbname",
"fsrvvalue":"edb"
},{
"fsrvoption":"port",
"fsrvvalue":"5450"
}]
},
"fsrvacl":{
"added": [{
"grantee":"PUBLIC",
"grantor":"enterprisedb",
"privileges":[{
"privilege_type":"U",
"privilege":true,
"with_grant":false
}]
}]
}
},
"expected_sql_file": "alter_options_privileges.sql",
"expected_msql_file": "alter_options_privileges_msql.sql"
}, {
"type": "alter",
"name": "Alter foreign server add options and privileges",
"endpoint": "NODE-foreign_server.obj_id",
"sql_endpoint": "NODE-foreign_server.sql_id",
"msql_endpoint": "NODE-foreign_server.msql_id",
"data": {
"fsrvoptions":{
"deleted": [{
"fsrvoption":"host",
"fsrvvalue":"192.168.1.1"
},{
"fsrvoption":"dbname",
"fsrvvalue":"edb"
},{
"fsrvoption":"port",
"fsrvvalue":"5450"
}]
},
"fsrvacl":{
"deleted": [{
"grantee":"PUBLIC",
"grantor":"enterprisedb",
"privileges":[{
"privilege_type":"U",
"privilege":true,
"with_grant":false
}]
}]
}
},
"expected_sql_file": "alter_remove_options_priv.sql",
"expected_msql_file": "alter_remove_options_priv_msql.sql"
}, {
"type": "delete",
"name": "Drop foreign server",
"endpoint": "NODE-foreign_server.delete_id",
"data": {
"name": "FS_$%{}[]()&*^!@\"'`\\/#"
}
}, {
"type": "delete",
"name": "Drop FDW",
"endpoint": "NODE-foreign_data_wrapper.delete_id",
"data": {
"name": "test_fdw_for_fs"
}
}
]
}
@@ -0,0 +1,6 @@
-- User Mapping : postgres
-- DROP USER MAPPING FOR postgres SERVER test_fs_for_user_mapping
CREATE USER MAPPING FOR postgres SERVER test_fs_for_user_mapping
OPTIONS ("user" 'test_user12', password 'secret123');
@@ -0,0 +1,5 @@
-- User Mapping : postgres
-- DROP USER MAPPING FOR postgres SERVER test_fs_for_user_mapping
CREATE USER MAPPING FOR postgres SERVER test_fs_for_user_mapping;
@@ -0,0 +1,2 @@
ALTER USER MAPPING FOR postgres SERVER test_fs_for_user_mapping
OPTIONS (DROP "user", DROP password);
@@ -0,0 +1,2 @@
ALTER USER MAPPING FOR postgres SERVER test_fs_for_user_mapping
OPTIONS (SET "user" 'test_user12', SET password 'secret123');
@@ -0,0 +1,6 @@
-- User Mapping : postgres
-- DROP USER MAPPING FOR postgres SERVER test_fs_for_user_mapping
CREATE USER MAPPING FOR postgres SERVER test_fs_for_user_mapping
OPTIONS ("user" 'test_user', password 'secret');
@@ -0,0 +1,2 @@
CREATE USER MAPPING FOR postgres SERVER test_fs_for_user_mapping
OPTIONS ("user" 'test_user', password 'secret');
@@ -0,0 +1,99 @@
{
"scenarios": [
{
"type": "create",
"name": "Create FDW for user mapping",
"endpoint": "NODE-foreign_data_wrapper.obj",
"sql_endpoint": "NODE-foreign_data_wrapper.sql_id",
"data": {
"name": "test_fdw_for_user_mapping",
"fdwacl": [],
"fdwoptions": []
},
"store_object_id": "True"
}, {
"type": "create",
"name": "Create foreign server for user mapping",
"endpoint": "NODE-foreign_server.obj",
"sql_endpoint": "NODE-foreign_server.sql_id",
"data": {
"name":"test_fs_for_user_mapping"
},
"store_object_id": "True"
}, {
"type": "create",
"name": "Create User Mapping",
"endpoint": "NODE-user_mapping.obj",
"sql_endpoint": "NODE-user_mapping.sql_id",
"msql_endpoint": "NODE-user_mapping.msql",
"data": {
"name": "postgres",
"umoptions":[{
"umoption":"user",
"umvalue":"test_user"
},{
"umoption":"password",
"umvalue":"secret"
}]
},
"expected_sql_file": "create_user_mapping.sql",
"expected_msql_file": "create_user_mapping_msql.sql"
}, {
"type": "alter",
"name": "Alter user mapping options",
"endpoint": "NODE-user_mapping.obj_id",
"sql_endpoint": "NODE-user_mapping.sql_id",
"msql_endpoint": "NODE-user_mapping.msql_id",
"data": {
"umoptions":{
"changed": [{
"umoption":"user",
"umvalue":"test_user12"
},{
"umoption":"password",
"umvalue":"secret123"
}]
}
},
"expected_sql_file": "alter_options.sql",
"expected_msql_file": "alter_options_msql.sql"
}, {
"type": "alter",
"name": "Alter user mapping drop options",
"endpoint": "NODE-user_mapping.obj_id",
"sql_endpoint": "NODE-user_mapping.sql_id",
"msql_endpoint": "NODE-user_mapping.msql_id",
"data": {
"umoptions":{
"deleted": [{
"umoption":"user",
"umvalue":"test_user12"
},{
"umoption":"password",
"umvalue":"secret123"
}]
}
},
"expected_sql_file": "alter_options_deleted.sql",
"expected_msql_file": "alter_options_deleted_msql.sql"
}, {
"type": "delete",
"name": "Drop user mapping",
"endpoint": "NODE-user_mapping.delete_id"
}, {
"type": "delete",
"name": "Drop foreign server",
"endpoint": "NODE-foreign_server.delete_id",
"data": {
"name": "test_fs_for_user_mapping"
}
}, {
"type": "delete",
"name": "Drop FDW",
"endpoint": "NODE-foreign_data_wrapper.delete_id",
"data": {
"name": "test_fdw_for_user_mapping"
}
}
]
}
@@ -0,0 +1,6 @@
-- User Mapping : enterprisedb
-- DROP USER MAPPING FOR enterprisedb SERVER test_fs_for_user_mapping
CREATE USER MAPPING FOR enterprisedb SERVER test_fs_for_user_mapping
OPTIONS ("user" 'test_user12', password 'secret123');
@@ -0,0 +1,5 @@
-- User Mapping : enterprisedb
-- DROP USER MAPPING FOR enterprisedb SERVER test_fs_for_user_mapping
CREATE USER MAPPING FOR enterprisedb SERVER test_fs_for_user_mapping;
@@ -0,0 +1,2 @@
ALTER USER MAPPING FOR enterprisedb SERVER test_fs_for_user_mapping
OPTIONS (DROP "user", DROP password);
@@ -0,0 +1,2 @@
ALTER USER MAPPING FOR enterprisedb SERVER test_fs_for_user_mapping
OPTIONS (SET "user" 'test_user12', SET password 'secret123');
@@ -0,0 +1,6 @@
-- User Mapping : enterprisedb
-- DROP USER MAPPING FOR enterprisedb SERVER test_fs_for_user_mapping
CREATE USER MAPPING FOR enterprisedb SERVER test_fs_for_user_mapping
OPTIONS ("user" 'test_user', password 'secret');
@@ -0,0 +1,2 @@
CREATE USER MAPPING FOR enterprisedb SERVER test_fs_for_user_mapping
OPTIONS ("user" 'test_user', password 'secret');
@@ -0,0 +1,99 @@
{
"scenarios": [
{
"type": "create",
"name": "Create FDW for user mapping",
"endpoint": "NODE-foreign_data_wrapper.obj",
"sql_endpoint": "NODE-foreign_data_wrapper.sql_id",
"data": {
"name": "test_fdw_for_user_mapping",
"fdwacl": [],
"fdwoptions": []
},
"store_object_id": "True"
}, {
"type": "create",
"name": "Create foreign server for user mapping",
"endpoint": "NODE-foreign_server.obj",
"sql_endpoint": "NODE-foreign_server.sql_id",
"data": {
"name":"test_fs_for_user_mapping"
},
"store_object_id": "True"
}, {
"type": "create",
"name": "Create User Mapping",
"endpoint": "NODE-user_mapping.obj",
"sql_endpoint": "NODE-user_mapping.sql_id",
"msql_endpoint": "NODE-user_mapping.msql",
"data": {
"name": "enterprisedb",
"umoptions":[{
"umoption":"user",
"umvalue":"test_user"
},{
"umoption":"password",
"umvalue":"secret"
}]
},
"expected_sql_file": "create_user_mapping.sql",
"expected_msql_file": "create_user_mapping_msql.sql"
}, {
"type": "alter",
"name": "Alter user mapping options",
"endpoint": "NODE-user_mapping.obj_id",
"sql_endpoint": "NODE-user_mapping.sql_id",
"msql_endpoint": "NODE-user_mapping.msql_id",
"data": {
"umoptions":{
"changed": [{
"umoption":"user",
"umvalue":"test_user12"
},{
"umoption":"password",
"umvalue":"secret123"
}]
}
},
"expected_sql_file": "alter_options.sql",
"expected_msql_file": "alter_options_msql.sql"
}, {
"type": "alter",
"name": "Alter user mapping drop options",
"endpoint": "NODE-user_mapping.obj_id",
"sql_endpoint": "NODE-user_mapping.sql_id",
"msql_endpoint": "NODE-user_mapping.msql_id",
"data": {
"umoptions":{
"deleted": [{
"umoption":"user",
"umvalue":"test_user12"
},{
"umoption":"password",
"umvalue":"secret123"
}]
}
},
"expected_sql_file": "alter_options_deleted.sql",
"expected_msql_file": "alter_options_deleted_msql.sql"
}, {
"type": "delete",
"name": "Drop user mapping",
"endpoint": "NODE-user_mapping.delete_id"
}, {
"type": "delete",
"name": "Drop foreign server",
"endpoint": "NODE-foreign_server.delete_id",
"data": {
"name": "test_fs_for_user_mapping"
}
}, {
"type": "delete",
"name": "Drop FDW",
"endpoint": "NODE-foreign_data_wrapper.delete_id",
"data": {
"name": "test_fdw_for_user_mapping"
}
}
]
}
@@ -0,0 +1,6 @@
COMMENT ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
IS 'This is comment on custom trusted language';
GRANT USAGE ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" TO PUBLIC;
GRANT USAGE ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" TO postgres WITH GRANT OPTION;
@@ -0,0 +1,14 @@
-- Language: Lan2_$%{}[]()&*^!@"'`\/#
-- DROP LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
CREATE TRUSTED PROCEDURAL LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
HANDLER plpgsql_call_handler
INLINE plpgsql_inline_handler
VALIDATOR plpgsql_validator;
ALTER LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
OWNER TO <OWNER>;
COMMENT ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
IS 'This is comment on custom trusted language';
@@ -0,0 +1,2 @@
REVOKE ALL ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" FROM PUBLIC;
REVOKE ALL ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" FROM postgres;
@@ -0,0 +1,2 @@
ALTER LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
RENAME TO "Lan2_$%{}[]()&*^!@""'`\/#";
@@ -0,0 +1,5 @@
CREATE TRUSTED PROCEDURAL LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
HANDLER plpgsql_call_handler
INLINE plpgsql_inline_handler
VALIDATOR plpgsql_validator
;
@@ -0,0 +1,5 @@
CREATE PROCEDURAL LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
HANDLER plpgsql_call_handler
INLINE plpgsql_inline_handler
VALIDATOR plpgsql_validator
;
@@ -5,6 +5,7 @@
"name": "Create trusted language",
"endpoint": "NODE-language.obj",
"sql_endpoint": "NODE-language.sql_id",
"msql_endpoint": "NODE-language.msql",
"data": {
"name": "Lan1_$%{}[]()&*^!@\"'`\\/#",
"trusted": true,
@@ -13,23 +14,27 @@
"lanval": "plpgsql_validator",
"is_template": false
},
"expected_sql_file": "create_trusted_language.sql"
"expected_sql_file": "create_trusted_language.sql",
"expected_msql_file": "create_trusted_language_msql.sql"
},
{
"type": "alter",
"name": "Alter trusted language name",
"endpoint": "NODE-language.obj_id",
"sql_endpoint": "NODE-language.sql_id",
"msql_endpoint": "NODE-language.msql_id",
"data": {
"name": "Lan2_$%{}[]()&*^!@\"'`\\/#"
},
"expected_sql_file": "alter_trusted_lan_name.sql"
"expected_sql_file": "alter_trusted_lan_name.sql",
"expected_msql_file": "alter_trusted_lan_name_msql.sql"
},
{
"type": "alter",
"name": "Alter comment and privileges",
"endpoint": "NODE-language.obj_id",
"sql_endpoint": "NODE-language.sql_id",
"msql_endpoint": "NODE-language.msql_id",
"data": {
"description": "This is comment on custom trusted language",
"lanacl": {
@@ -53,7 +58,38 @@
}]
}
},
"expected_sql_file": "alter_comment_privileges.sql"
"expected_sql_file": "alter_comment_privileges.sql",
"expected_msql_file": "alter_comment_privileges_msql.sql"
},{
"type": "alter",
"name": "Alter revoke privileges",
"endpoint": "NODE-language.obj_id",
"sql_endpoint": "NODE-language.sql_id",
"msql_endpoint": "NODE-language.msql_id",
"data": {
"lanacl": {
"deleted":[{
"grantee": "PUBLIC",
"grantor": "postgres",
"privileges":[
{
"privilege_type": "U",
"privilege": true,
"with_grant": false
}]
},{
"grantee": "postgres",
"grantor": "postgres",
"privileges":[{
"privilege_type": "U",
"privilege": true,
"with_grant": true
}]
}]
}
},
"expected_sql_file": "alter_revoke_privileges.sql",
"expected_msql_file": "alter_revoke_privileges_msql.sql"
},
{
"type": "delete",
@@ -66,6 +102,7 @@
"name": "Create untrusted language",
"endpoint": "NODE-language.obj",
"sql_endpoint": "NODE-language.sql_id",
"msql_endpoint": "NODE-language.msql",
"data": {
"name": "Lan1_$%{}[]()&*^!@\"'`\\/#",
"trusted": false,
@@ -74,7 +111,8 @@
"lanval": "plpgsql_validator",
"is_template": false
},
"expected_sql_file": "create_untrusted_language.sql"
"expected_sql_file": "create_untrusted_language.sql",
"expected_msql_file": "create_untrusted_language_msql.sql"
},
{
"type": "delete",
@@ -3,9 +3,9 @@
-- DROP LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
CREATE TRUSTED PROCEDURAL LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
HANDLER spl_call_handler
INLINE spl_inline_handler
VALIDATOR spl_validator;
HANDLER plpgsql_call_handler
INLINE plpgsql_inline_handler
VALIDATOR plpgsql_validator;
ALTER LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
OWNER TO <OWNER>;
@@ -0,0 +1,6 @@
COMMENT ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
IS 'This is comment on custom trusted language';
GRANT USAGE ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" TO PUBLIC;
GRANT USAGE ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" TO enterprisedb WITH GRANT OPTION;
@@ -0,0 +1,14 @@
-- Language: Lan2_$%{}[]()&*^!@"'`\/#
-- DROP LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
CREATE TRUSTED PROCEDURAL LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
HANDLER plpgsql_call_handler
INLINE plpgsql_inline_handler
VALIDATOR plpgsql_validator;
ALTER LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
OWNER TO <OWNER>;
COMMENT ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
IS 'This is comment on custom trusted language';
@@ -0,0 +1,2 @@
REVOKE ALL ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" FROM PUBLIC;
REVOKE ALL ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" FROM enterprisedb;
@@ -3,9 +3,9 @@
-- DROP LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
CREATE TRUSTED PROCEDURAL LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
HANDLER spl_call_handler
INLINE spl_inline_handler
VALIDATOR spl_validator;
HANDLER plpgsql_call_handler
INLINE plpgsql_inline_handler
VALIDATOR plpgsql_validator;
ALTER LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
OWNER TO <OWNER>;
@@ -0,0 +1,2 @@
ALTER LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
RENAME TO "Lan2_$%{}[]()&*^!@""'`\/#";
@@ -3,9 +3,9 @@
-- DROP LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
CREATE TRUSTED PROCEDURAL LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
HANDLER spl_call_handler
INLINE spl_inline_handler
VALIDATOR spl_validator;
HANDLER plpgsql_call_handler
INLINE plpgsql_inline_handler
VALIDATOR plpgsql_validator;
ALTER LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
OWNER TO <OWNER>;
Loaded 100 of 535 files, more files were not shown because too many files have changed in this diff. Show more