postgresのメモ

                                                                                                                                           2022.10.16 bullseye

Debian だとaptで一発インストールでした。使い方の詳細はよくわかりません。
とりあえずシスアド初級の問題を試せる程度のところまでのメモです。
 (Debian Woody のときのメモです。)

1 インストール

$ sudo apt-get install postgresql-13

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



2 使い方

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

$ sudo  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の後ろには'が付きません