Open Source Oracle Compatible PostgreSQL.

LICENSE build regression

IvorySQL

IvorySQL is advanced, fully featured, open source Oracle compatible PostgreSQL with a firm commitment to always remain 100% compatible and a Drop-in replacement of the latest PostgreSQL. IvorySQL adds a “compatible_db” toggle switch to switch between Oracle and PostgreSQL compatibility modes. One of the highlights of IvorySQL is PL/iSQL procedural language that supports oracle’s PL/SQL syntax and Oracle style Packages.

IvorySQL has imported and enhanced the Orafce extension to add support for numerous Oracle compatibility features including built-in PACKAGES, data types, and conversion functions

The IvorySQL project is released under the Apache 2 license and encourages all types of contributions. For IvorySQL community no contribution is too small, and we want to thank all our community contributors.


We are committed to following the principles of the open source way

We are committed to abiding by the principles of open-source ways and we strongly believe in building a healthy and inclusive community. We maintain that good ideas can come from anywhere, and the best ideas should win. Only by including diverse perspectives, we can reach the best decision. While the first version of IvorySQL is mainly focused on Oracle Compatibility features, going forward the future road map and feature set will be determined by the community in an open-source way.

Compiling from source

IvorySQL can be built on Linux, OSX, Unix and Windows platforms. This section describes the step to compile the source on the Linux based systems.

Getting the source

Clone the repository with either of the following command:

git clone https://github.com/IvorySQL/IvorySQL.git
git clone [email protected]:IvorySQL/IvorySQL.git

Requirements

To compile the IvorySQL from the source code, you have to ensure that prerequisite packages are available on the system.

  • Required Packages The following software packages are required for building IvorySQL:

    • make - GNU make version 3.80 or newer
    • gcc - ISO/ANSI C compiler (at least C99-compliant). Recent versions of GCC are recommended.
    • libreadline - The GNU Readline library is used by default.
    • zlib - zlib compression library is used by default.
    • Flex - (Flex 2.5.31 or later)
    • Bison - (Bison 1.875 or later)
  • Optional Packages The following packages are optional. They are not required in the default configuration, but they are needed when certain build options are enabled.

    • libperl - (Perl 5.8.3 or later) To build the server programming language PL/Perl. Perl library installation with the header files. libperl library must be a shared library
    • libpython - (Python 2.6 or later, Python 3.1 or later) To build the PL/Python server programming language. Python installation with the header files and the distutils module. libpython library must be a shared library.
    • Tcl - (Tcl 8.4 or later) To build the PL/Tcl procedural language.
    • Gettext API - (Tcl 8.4 or later) To enable Native Language Support (NLS), to display a program's messages in a language other than English.
    • OpenSSL - (1.0.1 or later) To support encrypted client connections.
    • LZ4 - To support compression of data.

Preparing System

Following are the minimal packages needed to build from source:

sudo yum install -y bison-devel readline-devel zlib-devel openssl-devel wget
sudo yum groupinstall -y 'Development Tools'

Installation Procedure

  • Configuration The first step of the installation procedure is to configure the source tree for your system and choose the options you would like. This is done by running the configure script. For a default installation simply enter:

    ./configure

    The default configuration will build the server and utilities, as well as all client applications and interfaces that require only a C compiler. All files will be installed under /usr/local/pgsql by default. You can customize the build and installation process by supplying one or more command line options to configure see the details here

  • Build To start the build, type either of:

    make
    make all
    
  • Regression Tests To test the newly built server before you install it, you can run the regression tests at this point. type either of:

    make check
    make check-world
    
  • Installation To install, enter:

    make install
    

Contributing to the IvorySQL

There are plenty of ways to contribute to IvorySQL. You can contribute by providing the documentation updates, by providing the translations for the documentation. If you have design skills you can contribute to the IvorySQL website project. Testing the IvorySQL and reporting issues or by issuing pull requests for bug fixes or new features or answering the questions on mailing lists are some ways to contribute to the IvorySQL project and all types of contributions are welcomed and appreciated by the IvorySQL community.

Documentation

Please check the online documentation.

