0

Now I'm a little shaky with Ubuntu and postgres, but here is what I've currently done.

In Ubuntu, I've created a user, called postgres, with a password of postgress:

$ sudo adduser postgres
Enter new UNIX password: (I typed ' postgres ' here)
Retype new UNIX password: (I typed ' postgres ' here)

I then logged in as the postgres user:

$ su postgres
Password: (I typed ' postgres ' here)

As postgres, I started the postgres server:

postgres@ubuntu:/$ /usr/lib/postgresql/9.1/bin/postgres -D /usr/local/var/postgres
LOG:  database system was shut down at 2013-11-05 17:04:32 PST
LOG:  database system is ready to accept connections 
LOG:  autovacuum launcher started

Next, I created a rails application setup to use a postgres database:

rails new myapp --database=postgresql

I appended my database configuration YAML file:

# PostgreSQL. Versions 8.2 and up are supported.
#
# Install the pg driver:
#   gem install pg
# On OS X with Homebrew:
#   gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On OS X with MacPorts:
#   gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
#   gem install pg
#       Choose the win32 build.
#       Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
development:
  adapter: postgresql
  encoding: unicode
  database: postgresql_development
  pool: 5
  username: postgres
  password: postgres

  # Connect on a TCP socket. Omitted by default since the client uses a
  # domain socket that doesn't need configuration. Windows does not have
  # domain sockets, so uncomment these lines.
  #host: localhost

  # The TCP port the server listens on. Defaults to 5432.
  # If your server runs on a different port number, change accordingly.
  #port: 5432

  # Schema search path. The server defaults to $user,public
  #schema_search_path: myapp,sharedapp,public

  # Minimum log levels, in increasing order:
  #   debug5, debug4, debug3, debug2, debug1,
  #   log, notice, warning, error, fatal, and panic
  # Defaults to warning.
  #min_messages: notice

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: postgresql
  encoding: unicode
  database: postgresql_test
  pool: 5
  username: postgres
  password: postgres

production:
  adapter: postgresql
  encoding: unicode
  database: postgresql_production
  pool: 5
  username: postgres
  password: postgres

Finally, I run

rake db:setup

Not really knowing what to expect, really. As mentioned I'm a little shaky with this topic. Many a little db.postgres file will appear in my application's db directory?

At any rate, I get a huge error message, but this gist of it is this:

Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"postgresql_development", "pool"=>5, "username"=>"postgresql", "password"=>nil}
FATAL:  role "postgresql" does not exist

The good news is that the database server output is this:

FATAL:  role "postgresql" does not exist
FATAL:  role "postgresql" does not exist
FATAL:  role "postgresql" does not exist

Meaning everything's 'hooked up' correctly on my system and that the rake task is attempting to create my test, production and deployment databases.

The bad news is that I don't really understand the error messages:

FATAL:  role "postgresql" does not exist 

Um, pretty sure the username specified in my YAML is postgres, not postgresql.

couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"postgresql_development", "pool"=>5, "username"=>"postgresql", "password"=>nil}

Again, why is my username postgresql and my password blank? This simply isn't what I have in my YAML!

If someone could help me take this final step I'd be very grateful :)

Final question, how do non-sqlite3 databases work exactly, where are they located on the system. When I started off with Rails and saw the little db.sqlite3 inside my db directory, I can understand that completely.

With beefer databases, though, the database is now stored in something called a cluster, correct?

Now for every single postgres rails app I create, will all of their databases be stored in the cluster?

Will this be the same if I purchase an Ubuntu VPS and install postgres on it? A cluster located at /usr/local/var/postgres containing all of the databases for all of my applications?

Chris Travers
  • 25,424
  • 6
  • 65
  • 182
Starkers
  • 10,273
  • 21
  • 95
  • 158
  • Check this out: [Postgres Error][1] [1]: http://stackoverflow.com/questions/8639424/role-does-not-exist-and-unable-to-create-database-when-using-postgresql – LotusUNSW Nov 06 '13 at 02:55

1 Answers1

2

You've made this question a lot harder to answer by omitting details like the OS and version you're on, how you installed PostgreSQL, etc.

You mentioned Ubuntu so I'm going to guess you installed the PostgreSQL packages from Ubuntu through apt.

If so, the postgres PostgreSQL user account already exists and is configured to be accessible via peer authentication for unix sockets in pg_hba.conf. You get to it by running commands as the postgres unix user, eg:

sudo -u postgres createuser the_name

rake db:create:all

After doing this, and restarting my Rails server, I went back to server_url and I was happily riding the Rails!

channely
  • 56
  • 3