# Installing Postgres via Brew

## Pre-Reqs
[Brew Package Manager](http://brew.sh)

In your command-line run the following commands:

1. `brew doctor`
1. `brew update`

## Installing
1. In your command-line run the command: `brew install postgresql`
2. Run the command: `ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents`
3. Create two new aliases to start and stop your postgres server. They could look something like this:

     ```
     alias pg_start="launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist"
     alias pg_stop="launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist"
     ```

4. Run the alias you just created: `pg-start`. Use this comment to start your database service.
     - alternatively, `pg-stop` stops your database service.
5. Run the command: ``createdb `whoami` ``
6. Connect to your postgres with the command: `psql`
7. `brew reinstall readline` - if needed
8. `createuser -s postgres` - fixes `role "postgres" does not exist`
9. Test with `psql` command

     ```
     $ psql
     psql (10.0)
     Type "help" for help.

     ibraheem=# 
     ```

## Details
### What is this `ln` command I ran in my Terminal?

_from the `man ln` command_

> The ln utility creates a new directory entry (linked file) which has the same modes as the original file.  It is useful for maintaining multiple copies of a
     file in many places at once without using up storage for the ``copies''; instead, a link ``points'' to the original copy.  There are two types of links; hard
     links and symbolic links.  How a link ``points'' to a file is one of the differences between a hard and symbolic link.

### What is `launchctl`?

_from the `man launchctl` command_

>launchctl interfaces with launchd to manage and inspect daemons, angents and XPC services.

## Commands

### Create database
```
createdb <database_name>
```
> `createdb mydjangoproject_development`

### List databases
```
psql -U postgres -l
```

### Show tables in database
```
psql -U postgres -d <database_name>
```
> `psql -U postgres -d mydjangoproject_development`

### Drop database
```
dropdb <database_name>
```
> `dropdb mydjangoproject_development`

### Restart database
```
dropdb <database_name> && createdb <database_name>
```
> `dropdb mydjangoproject_development && createdb mydjangoproject_development`