Comments
  • Support for Hierarchical query. This patch adds the support for the h…

    Support for Hierarchical query. This patch adds the support for the h…

    Support for Hierarchical query. This patch adds the support for the hierarchical query by transforming a Hierarchical Select query on to a Common Table Expression (CTE). This implementation includes hierarchical query syntax and in addition to that following pseudo/special columns as well: - PRIOR - LEVEL - CONNECT_BY_ROOT - SYS_CONNECT_BY_PATH

    Limitations:
    Currently this feature has the following limitations.
    - The additional columns can be used in most expression like function call, CASE
      statement and common expression, however there are few that are not supported
      like ROW, TYPECAST, COLLATE, GROUPING clauses etc.
    -  an output column name may be needed in some cases where two or more column
       are identical like
        SELECT CONNECT_BY_ROOT col AS "col1", CONNECT_BY_ROOT col AS "col2" ....
    - Indirection operator or '*' is not supported.
    - Loop detection is not supported.
    
  • The description of the parameter (weekday) of the function (next_day) in the document is incorrect

    The description of the parameter (weekday) of the function (next_day) in the document is incorrect

    ##Current Status In the document, the parameter (weekday) of the function (next_day) is noted as follows. 0 means Sunday. image However, when the parameter (weekday) is set to 0, there is an error in execution. image After verification, the integer value of the parameter (weekday) is 1 to 7, not 0 to 6, 1 represents Sunday, the document is incorrect. the value of Oracle is also 1 to 7. image

    Enhancement

    Please confirm and revise the description in the document.

  • Sample Package in Doc not working

    Sample Package in Doc not working

    Neither the Package Spec nor the Package Body compiles out of the box. At least in my build from source, the data types of NUMBER and VARCHAR2 are not defined. Even if you switch to PG data types of VARCHAR & NUMERIC it is still not close to working. There are also typos and inconsistencies in both the Spec and Body that also cause it not to work.

    Also, the code in the samples should use spaces for the indenting. It seems to use a horrible combination of spaces and tabs that makes a mess when copy/paste into an editor no matter what your tab settings are.

    I know it's early days, but, this is important. It's a users first impression & first experience.

  • type varchar2 does not exist

    type varchar2 does not exist

    type varchar2 does not exist

    IvorySQL 1.2

    OS Version Centos7.6

    Configuration options

    $ /opt/ipg/bin/pg_config |grep CONFIGURE CONFIGURE = '--prefix=/opt/ipg' '--with-openssl' '--with-includes=/usr/include/openssl'

    Current Behavior

    postgres=# CREATE TABLE test(x INT, y VARCHAR2(100)); ERROR: type "varchar2" does not exist LINE 1: CREATE TABLE test(x INT, y VARCHAR2(100));

    Expected behavior/code

    create table success

    Step to reproduce

    CREATE TABLE test(x INT, y VARCHAR2(100));

    Additional context that can be helpful for identifying the problem

  • Implement mechanism to control creation of extensions and other objec…

    Implement mechanism to control creation of extensions and other objec…

    …ts at initdb

    The commit includes the contrib directory to default buid target IvorySQL src. Along with that it  adds a new file ivy_module.config to contrib directory, that can be used to list extensions and SQL scripts required to be executed by initdb.

    ivy_module.config gets installed at '$INSTALL_DIR/share/postgresql/' and is read by initdb to install all extensions and scripts listed in that file.

  • IvorySQL1.1 build failed under Windows11

    IvorySQL1.1 build failed under Windows11

    Bug Report

    Copying pg_config_os.h... Generating configuration headers... undefined symbol: PACKAGE_IVORYSQL_VERSION at src/include/pg_config.h line 795 at H:/VisualProject/vs2019/IvorySQL/IvorySQL-Ivory_REL_1_1/src/tools/msvc/Mkvcbuild.pm line 864.

    IvorySQL Version

    1.1

    OS Version (uname -a)

    Windows11 visual studio 2019

    Configuration options ( config.status --config )

    H:\VisualProject\vs2019\IvorySQL\IvorySQL-Ivory_REL_1_1\src\tools\msvc>perl build.pl DEBUG

    Current Behavior

    Expected behavior/code

    Step to reproduce

    Additional context that can be helpful for identifying the problem

  • NCHAR and nls_length_semantics=byte

    NCHAR and nls_length_semantics=byte

    Bug Report

    NCHAR is affected setting nls_length_semantics=byte as well as CHAR and VARCHAR2. I think it is undesirable. It may be caused by the native PostgreSQL behavior that accepts type NCHAR as CHAR.

    IvorySQL Version

    1.0 and current master

    OS Version / Configuration options

    V1.0 on RHEL 8.x (install from rpm package) master on CentOS 6.x (source build with configure --enable-debug)

    Current Behavior

    ivdb1=# CREATE EXTENSION orafce ;
    ivdb1=# SET search_path TO "$user", oracle, pg_catalog, public;
    ivdb1=# SET nls_length_semantics TO byte;
    ivdb1=# SELECT NCHAR(10) 'あいうえお';  -- 5 chars, UTF8 3byte char x 5 = 15 bytes
    ERROR:  value too long for type character(10 byte)
    
  • Some problems with char varchar varchar2 and nvarchar2

    Some problems with char varchar varchar2 and nvarchar2

    Bug Report

    1. When I set nls_length_semantics to byte, I get an error when I explicitly convert the string to char, varchar, varchar2.
    2. nvarchar2 does not distinguish between byte and char.

    IvorySQL Version

    1.0

    OS Version (uname -a)

    Linux mypg01 3.10.0-693.21.1.el7.x86_64 #1 SMP Wed Mar 7 19:03:37 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

    Configuration options ( config.status --config )

    set nls_length_semantics to byte ;

    Current Behavior

    select '我是一个中国人'::char(5); 2022-01-04 11:00:18.204 CST [3010] ERROR: value too long for type character(5 byte) 2022-01-04 11:00:18.204 CST [3010] STATEMENT: select '我是一个中国人'::char(5); ERROR: value too long for type character(5 byte)

    create table test_12 (id int, a oracle.nvarchar2(5)); CREATE TABLE insert into test_12 values (1, 'abcde'); INSERT 0 1 insert into test_12 values (1, '少年张三丰'); 2022-01-04 14:27:14.075 CST [3010] ERROR: input value too long for type nvarchar2(5 byte) 2022-01-04 14:27:14.075 CST [3010] STATEMENT: insert into test_12 values (1, '少年张三丰'); ERROR: input value too long for type nvarchar2(5 byte)

    Expected behavior/code

    select '我是一个中国人'::char(5); bpchar

    我 (1 row)

    insert into test_12 values (1, '少年张三丰'); --expect succ

    Step to reproduce

    set nls_length_semantics to byte ; select '我是一个中国人'::char(5);

    create table test_12 (id int, a oracle.nvarchar2(5)); insert into test_12 values (1, 'abcde'); insert into test_12 values (1, '少年张三丰');

    Additional context that can be helpful for identifying the problem

    1. Explicit conversion should output the most suitable string.
    2. nvarchar2 does not distinguish between byte and char.
  • Support for Hierarchical query. This patch adds the support for the h…

    Support for Hierarchical query. This patch adds the support for the h…

    …ierarchical

    query by transforming a Hierarchical Select query on to a Common Table Expression (CTE). This implementation includes hierarchical query syntax and in addition to that following pseudo/special columns as well:

    • PRIOR
    • LEVEL
    • CONNECT_BY_ROOT
    • SYS_CONNECT_BY_PATH
  • Oracle compatible types should be used without schema qualification

    Oracle compatible types should be used without schema qualification

    Enhancement

    Creating a table with an Oracle compatible data type like Varchar2 requires schema qualification that is not very intuitive and also conflicts with the IvorySQL documentation. IvorySQL should allow using these types without schema qualification.

    Current behavior

    CREATE TABLE test_ora_typw(a varchar2);
    ERROR:  type "varchar2" does not exist
    LINE 1: CREATE TABLE test_ora_typw(a varchar2);
                                         ^
    -- Schema qualifying VARCHAR2 with Orcale works 
    CREATE TABLE test_ora_typw(a oracle.varchar2);  
    CREATE TABLE  
    postgres=# 
    

    ###Proposed enhancement

    -- Without schema qualification should work
    CREATE TABLE test_ora_typw(a varchar2);
    
  • I would like IvorySQL to have oracle hierarchical queries support

    I would like IvorySQL to have oracle hierarchical queries support

    Hierarchical Query

    Hierarchical queries are very useful to operate on hierarchical data. The PostgreSQL does not support it and It would be a good feature to add into the IvorySQL compatible list.

    The usual clauses for a hierarchical query support are:

    { 
    CONNECT BY [ NOCYCLE ] condition [AND condition]... [ START WITH condition ] 
    | START WITH condition CONNECT BY [ NOCYCLE ] condition [AND condition]...
    }
    

    CONNECT BY The query syntax starts with CONNECT BY keywords which define the hierarchical interdependency between parent and child rows. The results must be further qualified by specifying the PRIOR keyword in the condition part for CONNECT BY clause.

    The PRIOR keyword is a unary operator which links the previous row with the current one. The keyword can be used on the left or the right hand side of the equality condition. In case a loop is detected in the results, an error is returned to the user and the query aborted.

    START WITH This clause specified from which row to start the hierarchy.

    NOCYCLE This clause instructs to return data even if a cycle exists.

  • Oracle xml function compatible

    Oracle xml function compatible

    1. EXTRACT(XMLType_instance,Xpath_string) This function is used to return the corresponding content under the PATH of the XML node. Example: SELECT extract(value(a),'/root/main') data FROM xmltable a ;

    2. EXTRACTVALUE(XMLType_instance,Xpath_string) This function is used to return data for a specific XML node path. Example: SELECT extractvalue(value(a),'/root/main/姓名') data FROM xmltable a ;

    3. EXISTSNODE(XMLType_instance,Xpath_string) This function is used to determine whether the path to a particular XML node exists, returning 0 indicates that the node does not exist, and returning 1 indicates that the node exists. Example: SELECT existsnode(value(a),'/root/main/住院号') data FROM xmltable a;

    4. SYS_DBURIGEN({column|attribute}) This function is used to generate URLs of type DBUrlType based on columns or attributes. Example: SELECT sys_dburigen(a.DISPLAYNAME) aa FROM v_dept a WHERE a.DISPLAYNAME='矽肺病医院'

    5. SYS_XMLAGG(expr[,fmt]) This function is used to summarize all XML documents and generate one XML document. Example: SELECT SYS_XMLAGG(SYS_XMLGEN(a.order_content)) xml_content from doc_clinic_order a, clinics_item b, med_frequencydict c where a.patient_id = 'bd4b425e-a409-4b28-890d-d1d668fcf725' and a.parentid = '0' and a.route = b.item_id(+) and a.frequency = c.frequency_id(+)

    6. SYS_XMLGEN(expr[,fmt]) This function is used to generate XMLType instances from the rows and columns of database tables.

    7. XMLAGG(XMLType_instance[ORDER BY sort_list]) This function is used to summarize multiple XML blocks and generate XML documents. Example: select xmlagg(xmlelement("row",xmlforest(a.frequency_id as "频次ID", a.frequency_name as "频次名称")))[] from med_frequencydict a

    8. XMLFOREST(value_expr1[,value_expr2],...) This function is used to return XML blocks.

    9. XMLELEMENT(identifier[,xml_attribute_clause][,value_expr]) This function is used to return an instance of XMLType. where the parameter identifier is used to specify the element name, the parameter xml_attribute_clause is used to specify the element attribute clause, and the parameter value_expr is used to specify the element value. Example: SELECT xmlelement("row",xmlcolattval(a.frequency_code AS "编码",a.frequency_name as "名称")) xml from med_frequencydict a where a.frequency_code = 'BID'

    10. XMLCOLATTVAL(value_expr[,value_expr2],...) This function is used to generate XML blocks, and the arguments value_expr are used to specify column names or aliases as property names. Example: SELECT xmlelement("row",xmlcolattval(a.frequency_code AS "编码", a.frequency_name as "名称")) xml from med_frequencydict a where a.frequency_code = 'BID'

    11. XMLCONCAT(XMLType_instance1[,XMLType_instance2],...) This function is used to concatenate multiple XMLType instances and generate new XMLType instances. Example: select xmlconcat(xmltype('1'), xmltype('2'), xmltype('3')) from dual

    12. XMLSEQUENCE(xmltype_instance) This function is used to return VARIAY elements below the top-level node in an XMLType instance. Example: select extractvalue(column_value, '/row/医嘱内容') 医嘱内容 from table(xmlsequence(extract((select value(a) from xmltable a where rownum = 1), '/root/detail/row')))

    13. UPDATEXML(XMLType_instance,Xpath_string,value_expr) This function is used to update the contents of the corresponding node path for a particular XMLType instance. Example: select updatexml(xmltype('1名字12名字2'), '/root/row[no=2]/name', '新名字') from dual

    14. XMLTRANSFORM(xmltype_instance,xsl_ss) This function is used to convert XMLType instances in XSL style and generate new XMLType instances.

    15. DELETEXML(XMLType_instance,Xpath_string) This function is used to delete the contents of the corresponding node path for a particular XMLType instance.

    16.XML conversion table SELECT * FROM XMLTABLE('$SQ/root/detail/row' PASSING (select value(a) from xmltable a) AS SQ COLUMNS 医嘱ID VARCHAR2(50) PATH '/row/医嘱ID', 医嘱内容 VARCHAR2(200) PATH '/row/医嘱内容', 频次 VARCHAR2(200) PATH '/row/频次', 用法 VARCHAR2(200) PATH '/row/用法') order by 医嘱ID

  • It is recommended that compatible oracles use the end keyword as a field.

    It is recommended that compatible oracles use the end keyword as a field.

    Oracle can create columns with the name end, and errors are reported in ivorysql:

    SQL:CREATE TABLE k(end int); ERROR: syntax error at or near "end"

  • It is recommended to correct the date operation results.

    It is recommended to correct the date operation results.

    If the operation date in oracle is the last day of the month, the result of adding or subtracting should be the end of the month of the target month, but if the number of days of the month in ivorysql is less than the number of days of the calculated month, the calculated date is not the last day. select timestamp '2015-04-30' + interval '1 month'; 2015-05-30 00:00:00.0 select timestamp '2015-04-30' - interval '1 month'; 2015-03-30 00:00:00.0

  • It is recommended that Oracle be compatible with the custom type record.

    It is recommended that Oracle be compatible with the custom type record.

    Oracle custom types "type typename is Record(name type,...);" report errors in ivorysql.

    SQL: Declare Type EmpType is Record( EMPNO number(4), ENAME varchar2(10), JOB varchar2(15), SAL number(7,2), DEPTNO number(2) ); ERROR: syntax error at or near "EmpType"

  • It is recommended to improve the problem that identity is created in ivorysql with only the mallint, integer, bigint types.

    It is recommended to improve the problem that identity is created in ivorysql with only the mallint, integer, bigint types.

    It is recommended to improve the problem that identity is created in ivorysql with only the mallint, integer, bigint types.

    create table tb_test ( id number GENERATED ALWAYS AS IDENTITY, name varchar(100) );

    ERROR: identity column type must be smallint, integer, or bigint

  • Something wrong with RPM install

    Something wrong with RPM install

    Bug Report

    IvorySQL Version

    IvorySQL 1.2

    OS Version (uname -a)

    Linux Node02 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

    Configuration options ( config.status --config )

    default install

    Current Behavior

    The IvorySQL server couldn't be start when restart Centos7.9, And issued error message as follow: FATAL: could not create lock file "/var/run/ivorysql/ivorysql-1/.s.PGSQL.5333.lock": No such file or directory

    I think the directory ivorysql-1 is removed from '/run/ivorysql/' when restart Centos7.9 by setting tmpfiles. When I check the file '/usr/lib/tmpfiles.d/ivorysql-1.conf ' , as follow: d /run/ivorysql 0755 ivorysql ivorysql - That's it! I took it replace by follow, d /run/ivorysql/ivorysql-1 0755 ivorysql ivorysql - and issued command, systemd-tmpfiles --create --remove or reboot Centos7.9, it works. I could start the IvorySQL.

    Expected behavior/code

    Alter file /usr/lib/tmpfiles.d/ivorysql-1.conf as follow: d /run/ivorysql/ivorysql-1 0755 ivorysql ivorysql -

    Step to reproduce

    Additional context that can be helpful for identifying the problem

