19.2. Installing PostgreSQL for 1C on Windows

19.2.1. Supported Windows Versions
19.2.2. GUI Installation
19.2.3. Command-Line Installation
19.2.4. Loading Procedural Languages
19.2.5. Configuring Multiple PostgreSQL Instances
19.2.6. Uninstalling PostgreSQL for 1C
19.2.7. Antivirus Considerations

PostgreSQL offers the following installation modes for the supported Windows systems:

Additionally, you have to set up the environment for using PL/Perl and PL/Python, if these procedural languages are required for your purposes. For details, see Section 19.2.4.

To avoid confusion, note that there are the following different users on Windows systems:

The minimum hardware required to install PostgreSQL, create a database cluster and start the database server are as follows:

Additional disk space is required for data or supporting components.

19.2.1. Supported Windows Versions

PostgreSQL is available for the following 64-bit Windows versions:

  • Windows 10 or higher

  • Windows Server 2016 or higher

19.2.2. GUI Installation

PostgreSQL provides an installer with an interactive wizard that configures and installs PostgreSQL core components, creates the default database, and enables server autostart.

To install PostgreSQL core components, run the provided installer as administrator and follow the on-screen instructions. Make sure to take into account the following installation specifics:

  • You can install all the PostgreSQL core components, or customize the installation by excluding server or developer components. Client utilities are always installed.

  • The selected data directory must be empty. Otherwise, PostgreSQL cannot create the default database. The default data directory is C:\Program Files\PostgreSQL 1C\15\data.

  • If the Allow external connections check box is selected (default), the installer modifies postgresql.conf and pg_hba.conf files to allow external connections. Otherwise, PostgreSQL server is listening for connections from the localhost only. If you decide to enable external connections when the installation is complete, you have to modify the Windows Firewall configuration to allow PostgreSQL server to accept connections.

  • Make sure to remember the username and password you set up when installing PostgreSQL as it will be required to connect to the PostgreSQL server when using password-based authentication methods.

  • By default, PostgreSQL uses icu collations. If you are upgrading an installation with the default collation provided by libc, such as PostgreSQL, make sure to choose libc collation provider in the corresponding drop-down list of the installer.

  • PostgreSQL provides a pre-configured psql that you can launch from the Start menu, so you do not have to configure the standard environment variables. However, if you would like to work with PostgreSQL from the standard command prompt without specifying full paths to the binary files, select the Set up environment variables check box.

Once the installation completes, your PostgreSQL instance is ready to use, with server autostart enabled. If you need more than one PostgreSQL instance on the same system, you have to configure them manually. For details, see Section 19.2.5.

19.2.3. Command-Line Installation

To install PostgreSQL from the command line, run the downloaded installer file passing one or more options described in Section 19.2.3.1.

19.2.3.1. Command-Line Options

Installation directory path:

/D=path

Silent install:

/S

INI file that provides the options to customize the server installation:

/init=ini_file_name

If you would like to customize the installation, you must create the INI file manually, as described in Section 19.2.3.2.

19.2.3.2. INI File Format

You can add the following installation options to the [options] section of the INI file:

  • InstallDir — path where to install server. If you specified the /D option on the command line, it will be overwritten by the InstallDir value.

  • DataDir — path where to create default database

  • Port — TCP/IP port to listen. Default: 5432.

  • SuperUser — name of the database user who will have admin rights in the database

  • Password — password of the user

  • noExtConnections = 1 — do not allow external connections

  • Coding = UNICODE — character encoding to use in the database

  • Locale — locale to use in the database. There can be several different locales for each encoding

  • vcredist = no — do not install Visual C redistributable libraries (use it only if these libraries are already installed on your system)

  • envvar = 1 — set up environment variables helpful for PostgreSQL: PGDATA, PGDATABASE, PGUSER, PGPORT, PGLOCALEDIR

  • needoptimization = 0 — disable automatic tuning of configuration parameters based on the available system resources.

  • datachecksums = 0 — disable data checksums for the cluster.

  • serviceaccount — specify a Windows user for starting PostgreSQL service. The provided user must have the right to start Windows services. By default, PostgreSQL service is started on behalf of NT AUTHORITY\NetworkService, which is a special Windows Service Account.

  • servicepassword — provide the password for the Windows user specified in the serviceaccount option.

  • serviceid — change PostgreSQL service name.

  • islibc = 1 — use libc as the provider of the default collation.

19.2.4. Loading Procedural Languages

