Re: PostgreSQL vs MariaDB

2023-03-25 Thread Achilleas Mantzios

Στις 24/3/23 13:07, ο/η Inzamam Shafiq έγραψε:

Hi Team,

Hope you are doing well.

Can someone please list pros and cons of MariaDB vs PostgreSQL that 
actually needs serious consideration while choosing the right database 
for large OLTP DBs (Terabytes)?




I would say that for small shops and simpler apps MySQL / MariaDB may be 
fine. If you go to enterprise class apps and infrastructure you'll start 
to need more, which means PostgreSQL.



For instance : unnest , transactional DDL, the extensions system, custom 
types, the MVCC etc those are very important features that some 
commercial DBs lack.





Thanks.

Regards,

/Inzamam Shafiq/
/Sr. DBA/


--
Achilleas Mantzios
 IT DEV - HEAD
 IT DEPT
 Dynacom Tankers Mgmt


Binding Postgres to port 0 for testing

2023-03-25 Thread Markus Pilman
Hi all,

I am building a simple integration test framework for an application that I
am building. For this project I am planning to use PostgreSQL.

For testing purposes I'd like to always start with an empty database,
populate data, and, if the test was successful, delete everything. These
tests are single process tests.

I'd like to run many processes in parallel and have one postgres server
process running for each. I realize that I could use one and use multiple
databases but I don't want to do this for a variety of reasons (one being
that I also want to test the control plane logic, the application is
multi-tenant and uses a database per tenant, having separate databases
simplifies debugging etc).

Now the problem is that I need to find a TCP port for each running postgres
instance. There's multiple ways to do this, but by far the easiest one I
know is to bind to port 0. So my plan was to start postgres with "-p 0" and
then parse stdout to figure out which port it actually uses. But that
doesn't seem to work:

 >postgres -D data/ -p 0
 2023-03-25 16:39:54.271 GMT [13924] FATAL:  0 is outside the valid range
for parameter "port" (1 .. 65535)

Is there a reason this is not allowed? What would be the recommended way of
addressing my issue?

Best Markus


Re: Binding Postgres to port 0 for testing

2023-03-25 Thread Thorsten Glaser
Hi Markus,

>I am building a simple integration test framework for an application that I
>am building. For this project I am planning to use PostgreSQL.

check pg_virtualenv(1), which apparently is a Debian thing.
It auto-creates and auto-deletes at the end, if desired, a
cluster and runs your program with suitable environment
variables to access that cluster, which includes choosing
an available port. This was in fact made for integration
testing, though I use it for quickly spinning up throwaway
DBs for one-shot tools as well.

bye,
//mirabilos
-- 
Infrastrukturexperte • tarent solutions GmbH
Am Dickobskreuz 10, D-53121 Bonn • http://www.tarent.de/
Telephon +49 228 54881-393 • Fax: +49 228 54881-235
HRB AG Bonn 5168 • USt-ID (VAT): DE122264941
Geschäftsführer: Dr. Stefan Barth, Kai Ebenrett, Boris Esser, Alexander Steeg


/⁀\ The UTF-8 Ribbon
╲ ╱ Campaign against  Mit dem tarent-Newsletter nichts mehr verpassen:
 ╳  HTML eMail! Also, https://www.tarent.de/newsletter
╱ ╲ header encryption!





Re: Binding Postgres to port 0 for testing

2023-03-25 Thread Erik Wienhold
> On 25/03/2023 18:01 CET Markus Pilman  wrote:
>
> I am building a simple integration test framework for an application that I
> am building. For this project I am planning to use PostgreSQL.
>
> For testing purposes I'd like to always start with an empty database,
> populate data, and, if the test was successful, delete everything. These
> tests are single process tests.
>
> I'd like to run many processes in parallel and have one postgres server
> process running for each. I realize that I could use one and use multiple
> databases but I don't want to do this for a variety of reasons (one being
> that I also want to test the control plane logic, the application is
> multi-tenant and uses a database per tenant, having separate databases
> simplifies debugging etc).
>
> Now the problem is that I need to find a TCP port for each running postgres
> instance. There's multiple ways to do this, but by far the easiest one I
> know is to bind to port 0. So my plan was to start postgres with "-p 0" and
> then parse stdout to figure out which port it actually uses. But that
> doesn't seem to work:
>
> >postgres -D data/ -p 0
>  2023-03-25 16:39:54.271 GMT [13924] FATAL: 0 is outside the valid range for 
> parameter "port" (1 .. 65535)
>
> What would be the recommended way of addressing my issue?

I would try to start Postgres with every port number in a for loop starting
with port number 1024.  The first one that works is your port number.  And you
may not even have to parse stdout if you can pass that port number to your 
tests.

Maybe you can also use pg_virtualenv[0] from Debian's postgresql-common.  It
tries every port number starting from 5432.

[0] 
https://manpages.debian.org/testing/postgresql-common/pg_virtualenv.1.en.html

--
Erik




Re: Binding Postgres to port 0 for testing

2023-03-25 Thread Erik Wienhold
> On 25/03/2023 20:10 CET Markus Pilman  wrote:
>
> Thanks for the suggestions. I didn't know about pg_virtualenv, that's
> interesting. Though it seems to achieve something similar as to containerize
> the test (potentially in a more platform independent way). Though it seems
> pg_virtualenv is mostly doing what my test driver is currently doing. Trying
> out the ports is obviously possible, but it seems a bit hacky to me (though
> if there's no better way I don't think that's a good show-stopper).

You can of course also use Docker and have it map port 5432 to a random host
port.  Use docker-port to find the mapped host port:

docker port CONTAINER 5432/tcp

Testcontainers may also be an option if you want to use Docker:

* https://www.testcontainers.org/modules/databases/postgres/
* https://testcontainers-python.readthedocs.io/en/latest/postgres/README.html

> But I am still wondering: Is there a reason PostgreSQL doesn't allow me to
> bind against port 0? I understand that in a production environment this is
> almost never the thing you want to do, but I wouldn't consider this option
> very dangerous.

One reason for not allowing port zero is Postgres' naming convention of Unix
domain sockets.  The port number is included in the socket filename.

https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-UNIX-SOCKET-DIRECTORIES

Accepting port zero for a Unix domain socket would not behave the same as
binding a TCP socket to port zero.

Another benefit is that the bound port number is available through the config.
Postgres does not have to keep track of any "random" port number picked by the
operating system.

--
Erik