DB Browser for SQLite (DB4S) is a high quality, visual, open source tool to create, design, and edit database files compatible with SQLite.
DB Browser for SQLite (DB4S) is a high quality, visual, open source tool to create, design, and edit database files compatible with SQLite.

DB Browser for SQLite What it is DB Browser for SQLite (DB4S) is a high quality, visual, open source tool to create, design, and edit database files c

May 16, 2022
MySQL Server, the world's most popular open source database, and MySQL Cluster, a real-time, open source transactional database.

Copyright (c) 2000, 2021, Oracle and/or its affiliates. This is a release of MySQL, an SQL database server. License information can be found in the

May 11, 2022
The official C++ client API for PostgreSQL.

libpqxx Welcome to libpqxx, the C++ API to the PostgreSQL database management system. Home page: http://pqxx.org/development/libpqxx/ Find libpqxx on

May 16, 2022
YugabyteDB is a high-performance, cloud-native distributed SQL database that aims to support all PostgreSQL features
YugabyteDB is a high-performance, cloud-native distributed SQL database that aims to support all PostgreSQL features

YugabyteDB is a high-performance, cloud-native distributed SQL database that aims to support all PostgreSQL features. It is best to fit for cloud-native OLTP (i.e. real-time, business-critical) applications that need absolute data correctness and require at least one of the following: scalability, high tolerance to failures, or globally-distributed deployments.

