Search Postgresql Archives

Re: Binding Postgres to port 0 for testing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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).

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.

Best Markus


On Sat, Mar 25, 2023 at 12:10 PM Erik Wienhold <ewie@xxxxxxxxx> wrote:
> On 25/03/2023 18:01 CET Markus Pilman <markus@xxxxxxxxx> 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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux