Weitere ähnliche Inhalte
Ähnlich wie Ruby Postgres 2009 (20)
Ruby Postgres 2009
- 2. 自己紹介等 / PostgreSQLの方から来ました
(Hatena|Twitter)id:iakio / 石田@苫小牧市
PostgreSQL徹底入門(翔泳社)
pgpool-II Developer
http://postgresql.g.hatena.ne.jp
普段はPHP、C、Java、C++等
Rubyはあんまり詳しくないです
たまにruby-sapporo勉強会に顔を出しています
- 3. (宣伝)JPUG北海道支部
2004年から細々と勉強会やイベントをやったりやらな
かったり
「PostgreSQLで学ぶBoyer-Mooreアルゴリズム」
「PostgreSQL8.3はいかにしてTEXT型のサイズを3バイト縮
めたか」
PostgreSQLを使う上では特に役に立たないかもしれません
自分の知識を発表する→普通の勉強会
知らないしやったこと無いけど気になってることを当日ま
でに必死で調べて発表する→JPUG北海道Style
- 7. RubyとPostgreSQL
ruby-postgres(1997-)
http://rubyforge.org/projects/ruby-postgres
libpqを使った実装
postgres-pr
http://rubyforge.org/projects/postgres-pr
Pure Ruby版
Cコンパイラが使えない環境
libpqが使えない環境
- 9. postgres-pr VS ruby-postgres
ruby-postgres
PGconn.instance_methods(false).sort
=> ["async_exec", "async_query", "client_encoding", "close", "db",
"endcopy", "error", "exec", "finish", "get_notify", "getline", "host",
"insert_table", "lo_create", "lo_export", "lo_import", "lo_open",
"lo_unlink", "locreate", "loexport", "loimport", "loopen", "lounlink",
"on_notice", "options", "port", "protocol_version", "putline", "query",
"reset", "select_one", "select_value", "select_values", "server_version",
"set_client_encoding", "status", "trace", "transaction_status", "tty",
"untrace", "user"]
postgres-pr
PGconn.instance_methods(false).sort
=> ["close", "db", "exec", "host", "query", "user"]
- 11. PGconn.instance_methods(false).sort ruby-pg
=> [:async_exec, :async_query, :backend_pid, :block, :cancel, :close,
:conndefaults, :connect_poll, :connection_needs_password,
:connection_used_password, :consume_input, :db, :describe_portal,
:describe_prepared, :error_message, :escape, :escape_bytea,
:escape_string, :exec, :exec_prepared, :finish, :flush,
:get_client_encoding, :get_copy_data, :get_last_result, :get_result,
:host, :is_busy, :isnonblocking, :lo_close, :lo_creat, :lo_create,
:lo_export, :lo_import, :lo_lseek, :lo_open, :lo_read, :lo_seek,
:lo_tell, :lo_truncate, :lo_unlink, :lo_write, :loclose, :locreat,
:locreate, :loexport, :loimport, :lolseek, :loopen, :loread, :loseek,
:lotell, :lotruncate, :lounlink, :lowrite, :make_empty_pgresult,
:notifies, :options, :parameter_status, :pass, :port, :prepare,
:protocol_version, :put_copy_data, :put_copy_end, :query,
:quote_ident, :reset, :reset_poll, :reset_start,
:send_describe_portal, :send_describe_prepared, :send_prepare,
:send_query, :send_query_prepared, :server_version,
:set_client_encoding, :set_error_verbosity, :set_notice_processor,
:set_notice_receiver, :setnonblocking, :socket, :status, :trace,
:transaction, :transaction_status, :tty, :unescape_bytea, :untrace,
:user]
- 16. レシピ100.1 接続時のTips
引数がよくわからん
------------------------------------------------------------ PGconn::new
PGconn.new(connection_hash) -> PGconn
PGconn.new(connection_string) -> PGconn
PGconn.new(host, port, options, tty, dbname, login, password) ->
PGconn
------------------------------------------------------------------------
* +host+ - server hostname
* +hostaddr+ - server address (avoids hostname lookup, overrides
+host+)
…
* +connect_timeout+ - maximum time to wait for connection to
succeed
* +options+ - backend options
- 20. 環境変数等
接続時にオプションが指定されなかった場
合、PGUSER,PGDATABASE,PGOPTIONS等の環境変数を
参照する
http://www.postgresql.jp/document/current/html/li
bpq-envars.html
$ PGUSER=user1 PGDATABASE=postgres psql
psql (8.4.1)
Type "help" for help.
postgres=# select current_user;
current_user
--------------
user1
(1 row)
- 21. たとえばRailsから
# config/database.yaml
development:
...
database:
pool: 5
username:
$ PGDATABASE=blog_development PGUSER=blog script/console
Loading development environment (Rails 2.3.4)
>> ActiveRecord::Base.connection.query "select current_user"
=> [["blog"]]
$ PGDATABASE=blog_development PGUSER=blog script/server
- 22. レシピ100.2 bulk load
タブ区切りやCSVファイルのロード
サーバー上のファイルにはバックエンドからアクセス
可能(DBのスーパーユーザー権限が必要)
psqlから
=> copy t1 from '/tmp/copy.data';
Rubyから
c.query "copy t1 from '/tmp/copy.data'"
- 26. まとめ
他にもいろいろ便利な機能があります
非同期問い合わせ
ruby-pg + fiber #=> NeverBlockPG
http://www.scribd.com/doc/18166746/NeverBlockRubyKai
gi2009
非同期通知
SQLSTATEのエラーコードを返す
SSLサポート
libpqドキュメントを読みましょう