| PostgreSQL | PostgreSQLのデータを操作する | |
| 2022/10/24 |
| PostgreSQLのデータを操作する |
% psql -U dev1 -d mydb
| コマンド | 意味 |
|---|---|
| \q | 終了する |
| \i {file} | SQL文を{file}から読み込む |
| \d {table} | テーブル{table}の定義を表示する |
| \l | データベースの一覧を表示 |
| \dt | テーブルの一覧を表示 |
| \dn | スキーマの一覧を表示 |
| \df | ファンクションの一覧を表示 |
| \dv | ビューの一覧を表示 |
| \du | ロールの一覧を表示 |
一連のSQL文をファイルに書いておいて、psqlに一気に実行させるには、上記の\iコマンド以外に、 リダイレクトで標準入力から流し込むこともできます。 たとえばこんなファイルを作り、items.sql という名前でセーブしておいて
/* items.sql */ create table dev1.items ( item_id int not null, category_id int, item_name varchar, unit_price numeric, udate timestamp, constraint items_pk primary key(item_id) ); // end.
% psql -U dev1 -d mydb < items.sql
ではさっそく何かデータを入れてみます。上のテーブル items はムッチャ適当なサンプルですが、
insert into items(item_id, category_id, item_name, unit_price, udate) values(123, 1, 'みかん', 100, CURRENT_TIMESTAMP); select count(*) from items;
\echo :AUTOCOMMIT on
\set AUTOCOMMIT off
●パスワードの自動入力
バッチ処理などでパスワードを対話的に尋ねられずに実行したい場合は、
環境変数PGPASSWORDに設定してからpsqlコマンドを実行すればOKです。
% export PGPASSWORD=temppass % psql -U dev1 -d mydb
●スキーマの検索パス
itemsテーブルをdev1スキーマ内に作りたい場合は、CREATE TABLE文でdev1.itemsと指定します。
このテーブルに対してSELECT文やINSERT文を発行したいときも、スキーマのdev1.は毎回付ける必要があるのでしょうか?
いいえ、「検索パス」という仕組みがあり、スキーマ名が省略されたオブジェクトはデフォルトで
(1) DBユーザーと同名のスキーマ ⇒(2) public スキーマ の順に検索されます。
つまり、dev1ユーザーが単に SELECT * FROM items などとしたときは、dev1というスキーマにitemsというテーブルがあればそれが、
なければpublicスキーマにitemsがあればそれが参照されます。どちらにもなければエラーです。
検索パスは明示的に変更もできます。詳細は追って。
●テキストファイルからデータを入力する
OracleのSQL*Loaderのように、テキストファイルからPostgreSQLのデータベースにデータをロードすることもできます。
PostgreSQLでのやり方は、コントロールファイルなどを用意しないといけないSQL*Loaderよりずっと簡単で、単に
234,1,りんご,200,2022-09-20 235,1,いちご,400,2022-09-20 236,1,メロン,1200,2022-09-20
mydb=> \copy items FROM items.dat WITH CSV
mydb=> \copy items FROM items.dat WITH CSV DELIMITER E'\t'
mydb=> \copy items FROM items.dat WITH CSV NULL AS '@'
●pg_dumpによるバックアップと復元
バックアップ方法は何種類かあります。
一般的なコールドバックアップ(つまりバックアップを実行したタイミングまで復旧できるバックアップ)は、
pg_dumpでデータベースごとに取得できます。
pg_dump mydb > mydb.dmp
psql mydb < mydb.dmp
| もくじ | ||
| PostgreSQL | (C) 2002-2023 MISUMI URANO (2000/01/12 - 2022/10/24) |