postgresのメモ

                                                                                                                                           2022.10.16 bullseye

Debian だとaptで一発インストールでした。使い方の詳細はよくわかりません。


1 インストール

$ sudo apt-get install postgresql-13

 上記を実行するとpostgresというアカウントが作成される。
 postgresのパスワードを変更しておく
$ sudo passwd  postgres



2 使い方

1 まずpostgres というユーザ名でログインします。

$ su  postgres
 

2 新しいデータベースの作成
例えばmeiboというデータベース を作成するには postgres というユーザ名でログインして

$ createdb meibo
と creatdb命令を実行します。
つぎにこのデータベース を操作するためにpsql文を実行します。

$ psql meibo
psql (13.8 (Debian 13.8-0+deb11u1))
"help"でヘルプを表示します。

meibo=#

次にtb1という名前のテーブルを作成してみます。
meibo=# create table tb1(id serial not null,name varchar(255) not null,age integer,city varchar(20),PRIMARY KEY (id) );
CREATE TABLE
meibo=#

上の例ではidと名前最大255文字、年齢、都市名20文字をそれぞれ id, namae, age, cityで定義してあります。
ID interger primary key はの項目は作らなくても動きます。コマンドの最 後は必ず ; を付けるのを忘れないようにします。

idは serialを指定するとオートインクリメントになります。
オートインクリメントにしない場合は、id integer  と記述します。

テーブルが存在するかどうかは\dt;コマンドで確認することができます。

meibo=# \dt;
           リレーション一覧
 スキーマ | 名前 |  タイプ  |  所有者 
----------+------+----------+----------
 public   | tb1  | テーブル | postgres
(1 行)

meibo=#

データを2件入れてみます。

meibo=# insert into tb1 (name,age,city) values ('江木 花子',18,'高崎市');
INSERT 0 1
meibo=# insert into tb1 (name,age,city) values ('堀川 一貫',36,'藤岡市');
INSERT 0 1
meibo=#

SQL文を実行します。

meibo=# select * from tb1;
 id |    name    | age |  city 
----+------------+-----+--------
  1 | 江木 花子 |  18 | 高崎市
  2 | 堀川 一貫  |  36 | 藤岡市
(2 行)

meibo=#

先日、idなんていう項目は無しで皆でtelnetで同じpostgresでログインしてinsert命令でどんどん
名前を入れまくりました。(sql問題の練習用のテーブルを作るために)結構うまく行きました。

主な操作コマンド(実行するときコマンドの後に;をつけること)
コマンド名
機能
\dt
テーブルの一覧表示
\dv
ビューの一覧表示
\ds
シーケンスの一覧表示
\d
\dtvsと同じ
\dT
データ型の表示
\h
SQLコマンドのヘルプ
\l
データベース一覧表示
\q
psqlの終了
\s
コマンド履歴の表示
\z
テーブル\&アクセス権限一覧
\?
コマンドのヘルプ

3 テーブルの削除
# drop table tb1;

4 CSVファイルによる一括登録
まず下のようなcsvファイルをつくります。データとデータの間はカンマにします。文字列は"や'を使わなくて大丈夫です。
フィールドごとに「,」で区切られた順に数値、文字列を判断してテーブルに入ります。
id,name,age,city
3,荒牧 真美,38,前橋市
4,追貝 滝雄,63,沼田市
以下略
このCSVファイルが/home/hoge/data.csv だとします。
postgres にログインして
$ psql  meibo
#
とするとフォルダやファイルはlsコマンド等で見られなくなりますが、csvファイルをフルパスで指定するとテーブルtb1にデータを一括登録で きます。

meibo=# copy tb1 from '/home/hoge/data.csv'delimiter','CSV HEADER;

delimiter','CSV HEADER は、ヘッダ行を無視します。なぜがCSV HEADERの後ろには'が付きません