-
-
Save gwangjinkim/f13bf596fefa7db7d31c22efd1627c7a to your computer and use it in GitHub Desktop.
This gist I write, because I couldn't find step by step instructions | |
how to install and start postgresql locally (using conda within a conda environment - with the result | |
that you can run it without sudo/admin rights on your machine!) | |
and not globally in the operating system (which requires sudo/admin rights on that machine). | |
I hope, this will help especially people new to postgresql (and those who don't have sudo/admin rights on a specific machine but want | |
to run postgresql there)! | |
#################################### | |
# create conda environment | |
#################################### | |
conda create --name myenv | |
# enter the environment | |
conda activate myenv | |
#################################### | |
# install postgresql via conda | |
#################################### | |
conda install -y -c conda-forge postgresql | |
#################################### | |
# create a base database locally | |
#################################### | |
initdb -D mylocal_db | |
############################## | |
# now start the server modus/instance of postgres | |
############################## | |
pg_ctl -D mylocal_db -l logfile start | |
## waiting for server to start.... done | |
## server started | |
# now the server is up | |
#################################### | |
# create a non-superuser (more safety!) | |
#################################### | |
createuser --encrypted --pwprompt mynonsuperuser | |
# asks for name and password | |
#################################### | |
# using this super user, create inner database inside the base database | |
#################################### | |
createdb --owner=mynonsuperuser myinner_db | |
#################################### | |
# in this point, if you run some program, | |
# you connect your program with this inner database | |
# e.g. Django | |
#################################### | |
# in django (Python) e.g. you open with your favorite editor: | |
nano <mysite>/settings.py # or instead of nano your favorite editor! | |
DATABASES = { | |
'default': { | |
'ENGINE': 'django.db.backends.postgresql', | |
'NAME': 'myinner_db', | |
'USER': 'mynonsuperuser', | |
'PASSWORD': '<mynonsuperuserpassword>', | |
'HOST': 'localhost', | |
'PORT': '', | |
} | |
} | |
# and it is available for django | |
# so that you can do | |
############################## | |
# do with the connected program these further steps | |
############################## | |
# first install psycopg2 | |
# because django requires this for handling postgresql | |
conda install -c anaconda psycopg2 | |
# then now you can do: | |
python manage.py migrate | |
# to fully integreate the postgresql into your django website | |
# and to be able to use the database, you also need to create a superuser | |
python manage.py createsuperuser --username name | |
################################ | |
# stop running the postgres instance under ubuntu | |
################################ | |
# monitor whether a postgres instance/server is running or not | |
ps aux | grep postgres | |
# if no instance is running, you will see only one line as the answer to your query - which is from your grep search! | |
# ending with: grep --color=auto postgres | |
# ignore this line! | |
# if an instance of postgresql server is running, then several | |
# processes are runnng | |
# you can kill the server by the first number of the leading line! | |
kill <number> | |
# e.g. the output of `ps aux | grep postgres` was: | |
# username 2673 0.0 0.0 14760 512 pts/11 S+ 07:34 0:00 grep --color=auto postgres | |
# username 30550 0.0 0.0 179144 18996 ? S Jun13 0:01 /home/username/miniconda3/envs/django/bin/postgres -D mylocal_db | |
# username 30552 0.0 0.0 179276 4756 ? Ss Jun13 0:00 postgres: checkpointer process | |
# username 30553 0.0 0.0 179144 5216 ? Ss Jun13 0:01 postgres: writer process | |
# username 30554 0.0 0.0 179144 8464 ? Ss Jun13 0:01 postgres: wal writer process | |
# username 30555 0.0 0.0 179700 5792 ? Ss Jun13 0:01 postgres: autovacuum launcher process | |
# username 30556 0.0 0.0 34228 3416 ? Ss Jun13 0:03 postgres: stats collector process | |
# then # 2673 is just the 'grep --color=auto postgres' so ignore | |
# the line ending with 'postgres -D /path/to/mylocal_db' is the leading line! | |
# take first number occuring in this line (PID - process ID number) which is 30550, therefore kill it by: | |
kill 30550 | |
#################################### | |
# run postgres as a non-server in the background | |
#################################### | |
postgres -D db_djangogirls & # runs postgres | |
# press RET (return) to send it to background! | |
# you can stop and switch to server mode by | |
# following 'stop running postgres instance under ubuntu' | |
############################## | |
# stop non-server or server modus/instance of postgres | |
############################## | |
ps aux | grep postgres # see detailed instructions for finding the correct <process ID> | |
# under 'stop running postgres instance under ubuntu'! And then do: | |
kill <process ID> # to stop postgres | |
Have fun with your completely locally running - more safe - postgresql!!! | |
thank you for sharing.
Is it correct that when I restart the machine it will reset the db?
If I run
pg_ctl -D mylocal_db -l logfile start
I get
pg_ctl: directory "mylocal_db" does not exist
thank you very much
It should not reset. Did you resolve the problem meanwhile?
Very useful!
This saved me so much time!! Thank you!
By running pg_ctl -D mylocal_db -l logfile start
, is the database server running all the time? How about after restarting the machine. Is they any ways to set up a systemctl services here?
Thanks, I had to come over to these instructions yet once again...
Thanks! Finding this saved me from a lot of headache ;-)
Helped me out so much! Thanks for this
Happy that it helped you @chintani @jmmichaud @Isaamarod @yogenderPalChandra !
I get error when I run:
pg_ctl -D mylocal_db -l logfile start
the error:
pg_ctl: could not start server
Examine the log output.
@IceBear0149 Then probably you should examine the log output ;)
This saved my time! thank you
It helped a lot!
Thank you to your help :)
If you don't mind, Let me know reference or document about code?
Thank you to your help :) If you don't mind, Let me know reference or document about code?
Which reference or document you mean? Except the normal instructions for global postgresql - how to do it in the conda environment, I had to found out by trial and error and guessing.
Thank you to your help :) If you don't mind, Let me know reference or document about code?
Which reference or document you mean? Except the normal instructions for global postgresql - how to do it in the conda environment, I had to found out by trial and error and guessing.
Oh, I understood. Thanks.
@junecv and @Nellyashley Thank you for your positive feedback!