pgAdmin 4 ========= pgAdmin 4 is a rewrite of the popular pgAdmin3 management tool for the PostgreSQL (http://www.postgresql.org) database. In the following documentation and examples, "$PGADMIN4_SRC/" is used to denote the top-level directory of a copy of the pgAdmin source tree, either from a tarball or a git checkout. Architecture ------------ pgAdmin 4 is written as a web application in Python, using jQuery and Bootstrap for the client side processing and UI. On the server side, Flask is being utilised. Although developed using web technologies, pgAdmin 4 can be deployed either on a web server using a browser, or standalone on a workstation. The runtime/ subdirectory contains a QT based runtime application intended to allow this - it is essentially a Python application server that runs in the system tray and allows the user to connect to the application using their web browser. Building the Runtime -------------------- To build the runtime, the following packages must be installed: - QT 5 (Use the VC++ build on Windows, not MinGW). - Python 3.4+ An environment variable named PGADMIN_PYTHON_DIR must be set to the directory in which Python has been installed, for example: - /usr - /usr/local/python-3.8 - C:\Python38 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: $ qmake CONFIG+=release By default, the runtime application will be built in release mode. 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 configure the project with a supported version of Qt when prompted. Create Database Migrations -------------------------- In order to make changes to the SQLite DB, navigate to the 'web' directory: (pgadmin4) $ cd $PGADMIN4_SRC/web Create a migration file with the following command: (pgadmin4) $ FLASK_APP=pgAdmin4.py flask db revision This will create a file in: $PGADMIN4_SRC/web/migrations/versions/ . Add any changes to the 'upgrade' function. Increment the SCHEMA_VERSION in $PGADMIN4_SRC/web/pgadmin/model/__init__.py file. There is no need to increment the SETTINGS_SCHEMA_VERSION. Configuring the Python Environment ---------------------------------- In order to run the Python code, a suitable runtime environment is required. 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 $ sudo pip install virtualenv virtualenvwrapper 2) Source the virtualenv wrapper tools script. You may want to add this command to your ~/.bash_profile file for future convenience: $ source /usr/local/bin/virtualenvwrapper.sh 3) Create a virtual environment: $ mkvirtualenv pgadmin4 To make use of the virtual environment in the future, use the following command to re-activate it: $ workon pgadmin4 4) Ensure that a PostgreSQL installation's bin/ directory is in the path (so pg_config can be found for building psycopg2), and install the required packages: (pgadmin4) $ PATH=$PATH:/usr/local/pgsql/bin pip install -r $PGADMIN4_SRC/requirements.txt If you are planning to run the regression tests, you also need to install additional requirements from web/regression/requirements.txt: (pgadmin4) $ pip install -r $PGADMIN4_SRC/web/regression/requirements.txt 5) Create a local configuration file for pgAdmin. Edit $PGADMIN4_SRC/web/config_local.py and add any desired configuration options (use the config.py file as a reference - any settings duplicated in config_local.py will override those in config.py). A typical development configuration may look like: from config import * # Debug mode DEBUG = True # App mode SERVER_MODE = True # Enable the test module MODULE_BLACKLIST.remove('test') # Log CONSOLE_LOG_LEVEL = DEBUG FILE_LOG_LEVEL = DEBUG DEFAULT_SERVER = '127.0.0.1' UPGRADE_CHECK_ENABLED = True # Use a different config DB for each server mode. if SERVER_MODE == False: SQLITE_PATH = os.path.join( DATA_DIR, 'pgadmin4-desktop.db' ) else: SQLITE_PATH = os.path.join( DATA_DIR, 'pgadmin4-server.db' ) This configuration allows easy switching between server and desktop modes for testing. 6) The initial setup of the configuration database is interactive in server mode, and non-interactive in desktop mode. You can run it either by running: (pgadmin4) $ python $PGADMIN4_SRC/web/setup.py or by starting pgAdmin 4: (pgadmin4) $ python $PGADMIN4_SRC/web/pgAdmin4.py Whilst it is possible to automatically run setup in desktop mode by running the runtime, that will not work in server mode as the runtime doesn't allow command line interaction with the setup program. At this point you will be able to run pgAdmin 4 from the command line in either server or desktop mode, and access it from a web browser using the URL shown in 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. See the following wiki page for more information on the compiler you may need: https://wiki.python.org/moin/WindowsCompilers A blog detailing the setup of Virtual Environments on Windows can be found here: http://www.tylerbutler.com/2012/05/how-to-install-python-pip-and-virtualenv-on-windows-with-powershell/ Once a virtual environment has been created and enabled, setup can continue from step 4 above. Building the Web Assets ----------------------- pgAdmin is dependent on a number of third party Javascript libraries. These, along with it's own Javascript code, SCSS/CSS code and images must be compiled into a "bundle" which is transferred to the browser for execution and rendering. This is far more efficient than simply requesting each asset as it's needed by the client. To create the bundle, you will need the 'yarn' package management tool to be installed. Then, you can run the following commands on a *nix system to download the required packages and build the bundle: (pgadmin4) $ cd $PGADMIN4_SRC (pgadmin4) $ make install-node (pgadmin4) $ make bundle On Windows systems (where "make" is not available, the following commands can be used: C:\> cd $PGADMIN4_SRC\web C:\$PGADMIN4_SRC\web> yarn install C:\$PGADMIN4_SRC\web> yarn run bundle Creating pgAdmin themes ----------------------- To create a pgAdmin theme, you need to create a directory under web/pgadmin/static/scss/resources. Copy the sample file _theme.variables.scss.sample to the new directory and rename it to _theme.variables.scss. Change the desired hexadecimal values of the colors and bundle pgAdmin. You can also add a preview image in the theme directory with the name as