I need to use postgresql with ruby on rails.
I have these directories
/Library/PostgreSQL
and
/usr/local/Cellar/postgresql/usr:local:Cellar:postgresql:9.2.2
This 2nd directory name is confusing. In finder, when I'm in the directory
/usr/local/Cellar/postgresql,
usr:local:Cellar:postgresql:9.2.2
is actually one directory with forward slashes in the name. usr/local/Cellar/postgresql. It's in terminal where I see the :'s
"brew info postgres" returns the following:
postgresql: stable 9.2.2
http://www.postgresql.org/
Depends on: readline, ossp-uuid
/usr/local/Cellar/postgresql/usr:local:Cellar:postgresql:9.2.2 (2819 files, 39M)
https://github.com/mxcl/homebrew/commits/master/Library/Formula/postgresql.rb
So do I have postgres installed properly? Do I have 2 versions? One in Library/PostgreSQL and one in /usr/local/Cellar (via HomeBrew)?
Regarding trying to use initdb to create my first postgres database:
I have ohmyzsh installed and I am trying to run the initdb command but getting command not found. Which path should I put in my path statement so that it can find the command?
/usr/local/var/postgres/server.log did not exist, so I created it.
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start says server is starting and when I do
ps auxwww | grep postgres
I get:
postgres 260 0.0 0.1 2522180 8084 ?? SNs Tue07PM 0:58.79
/System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker MDSImporterWorker com.apple.Spotlight.ImporterWorker.504
so I think that means it is running, right?
Well I found initdb script file in both Library and brew locations. I navigated to the brew directory containing initdb and tried to run the initdb command and got zsh: command not found.
I then navigated to the Library containing initdb, tried to run it, and got the same results.
Isn't the current directory part of the path because I'm IN IT?
Summary of my questions:
- Which postgres do i have installed? Is it installed twice and should
I uninstall a version? If so, how? - What directory needs to be in my path to run initdb and do I really
need to run it? - Should the postgres server start when I start my computer? I heard
it should. How do I set that up?
Best Answer
Based on your situation, it would make sense I think to disable whatever PostgreSQL you have and start over with a fresh install. We are dealing with completely different applications that have nothing to do with eachother. In reality, PostgreSQL is only needed to serve up data. It makes sense to me, to simplify your life by installing PostgreSQL seperately and treating it as a totally independant application.
The simplest way to go about this, would be to take the following steps.
1. Determine if PostgreSQL is currently running
From the shell, type the following
Postmaster on my machine is the PostgreSQL service. It is listening on port 5432 and has a process id of 1119.
Where is it?
Now that we have the process ID we can locate the files being used. lsof is handy because it will show you all the files and sockets a given process is using.
On my server, it is using /usr/pgsql-9.1/bin/postgres to run the service and the /var/lib/pgsql/9.1/data is the data directory.
From this point you know where its running and what directories its using.
On your server, it looks like its installed in /usr/local/Cellar/postgresql. If you have to start it manually, then you can just leave it alone. When you install PostgreSQL from source, it will install in /usr/local/pgsql by default.
It is only important to be sure that the postgresql currently installed on your system is not using port 5432. This is because two services can not use the same port. If it is, you will need to kill the process and keep it from starting again. Based the contents of your question, it looks like that won't be a problem.
2. Download postgresql
From the shell
3. Install dependencies
I didn't notice you mentionning what flavor of Linux you were running. You can identify your OS by running cat /etc/issue.
PostgreSQL depends on several libraries.
On CentOS, I would run this to install the libraries I needed
On Debian, you would use apt-get to install and apt-cache search to locate. I included build-essential because you'll need it to compile postgres.
Something like apt-get install libreadline6 libreadline6-dev build-essential
Not sure about OSX though
4. Configure, Compile and Install PostgreSQL
You can check to see if the binaries are available
Once this is done, normally you would need to add the postgres user, but he's already on your system You do however need to create a data directory and give postgres read/write access to it
PostgreSQL is installed You have created a data directory Now you can initalize your database
5. Initalize and start postgres
This will the cluster and your configuration files such as postgresql.conf, pg_hba.conf which you will need to modify later based on the users that need access, their ip addresses and what ip address and port postgresql will listen on
Now you can start PostgreSQL with the following command :
When you run netstat -tlpn again, you should see
It is only listening to local connections for now, because by defaut that's what postgresql.conf is configured to do.
6. What's next
From here, you would need to configure postgresql.conf and pg_hba.conf appropriately. pg_hba.conf defines who can connect, from where and to what. postgresql.conf is used to configure the entire service, what ip address or addresses it listens on, what port number, maintenance cyles, etc. For your purposes, you will probabaly only be interested in changing this variable
listen_addresses = '*'
You may also want to create an init script in the /etc/init.d directory, so it will start automatically. How you go about that also depends on what flavor of Linux you are running.
If you run into any problems let me know. Since you are probably not using the exact same system, you may run into problems I haven't discussed here.