# 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]) ```