Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initialization script when PGData is not empty #1229

Open
tomera-cyera opened this issue Apr 18, 2024 · 10 comments
Open

Initialization script when PGData is not empty #1229

tomera-cyera opened this issue Apr 18, 2024 · 10 comments

Comments

@tomera-cyera
Copy link

I know that when the PGData directory is not empty the container skips the initialization and therefore won't run the initialization script in /docker-entrypoint-initdb.d

I would like to use a way to give the container scripts that will run on startup no matter what (for example to create a role postgres if one does not exist already)

@tianon
Copy link
Member

tianon commented Apr 18, 2024

If you want a solution that does something with a started database (like our existing initdb scripts do), see #173, #821, #191, #929 for some other issues that have some good thoughts / suggestions (one of which this is probably a duplicate of).

@tomera-cyera
Copy link
Author

Hi @tianon! Thanks for your response.
I managed to run an init script on my db but it fails with role "postgres" does not exist (it was probably deleted).
I don't know what roles the db has and I want to use the init script to verify the postgres role exists (and if not to create one).

@LaurentGoderre
Copy link
Member

You can run

docker exec -u postgres -it postgres psql    
psql (16.2 (Debian 16.2-1.pgdg120+2))
Type "help" for help.

postgres=# \du
                             List of roles
 Role name |                         Attributes                         
-----------+------------------------------------------------------------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS

@tomera-cyera
Copy link
Author

Hi @LaurentGoderre unfortunately your solution would not work in my case because there is no role postgres so I'm unable to execute any command with -u postgres, that's why I would like to init the db with a postgres role creation

@LaurentGoderre
Copy link
Member

@tomera-cyera I believe postgres in this case refers to the OS user which is postgres not the db role.

@tomera-cyera
Copy link
Author

tomera-cyera commented Apr 25, 2024

No, I refer to the postgres db role in case I initialize the container with data-dir that does not have the role postgres I want to make sure the postgres role will be created if not exist
@LaurentGoderre

@LaurentGoderre
Copy link
Member

OOh you mean at initialization?

@tomera-cyera
Copy link
Author

@LaurentGoderre, yes. you see I need to initialize the db to have a postgres role even when the datadir already exists (a.k.a the db already initialized)

@yuvall-cyera
Copy link

@tianon @LaurentGoderre what do you think?

@tianon
Copy link
Member

tianon commented Aug 19, 2024

@yuvall-cyera can you please be more specific about what it is you're looking for feedback on? IMO the thread above is pretty clear (if you need one-time initialization, the image has that as-is, and if you need more than that, see the references in #1229 (comment))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants