目次

SQLはpgAdmin3でサンプルコードが取得できる。

久しぶりにPOSTGRESQLを使った、もう10年ぶりぐらいだ、

いまでは、pgAdmin3とかいう、GUIで制御可能なインタフェースが用意されている。

インストールの注意点

スペース入りのフォルダにインストールすると

cygwinの引数設定で、設定ファイルが見つからないとか、サーバ起動のファイルが見つからないとか言い出すので、スペース入りのフォルダに入れないこと

スペースがあると困る例

pg_ctl reload -D $DATADIR

DB作製

作製するdb01とすると

-- Database: db01

-- DROP DATABASE db01;

CREATE DATABASE db01
 WITH OWNER = postgres
      ENCODING = 'UTF8'
      TABLESPACE = pg_default
      LC_COLLATE = 'Japanese, Japan'
      LC_CTYPE = 'Japanese, Japan'
      CONNECTION LIMIT = -1;

スキーマ作製

スキーマを作製するサンプル

初期権限などの設定を細かく指定するため、最初に設計をしておいたほうがいい。

CREATE SCHEMA sc01
      AUTHORIZATION postgres;
GRANT ALL ON SCHEMA sc01 TO public;
ALTER DEFAULT PRIVILEGES IN SCHEMA sc01
   GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON   TABLES
   TO public WITH GRANT OPTION;
ALTER DEFAULT PRIVILEGES IN SCHEMA sc01
   GRANT SELECT, UPDATE, USAGE ON SEQUENCES
   TO public WITH GRANT OPTION;
ALTER DEFAULT PRIVILEGES IN SCHEMA sc01
   GRANT EXECUTE ON FUNCTIONS
   TO public WITH GRANT OPTION;

psqlの日本語設定

10年ぶりに使ってからさらに数年たった。前回使っていたバージョンが思い出せない。

確か8.1とかだったかと思う。今は、9.3だ。また、数年後に思い出すかもしれない。

psqlをcygwinで使ってみた。 日本語の設定をする。いまどき大体文字コードはUTF-8で統一しているところが多い。

過去のサイトを見るとSJISに設定する例が載っていたが、やはり自分にはUTF-8がいい。

設定してうまくいったのでメモしておく。

.bashrcまたは、.bash_profileに登録しておく設定

export LANG=ja_jp.UTF-8

psqlで実行

\encoding UTF-8

設定ファイルに入れても、無効だった。他にやり方はあるのだろうけれども、 仕方がないので上のコマンドをたたく。

情報源

http://yanor.net/wiki/?PostgreSQL%2F%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E7%AE%A1%E7%90%86%2Fpsql%2F%E3%83%A6%E3%83%BC%E3%82%B6%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB

一覧

テーブル一覧

psqlを使うと、ショートカットコマンド風になっているが、インデックスのDDL情報を引き出すには、こっちのほうがいい。スキーマは、デフォルトでpublicなので、

下記の例においては求めるスキーマによって変える必要がある。

サンプル

SELECT * FROM pg_tables where schemaname='public' ORDER BY tablename;

インデックス一覧

ユーザの作成したインデックスを出力するのはこちら

SELECT * FROM pg_indexes i inner join pg_tables t on t.tablename=i.tablename where t.schemaname='public';

インデックスのDDL生成

pg_dumpは残念なことにプライマリキーの定義やインデックスの定義を吐き出さない。

オプションで用意しておいてほしいところだが、ない。 その代わりといってはなんだが、下記のコマンドで生成される

テーブル名がt_target_geo_coordの場合の例

SELECT indexdef FROM pg_indexes i inner join pg_tables t on t.tablename=i.tablename where t.schemaname='public' and t.tablename='t_target_geo_coord';

自分がやりたいことは、リモートのインデックス生成情報を得ることだ。

psqlは標準入力を受け付けてくれるので、下記のような書き方になる。

echo "SELECT indexdef FROM pg_indexes i inner join pg_tables t on t.tablename=i.tablename where t.schemaname='public' and t.tablename='t_target_geo_coord';" |psql -h IPアドレス -p ポート -U ユーザ名 -f - -d データベース名 | grep CREATE

プライマリキーも別途出力する

データベースを部分的に出力する

ファイル指定の方法が、癖があるようだ。 http://d.hatena.ne.jp/deeeki/20080613/pgsqlcopycsv

dateフォルダにあるpostgresql.confのclient_encodingの値

UTF-8にしたい場合、次のように書く

client_encoding = UNICODE

または

client_encoding = UTF-8

再起動をかけないと反映されない。

設定を反映 cygwinの場合

pg_ctl reload  [-D DATADIR] [-s]

PostgreSQLでencoding,collate,ctypeの初期値を変更する方法

URL

http://symfoware.blog68.fc2.com/blog-entry-947.html

でも、ja_JP.UTF-8で登録しようとしたらエラーだった。

データベース作成

pgAdmin3というツールで自動生成されるDB作成のコードは下記の通りだが、

エンコードがないとかでエラーになった。

-- Database: postgres

-- DROP DATABASE postgres;

CREATE DATABASE postgres
  WITH OWNER = postgres
      ENCODING = 'SQL_ASCII'
      TABLESPACE = pg_default
      LC_COLLATE = 'C'
      LC_CTYPE = 'C'
      CONNECTION LIMIT = -1;

COMMENT ON DATABASE postgres
  IS 'default administrative connection database';

LC_COLLATE = 'C'だと並べ替えで日本語を指定するときに困るのでは?

エンコードはUNICODEを使いたいし、その場合の、並べ替え方法はJapanese_Japan.932を使いたい。

テンプレートを使えというメッセージが出ている。サンプルをググって、

次のコードを実行できました。

CREATE DATABASE データベース名
  WITH OWNER = postgres
       ENCODING = 'UNICODE'
TEMPLATE template0;

copyコマンド

ファイルパスの指定とかできる風に書いてあるけれども、cygwinのパスはかけなかった。

こんな感じの書き方でいけた。パスの先頭にEをつけるとか、おまじないの世界へようこそ。

copy "t_meteor_gpv_data" from E'c:/cygwin/home/こんなかんじのファイルパス' with csv;
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-11-27 (水) 14:00:27 (2885d)