---
# System prepended metadata

title: postgresqlと仲良くなりたい

---

# postgresqlと仲良くなりたい
CODEBASEプログラミングスクール資料
Postgresqlの簡単なコマンドとSinatraとの繋ぎかたを簡単に書いています。

# postgresql基本コマンド

### コマンドの種類
今回二種類のコマンドを使い分けるので、その見分けかたを記します。DB接続していない状態で打つコマンドか、接続後に打つコマンドかを分けてるだけです。
1. コマンドライン上でにコマンド(DB接続していない)
`$ コマンド`

2. DBに接続後のコマンド
`# コマンド`

<br>

### DB基本操作
version確認
```$ psql --version```
<br>

DBの一覧を見る
```$ psql -l```
<br>

DBを作る(二通り)
※ DBnameは自分が作りたいDBの名前を入れてください。
```
その1(terminal)
$ createdb DBname

その2(どこかのDBに入った後に)
# create database db_name;
```

※ PostgreSQLでDBを作る際、デフォルトで入ってるDBのtemplate1を複製しているらしいので、template1の設定を変更する= デフォルトの値の変更となる。
<br>

DBを消す
※ DBnameは自分が削除したいDBの名前を入れてください。
```$ dropdb DBname```
<br>

DBに入る
※ DBnameは自分が入りたいDBの名前を入れてください。
```
$ psql DB名
DB名=#
```
<br>

DBから出る
```# \q```
<br>

helpを見る
`# \? `
<br>

DBの一覧
`# \l`
<br>

他のDBに接続
```# \c DB名```
<br>

### table基本操作
table作成
`create table tablename (列名 データ型 制約);`

例)
```DBname=# create table users (id serial primary key, name varchar(20), password varchar(30));```

<br>

table構造
```# \d table名```
<br>

table一覧
`# \dt`
<br>

tableの中身をみたい
`# select * from tablename`
<br>

tableの削除
`# DROP TABLE table名;`
<br>


insert文
`# insert into posts (title ,body) values('やったー' ,'内定もらった！');`
※ valueの文字列は、''（シングルクウォート）のみ使える。
<br>

table名前変更(posts => myposts)
`# alter table posts raname to myposts`
<br>

### columnの変更
columnの追加
```# ALTER TABLE テーブル名 ADD COLUMN カラム名 データ型;```
<br>

columnの削除
```# ALTER TABLE テーブル名 DROP COLUMN カラム名;```
<br>

columnのデータ型変更
```# ALTER TABLE テーブル名 ALTER COLUMN カラム名 TYPE データ型;```
<br>

## データ型と制約
### データ型
- 数値: integer(int), real, serial
- 文字: char(5), varchar(255), text
- 真偽: boolean TRUE FALSE t f
- 日付: date, time, timestamp

### 制約
- not null (nullを認めない)
- unique (被りを許さない)
- default (デフォルト値を決めれる)
- primary key (not null, unique)

<br>

# Posgresql × Sinatra

ここからはSinatraのapp.rbに書いていく記述になります。

DB connection
```
connection = PG::connect(
  :host => "localhost", 
  :user => "ユーザー名", 
  :dbname => "データベース名")
```
- ローカル環境だけで動かすのならば、dbnameだけで良い。

### SQL

変数を含んだselect文
```
name = params['name']
password = params['password']
connection.exec("select * from users where name = $1 and password = $2",[name, password]).first
```
変数を含んだinsert文
```
name = params['name']
password = params['password']
connection.exec("insert into users (name, password) values($1, $2)",[name, password])
```
