Subject: pgAdmin Docker container: specify web URL path prefix?

From: Glen Bakeman <[email-masked]>
Date: Mon, 11 Apr 2022 17:50:50 -0700

Hi everyone,

I'm getting into containerized hosting, and I'd like to setup the 
pgAdmin docker container with a reverse proxy (Traefik). Traefik 
supports Path Prefix proxying for services (i.e, I'd like to access 
pgAdmin at host.example.com/pgadmin/). The issue seems to be that 
pgAdmin automatically rewrites requests to host.example.com/login, which 
breaks the proxy.

I can't seem to find any options that allow us to specify the web path 
pgAdmin uses, from the perspective of configuring the docker container. 
Can anyone please confirm this?

Thanks in advance,

Glen

---

From: Yogesh Mahajan <[email-masked]>
Date: Tue, 12 Apr 2022 09:41:14 +0530

Hi Glen,

Please refer to the last point at this
<https://www.pgadmin.org/docs/pgadmin4/6.8/container_deployment.html>
web-page for hosting pgadmin4 under subdirectory with Traefik.
Here is example when pgadmin4 is hosted under /pgadmin4/

docker run --name "pgadmin4" \
    -e "PGADMIN_DEFAULT_EMAIL=[email-masked]" \
    -e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
    -e "SCRIPT_NAME=/pgadmin4" \
    -l "traefik.frontend.rule=PathPrefix:/pgadmin4" \
    -d dpage/pgadmin4

Thanks,
Yogesh Mahajan
EnterpriseDB

---

From: Glen Bakeman <[email-masked]>
Date: Tue, 12 Apr 2022 19:17:34 -0700

Yogesh,

Not only was my DuckDuckGo-fu failing me, I didn't even get to the 
bottom of the page...

I had to make a few small tweaks since I'm on Traefikv2, but I'd be 
happy to update the documentation. Thank you for putting me in the right 
direction!

Glen

On 4/11/2022 9:11 PM, Yogesh Mahajan wrote:
> docker run --name"pgadmin4"  \
>      -e"PGADMIN_DEFAULT_EMAIL=[email-masked]"  \
>      -e"PGADMIN_DEFAULT_PASSWORD=SuperSecret"  \
>      -e"SCRIPT_NAME=/pgadmin4"  \
>      -l"traefik.frontend.rule=PathPrefix:/pgadmin4"  \
>      -d dpage/pgadmin4
>
> Thanks,
> Yogesh Mahajan
> EnterpriseDB
>
>
>     pgAdmin at host.example.com/pgadmin/
>     <http://host.example.com/pgadmin/>). The issue seems to be that
>     pgAdmin automatically rewrites requests to host.example.com/login
>     <http://host.example.com/login>, which
>     breaks the proxy.
>

---

From: Glen Bakeman <[email-masked]>
Date: Wed, 13 Apr 2022 11:40:47 -0700

Of course! My docker labels are as follows:

- "traefik.http.routers.pgadmin4.rule=Host(`host.example.com`) && 
PathPrefix(`/pgadmin4`)"
- "traefik.http.routers.pgadmin4.tls=true"

This assumes that the chosen name for the instance is "pgadmin4", which 
is entirely up the user. The Host portion was necessary because Traefik 
will complain otherwise about a lack of specificity in the rule. I also 
added the .tls line since Traefik will only forward insecure requests 
without it (not sure why yet). Otherwise, Traefik is able to 
automatically identify the necessary port on the service to communicate 
with. I added the SCRIPT_NAME environment variable which seemed to be 
the key I was missing.

Thanks again for your help,

Glen

On 4/12/2022 10:19 PM, Yogesh Mahajan wrote:
> Glad to hear it!
> Can you please share what additional steps are required?
>
> Thanks,
> Yogesh Mahajan
> EnterpriseDB
>
>
> On Wed, Apr 13, 2022 at 7:49 AM Glen Bakeman <[email-masked]> wrote:
>
>     Yogesh,
>
>     I had to make a few small tweaks since I'm on Traefikv2, but I'd
>     be happy to update the documentation. Thank you for putting me in
>     the right direction!
>
>     Glen
>
>>         pgAdmin automatically rewrites requests to
>>         host.example.com/login <http://host.example.com/login>, which
>>         breaks the proxy.
>>

---

From: Glen Bakeman <[email-masked]>
Date: Wed, 13 Apr 2022 19:32:54 -0700

For anyone watching this: I've made an issue 
<https://redmine.postgresql.org/issues/7315> to track updating the docs. 
If someone can give me the OK I'll go and get it done.

Glen

On 4/13/2022 11:40 AM, Glen Bakeman wrote:
> This assumes that the chosen name for the instance is "pgadmin4", 
> which is entirely up the user. The Host portion was necessary because 
> Traefik will complain otherwise about a lack of specificity in the 
> rule. I also added the .tls line since Traefik will only forward 
> insecure requests without it (not sure why yet). Otherwise, Traefik is 
> able to automatically identify the necessary port on the service to 
> communicate with. I added the SCRIPT_NAME environment variable which 
> seemed to be the key I was missing.
>
>>     Not only was my DuckDuckGo-fu failing me, I didn't even get to
>>     the bottom of the page...
>>

---

From: koff <[email-masked]>
Date: Fri, 20 May 2022 01:55:06 +0200

Hi all,

I need little help  please,

I'v  already   foreign tables (from oracle_fdw) in my  postgresql 
environment.

I'm Just  looking for  script shell  or sql  ( easy way)  to migrate  
this  foreign tables   to locale  table .

My script below  has some issue

thanks lot

------script migrate---

#!/bin/bash
export PGDATA=/pg01/pgdata/9.6/data
export PGUSER="postgres"
export PGPORT="5433"
export PGPASSWORD="ttooe2"

for tbl in `psql -qAt   data_2020
-c "select  foreign_table_name  from information_schema.foreign_tables;"`;
do psql data_2020  -c "create table public.\"$tbl\" as select * from 
fdw_link.\"$tbl\"" ; done

----end  of script---

the database is :  data_2020

  foreign_table schema   is :  fdw_link

and want to copy  to public  schema

---

From: Ron <[email-masked]>
Date: Thu, 19 May 2022 22:17:58 -0500

Please do not hijack existing threads.

On 5/19/22 18:55, koff wrote:
> for tbl in `psql -qAt   data_2020 -c "select  foreign_table_name  from 
> information_schema.foreign_tables;"`;
> do
                   ## note the added semicolon
>     psql data_2020  -c "create table public.\"$tbl\" as select * from 
> fdw_link.\"$tbl\";"
Here, either psql COPY the fdw_link.\"$tbl\" data OUT to a local file, and 
then COPY IN to public.\"$tbl\" *OR* INSERT INTO public.\"$tbl\" SELECT * 
FROM fdw_link.\"$tbl\";

> done

-- 
Angular momentum makes the world go 'round.

---

From: khoff <[email-masked]>
Date: Fri, 20 May 2022 11:40:03 +0200

Hi  Ron,

It works

Thanks for your  contribution

khoff.

Le 20/05/2022 à 05:17, Ron a écrit :
>> for tbl in `psql -qAt   data_2020 -c "select  foreign_table_name  
>> from information_schema.foreign_tables;"`;
>> do
> Here, either psql COPY the fdw_link.\"$tbl\" data OUT to a local file, 
> and then COPY IN to public.\"$tbl\" *OR* INSERT INTO public.\"$tbl\" 
> SELECT * FROM fdw_link.\"$tbl\";
>
>> done
>>
>> ----end  of script---
>>