アトム-サイト
[ アトム-サイト ] - 管理人さんのページです。
feed-icon RSS2.0   feed-icon Atom
[ データベース ] 一覧へ
postgres
管理人さんのブログ 2010-03-03 09:57:03

postgresユーザになる
root@ubuntu-atsu01:~# id
uid=0(root) gid=0(root) groups=0(root)
root@ubuntu-atsu01:~# su - postgres

psqlでデータベースをいじれます
postgres@ubuntu-atsu01:~$ psql -l
List of databases
Name | Owner | Encoding
------------+----------+------

DBユーザ登録
postgres@ubuntu-atsu01:~$ createuser -P test
ここでパスワード設定。
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
CREATE ROLE

確認は
$ psql
# select usename from pg_user;

DBユーザ削除
postgres@ubuntu-atsu01:~$ dropuser test
DROP ROLE

DB生成
createdb -O オーナー名 -E UTF-8 dbname

DBに入る
psql DB名

テーブル一覧表示
# select * from pg_tables;
# \d ←コレが楽

DB削除
dropdb dbname

↓こんなエラーが出てdropdb出来ない時は、
dropdb: database removal failed: ERROR: database "dbname" is being accessed by other users
データベースへの接続が残っている為。
再起動
# /etc/init.d/postgres restart
すれば、dropdb出来る様になります。

DBオーナー変更
まずはtemplate1データベースに入ります。
psql template1
次に、ユーザIDを探し出します。
SELECT * from pg_user;
ここの『usesysid』を使って、UPDATEにてIDを書き換えれば変更終了。
UPDATE pg_database SET datdba = ID番号 WHERE datname = データベース名;

ユーザ毎のアクセス制御
/var/lib/pgsql/data/pg_hba.conf の一番下。
host all all 127.0.0.1/32 password
環境に応じて変えてやって、リスタート。
# /etc/init.d/postgresql restart
※上の行から順番に判定するので、同じ様な制御はキチンと無効化する事(コメントアウトする)。

DBのバックアップと取り込み
pg_dump dbname > backupdata
で、取り込む所に移動して
psql -d dbname < backupdata
オーナーを合わせて入れてあげる。また、テーブルのオーナーの違いでアクセスできない時はGRANTでアクセス許可してあげる。

例)オーナーを合わせた後、以下の様にすればうまくいきます。
pg_dump -U ユーザ名 -F p -D -v -i -f バックアップファイル名 データベース名
psql -U ユーザ名 -d データベース名 -f バックアップファイル名


SERIAL値と取り出し
テーブルを作ります
# CREATE TABLE test_tbl ( id SERIAL PRIMARY KEY, name text);
NOTICE: CREATE TABLE will create implicit sequence "test_tbl_id_seq" for serial column "test_tbl.id"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_tbl_pkey" for table "test_tbl"
CREATE TABLE
出来たテーブルを見る
# \d
List of relations
Schema | Name | Type | Owner
--------+--------------------------+----------+------
public | test_tbl | table | postgres
public | test_tbl_id_seq | sequence | postgres
(15 rows)
SERIAL値はINSERT等でセッションが確立された後のでないと見れない様になっている(自分がINSERTしたSERIAL値を得る事が出来る)
# SELECT CURRVAL('test_tbl_id_seq');
ERROR: currval of sequence "test_tbl_id_seq" is not yet defined in this session
実際にデータを入れてみる
# INSERT INTO test_tbl(name) VALUES('atsu');
INSERT 0 1
# INSERT INTO test_tbl(name) VALUES('hoge');
INSERT 0 1
# SELECT * FROM test_tbl;
id | name
----+--
1 | atsu
2 | hoge
(2 rows)
入れたデータのSERIAL値を得る事ができます
# SELECT CURRVAL('test_tbl_id_seq');
currval
-----
2
(1 row)
SERIAL値を自分で設定するには
# SELECT SETVAL('test_tbl_id_seq', 10);
setval
----
10
(1 row)

TIMESTAMP
小数点の付かないタイムスタンプ
CREATE TABLE test_tbl (
 ……
 ……
 write_time TIMESTAMP(0)
);

1日前表示
postgres=# select now() + INTERVAL '-1 day';
?column?
---------------------------
2008-02-20 20:14:47.475886+09
(1 row)

高速化
EXPLAINを付けてSELECTする。
-> Seq Scan on... と書かれていたら全検索。
Index Scan using... と書かれていたらインデックスが使われている。
cost=0.00..xxx.xx部分が検索時間(少ない程良い)。
インデックスを作るのは
CREATE INDEX index_name ON table_name (fieldname1, fieldname2);



※ 『postgres』に繋がる関連物を 視覚的に探しだせるサイトを作ってみました(よろしければクリックしてみてくださいね)。

 月間ページ閲覧者数:4人

[ データベース ] 一覧へ


<< 2018年12月
2018年12月12日(水)
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

 最近の書き込み

SMTP
  <2016-04-06 12:03:21>
S.M.A.R.T.
  <2015-05-07 08:03:36>
POP
  <2015-04-21 11:33:37>
Linuxコマンド
  <2015-04-21 11:03:04>
アルバートオデッセイ
  <2014-08-04 23:12:12>
トイレ
  <2014-01-31 08:58:16>
(*)調光スイッチ
  <2013-09-30 10:46:11>
(*)調光スイッチ
  <2013-09-20 01:26:34>
(*)調光スイッチ
  <2013-09-17 12:21:11>
(*)調光スイッチ
  <2013-09-15 20:13:59>


 カテゴリー

おでかけ(83)
サッカー(45)
旅(45)
DIY(43)
食べ物(39)
映画(36)
家(35)
季節(34)
健康(32)
地元(29)
本(29)
家族(29)
モバイル(23)
生物(23)
学校(22)
家電(21)
ドラマ(21)
風景(18)
Web(18)
PCハード(17)
通勤(16)
ゲーム(16)
Winアプリ(15)
ブログ(14)
Linux(13)
飲み物(13)
自転車(13)
ゴルフ(11)
ブラウザ(11)
ネットワーク(10)
javascript(10)
足技(9)
php(9)
会社(8)
感銘映像(8)
税金(6)
空想(5)
VMware(5)
Ruby(4)
データベース(3)
 ・ mysql
 ・ postgres
 ・ SQL
perl(1)