Updated this wiki to make it more clear and up-to-date. -- Evanlec
Added instructions on how to create new databases as unicode by default. This seems relevant as the default "encoding" SQL_ASCII is pretty useless for most people. --Cabrilo 06:15, 11 January 2010 (EST)
Is step 4 correct? Elipsion 08:15, 13 January 2010 (EST)
- Good catch. Obviously it wasn't, datistemplate should've been set to TRUE for that database. Thanks for noticing it, I fixed it. --Cabrilo 12:00, 13 January 2010 (EST)
- Is this section still necessary? I am just learning, but did a "show client_encoding" on template1 and it returns UTF8 out of the box. --Nitmd 11:55, 18 September 2010 (CDT)
- I think it's still necessary (and thank you for making this section). Just removed "vacuum freeze", since it's no longer recommended and the command will be obsolete in future releases of postgresql. BTW: I ran into a problem with the statement to disallow connections to the template1 database. This is because I wanted to build a new database named "postgres". After dropping the postgresql db, creating a new template1 and disallowing the connections to template1, I had no database to connect to, so I couldn't create a new database. Had to delete the data dir and start over.Tankgrun 10:07, 12 August 2011 (EDT)
Before you start
This section is confusing because it assumes "postgres" user has already been created, whereas it is created by "pacman -S postgresql" issued in the following section. I'd suggest to restructure the article this way: 1. Installing PostgreSQL - with single package installation instruction only, 2. Before you start, 3. Configuring PostgreSQL --Mloskot (talk) 20:03, 24 March 2013 (UTC)
- Agreed. I simplified the "Installing PostgreSQL" section and merged the instructions from "Before you start". Hopefully it is clear now. Infiniteh (talk) 19:58, 28 April 2015 (UTC)
According to this blog post which is referred to on the postgres wiki it is more secure NOT to assign a password to the linux user postgres that is automatically created during postgresql install. erikwesselius (talk) 02:05, 12 August 2015 (UTC)
Package in the repo is not fully ready for systemd
The page talks about PGROOT, but if you follow the instructions it is never set. From this thread I found that a file should be created at
/etc/conf.d/postgres that contains the following:
## ## Parameters to be passed to postgresql ## ## Default data directory location PGROOT="/var/lib/postgres" ## Passed to initdb if necessary INITOPTS="--locale en_US.UTF-8" ## Default log file location PGLOG="/var/log/postgresql.log" ## Additional options to pass via pg_ctl's '-o' option #PGOPTS=""
Maybe this could go into the postgresql.conf, I dunno. All I know is that systemd will refuse to run the service if PGROOT isn't set. I'll give putting that in the conf file a try and update with results. —This unsigned comment is by Slippery John (talk) 17:53, 21 June 2013. Please sign your posts with ~~~~!
Problem changing default data directory
I followed the instructions to change default data directory, however, when starting the service again, it fails with the following error:
/var/lib/postgres/data" is missing or empty.
Setting up HHVM
Tips and tricks
I don't know where to put this on the main page, but found it useful / missing - especially the part about using journalctl -t instead of … -u.
Logging of queries / statements
- Configure log_statement in /var/lib/postgres/data/postgresql.conf.
- Tail and follow the log via journalctl -t postgres -f.
Hi. I never edit any wiki page nor talk page. Hopefully I don’t mess with anything. :)
I’d like to suggest that the section of PostgreSQL dealing with starting a new database should be simplified. I’m just a psql newbie and I have found the instructions quite a mess – and I wouldn’t even solve my issues unless I’ve found this page. In my opinion, the PostgreSQL (and other Arch Wiki pages) should be explicit about what commands are to executed, though the links contaning more information about the commands and their options are great. Here is my list of commands how to create a psql db (probably some corrections are needed):
- install postgres
sudo pacman -S --noconfirm postgres
- create new db user (-s stand for shell; -m creates /home/$USER; -U adds a group with the same name as $USER; postgres is the user's name)
useradd -s /bin/bash -m -U postgres
- check if /var/lib/postgres/data dir was created
sudo mkdir -p /var/lib/postgres/data
- check if /var/lib/postgres is owned by postgres:postgres
- note: probably only /var/lib/postgres/data needs to be owned by postgres:postgres
sudo chown -R postgres:postgres /var/lib/postgres
- before postgresql can function correctly, the database cluster must be initialized
- note: probably `-E UTF8` can be removed altogether, because it's also set in locale (???)
- note: the `intdb` command output must end with 'Success.' and some commands how you can start a db server
su - postgres initdb --locale en_US.UTF-8 -E UTF8 -D '/var/lib/postgres/data'
- enable and start postgresql.service
- note: probably the second command is unnecessary, but a good programmer does not leave anything to chance :)
sudo systemctl enable postgresql.service sudo systemctl start postgresql.service
(the rest of the PostgreSQL page as follows)