May 11, 2022
A PostgreSQL extension providing an async networking interface accessible via SQL using a background worker and curl.

pg_net is a PostgreSQL extension exposing a SQL interface for async networking with a focus on scalability and UX.

May 12, 2022
A framework to monitor and improve the performance of PostgreSQL using Machine Learning methods.
A framework to monitor and improve the performance of PostgreSQL using Machine Learning methods.

pg_plan_inspector pg_plan_inspector is being developed as a framework to monitor and improve the performance of PostgreSQL using Machine Learning meth

May 12, 2022
Prometheus exporter for PostgreSQL

pgexporter pgexporter is a Prometheus exporter for PostgreSQL. pgexporter will connect to one or more PostgreSQL instances and let you monitor their o

Apr 17, 2022
PostgreSQL extension for pgexporter

pgexporter_ext pgexporter_ext is an extension for PostgreSQL to provide additional Prometheus metrics for pgexporter. Features Disk space metrics See

Apr 13, 2022
The PostgreSQL client API in modern C++

C++ client API to PostgreSQL {#mainpage} Dmitigr Pgfe (PostGres FrontEnd, hereinafter referred to as Pgfe) - is a C++ client API to PostgreSQL servers

May 7, 2022
A friendly and lightweight C++ database library for MySQL, PostgreSQL, SQLite and ODBC.

QTL QTL is a C ++ library for accessing SQL databases and currently supports MySQL, SQLite, PostgreSQL and ODBC. QTL is a lightweight library that con

May 9, 2022
C++ client library for PostgreSQL
C++ client library for PostgreSQL

Welcome to taoPQ taoPQ is a lightweight C++ client library for accessing a PostgreSQL➚ database. It has no dependencies beyond libpq➚, the C applicati

May 11, 2022
Backup / restore solution for PostgreSQL

pgmoneta pgmoneta is a backup / restore solution for PostgreSQL. pgmoneta is named after the Roman Goddess of Memory. Features Full backup Restore Sym

Apr 21, 2022
recovery postgresql table data by update/delete/rollback/dropcolumn command

recovery postgresql table data by update/delete/rollback/dropcolumn command

Mar 30, 2022
pgagroal is a high-performance protocol-native connection pool for PostgreSQL.

pgagroal is a high-performance protocol-native connection pool for PostgreSQL.

May 13, 2022
xxhash functions for PostgreSQL

pg_xxhash PostgreSQL ❤️ xxhash Tested with xxhash 0.8.1 and PostgreSQL 14.1 on Linux and macOS. Think twice before even considering to use it in any s

Mar 11, 2022
Distributed PostgreSQL as an extension
Distributed PostgreSQL as an extension

What is Citus? Citus is a PostgreSQL extension that transforms Postgres into a distributed database—so you can achieve high performance at any scale.

May 13, 2022
High-performance time-series aggregation for PostgreSQL

PipelineDB has joined Confluent, read the blog post here. PipelineDB will not have new releases beyond 1.0.0, although critical bugs will still be fix

May 7, 2022
Reliable PostgreSQL Backup & Restore

pgBackRest Reliable PostgreSQL Backup & Restore Introduction pgBackRest aims to be a reliable, easy-to-use backup and restore solution that can seamle

May 13, 2022
upstream module that allows nginx to communicate directly with PostgreSQL database.

About ngx_postgres is an upstream module that allows nginx to communicate directly with PostgreSQL database. Configuration directives postgres_server

Apr 29, 2022