PostgreSQL distribution for Windows systems includes PL/Perl and PL/Python procedural languages.

19.2.4.1. Setting up the Environment for PL/Python

To configure the system for using PL/Python, complete the following steps:

  1. Download and install the latest available version of Python 3.8 or 2.7 for Windows. Choose the 64-bit version as PostgreSQL server has 64-bit architecture type. You can find the installers at https://www.python.org/.

  2. Create the PL/Python extension by running the following command in psql:

    CREATE EXTENSION plpythonu
    

Tip

In some cases, when you create a PL/Python function, the connection to the server is lost and the server log shows the following error message:

ImportError: module site not found

To avoid this issue, try to specify the Python installation directory in the PYTHONHOME environment variable and restart the PostgreSQL service.

19.2.4.2. Setting up the Environment for PL/Perl

To configure the system for using PL/Perl, complete the following steps:

  1. Download the MSI package of the 64-bit Strawberry Perl 5.26 from https://strawberryperl.com/releases.html and perform the installation.

  2. Restart the PostgreSQL server.

  3. Create the PL/Perl extension by running the following command in psql:

    CREATE EXTENSION plperlu
    

19.2.5. Configuring Multiple PostgreSQL Instances

To set up several PostgreSQL server instances with different data directories on Windows, do the following:

  1. Install PostgreSQL as explained in Section 19.2.2 or Section 19.2.3. The installed binary files are shared by all PostgreSQL instances, so you need to complete this step only once.

  2. Select an empty folder that your new PostgreSQL instance will use as the data directory. For example, C:\Program Files\PostgreSQL 1C\15\data2. Make sure to grant Full Control permissions for this folder to the current OS user that will own the database files and the user on behalf of which the server is running (NT AUTHORITY\NetworkService by default).

  3. Run initdb specifying the path to the new data directory and any other parameters required to initialize another server instance. For example:

    "C:\Program Files\PostgreSQL 1C\15\bin\initdb.exe" --encoding=UTF8 -U "postgres" -D "C:\Program Files\PostgreSQL 1C\15\data2"
    

    Alternatively, you can stop the running server and copy the contents of the existing data directory into the newly created folder. In this case, the new PostgreSQL instance inherits all the settings of the original instance, including authentication settings.

  4. Modify postgresql.conf settings for the new PostgreSQL instance as required. Make sure to specify different ports for your server instances to avoid conflicts.

  5. Open the command prompt as Administrator and register a new PostgreSQL service with a unique name, for example, postgrespro-data2:

    "C:\Program Files\PostgreSQL 1C\15\bin\pg_ctl.exe" register -N "postgrespro-data2" -U "NT AUTHORITY\NetworkService" -D "C:\Program Files\PostgreSQL 1C\15\data2" -w
    

    Start the registered service:

    sc start "postgrespro-data2"
    

Once the service is started, your PostgreSQL instance is ready to use. If you need any additional PostgreSQL extensions, make sure to enable them for the new instance as explained in Section 19.3.

19.2.6. Uninstalling PostgreSQL for 1C

The procedure of uninstalling PostgreSQL for 1C depends on the number of PostgreSQL instances set up on your system.

If you have a single PostgreSQL instance created at installation time, you only need to run the C:\Program Files\PostgreSQL 1C\15\uninstall.exe program. This program automatically stops the server and unregisters the service for this instance.

If you have created any additional PostgreSQL instances, you have to complete the following steps:

  1. Stop the server for each instance:

    "C:\Program Files\PostgreSQL 1C\15\bin\pg_ctl.exe" stop -D "C:\Program Files\PostgreSQL 1C\15\data_dir" -m fast -w
    

  2. Unregister the service for each instance:

    "C:\Program Files\PostgreSQL 1C\15\bin\pg_ctl.exe" unregister -N "postgrespro_service_name"
    

  3. Run the C:\Program Files\PostgreSQL 1C\15\uninstall.exe to uninstall PostgreSQL binary files.

19.2.7. Antivirus Considerations

It is strongly recommended to avoid using antivirus software on systems where PostgreSQL is running because it may cause additional load on your environment and result in unexpected database behavior that would lead to performance and reliability issues. If you need to use antivirus software, make sure to exclude the following directories from virus scanning as they do not contain any executable files:

  • PGDATA directory that stores main cluster data, usually located in C:\Program Files\PostgreSQL 1C\15\data unless you specified another directory in initdb options

  • Paths to created tablespaces