¤Ï¤¸¤á¤Ë

¤³¤Î¥Ú¡¼¥¸¤Ç¤Ï¡¢perl¤«¤éDBD·Ðͳ¤ÇPostgreSQL¤òÁàºî¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ëÀßÄê¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Þ¤¹¡£

¡Öp5-DBD-Pg¡×¤Î¥¤¥ó¥¹¥È¡¼¥ë

perl¥¹¥¯¥ê¥×¥È¤«¤éPostgreSQL¤òÍøÍѤ¹¤ë¤Ë¤Ï¡¢DBD-Pg¤È¤¤¤¦perl¥â¥¸¥å¡¼¥ë¤òÍøÍѤ·¤Þ¤¹¡£
FreeBSD¤Ç¤Ï¡¢¤³¤Îperl-PostgreSQL¤È¤ÎÏ¢·ÈÍѤΥ⥸¥å¡¼¥ë¤Ï¡¢¡Öp5-DBD-Pg¡×¤Î̾Á°¤Çports¤È¤·¤ÆÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
p5-DBD-Pg¤ÏPostgreSQL¤äperl¡¢mod_perlÅù¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ¤â¼«Æ°Åª¤Ë¤ÏƳÆþ¤µ¤ì¤Þ¤»¤ó¤Î¤Ç¡¢ÊÌÅÓ¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

¥¤¥ó¥¹¥È¡¼¥ë¤Ë¤Ïports¤òÍøÍѤ·¤Þ¤¹¡£
ports¤¬¤Þ¤ÀŸ³«¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢¡ÖºÇ¿·¤Îports¤ò¼èÆÀ¤·¤ÆŸ³«¤¹¤ë¡×¤ò»²¾È¤·¤ÆºÇ¿·¤Îports¤òÆþ¼ê¤·¡¢Å¸³«¤·¤Æ¤¯¤À¤µ¤¤¡£

ports¤ÎŸ³«¤¬´°Î»¤·¤¿¸å¡¢²¼µ­¼ê½ç¤Çp5-DBD-Pg¤òmake¤·¡¢¥¤¥ó¥¹¥È¡¼¥ë¤·¤Þ¤¹¡£

¡Öp5-DBD-Pg¡×¤Î¥¤¥ó¥¹¥È¡¼¥ë
$ cd /usr/ports/databases/p5-DBD-Pg
$ make config-recursive
$ make install clean

¥¤¥ó¥¹¥È¡¼¥ë´°Î»¸å¤ÎÀßÄêÅù¤ÏÆäˤ¢¤ê¤Þ¤»¤ó¡£

perl¥¹¥¯¥ê¥×¥È¤«¤é¤ÎÍøÍÑÊýË¡

¾åµ­¤Î¥¤¥ó¥¹¥È¡¼¥ë¤¬´°Î»¸å¡¢perl¤«¤éDBI¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÍøÍѤ·¤ÆPostgreSQL¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£

´ðËÜŪ¤Ê¼ê½ç¤Ï¡¢

(1) DBI->connect() ¤ÇDB¤ò³«¤¯
(2) ¾åµ­­¡¤Ç¼èÆÀ¤·¤¿DB¥Ï¥ó¥É¥é¤ËÂФ·¡¢prepare() / execute() ¤òȯ¹Ô¤·SQLʸ¤ò¼Â¹Ô
(3) ¾åµ­­¢¤Ç¼èÆÀ¤·¤¿¥¹¥Æ¡¼¥È¥á¥ó¥È¥Ï¥ó¥É¥é¤ËÂФ·¡¢fetch() ¤òȯ¹Ô¤·SQLʸ¤Î·ë²Ì¤ò¼èÆÀ
(4) ¾åµ­­¢¤Ç¼èÆÀ¤·¤¿¥¹¥Æ¡¼¥È¥á¥ó¥È¥Ï¥ó¥É¥é¤ËÂФ·¡¢finish() ¤òȯ¹Ô¤·¼Â¹Ô·ë²Ì¤ò¥¯¥ê¥¢
(5) ¾åµ­­¡¤Ç¼èÆÀ¤·¤¿DB¥Ï¥ó¥É¥é¤ËÂФ·¡¢close() ¤òȯ¹Ô¤·¡¢DB¤òÊĤ¸¤ë

¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¥µ¥ó¥×¥ë¥³¡¼¥É

°Ê²¼¤ËDB¤«¤é¥Ç¡¼¥¿¤òÆɤó¤Ç¤¯¤ë´Êñ¤Êperl¥¹¥¯¥ê¥×¥È¤È¡¢¥Æ¥¹¥ÈÍѤÎDB¤Î¹½ÃÛ¤ò¤¹¤ë¤¿¤á¤ÎSQL¥Õ¥¡¥¤¥ë¤òÍÑ°Õ¤·¤¿¤Î¤Ç¡¢Æ°ºî³Îǧ¤Ë¤´ÍøÍѤ¯¤À¤µ¤¤¡£

¥Æ¥¹¥ÈDB¤Î¹½ÃÛÍÑSQL¥Õ¥¡¥¤¥ë

¤Þ¤º¡¢¥Æ¥¹¥ÈDB¤ò¹½ÃÛ¤¹¤ë¤¿¤á¤ÎSQL¥Õ¥¡¥¤¥ë¤òÍÑ°Õ¤·¤Þ¤¹¡£
°Ê²¼¤ÎÆâÍƤò¡Ötest.sql¡×¤È¤·¤ÆÊݸ¤·¤Æ¤¯¤À¤µ¤¤¡£

¥Æ¥¹¥ÈDB¤Î¹½ÃÛÍÑSQL¥Õ¥¡¥¤¥ë¡Êtest.sql¡Ë
SET client_encoding = 'UTF8';
SET check_function_bodies = false;
SET client_min_messages = warning;

SET search_path = public, pg_catalog;
SET default_tablespace = '';
SET default_with_oids = false;

CREATE TABLE person (
    name character varying(256),
    age integer
);

ALTER TABLE public.person OWNER TO pgsql;

COPY person (name, age) FROM stdin;
Oblien	32
Oliver	45
Nielsen	18
\.

REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM pgsql;
GRANT ALL ON SCHEMA public TO pgsql;
GRANT ALL ON SCHEMA public TO PUBLIC;

¥Æ¥¹¥ÈDB¤ÎºîÀ®¤ÈSQLʸ¤Îή¤·¹þ¤ß

¼¡¤Ë¡¢¥Æ¥¹¥ÈDB¤òºîÀ®¤·¡¢¤½¤ÎÃæ¤ËÀè¤Û¤É¤ÎSQL¥Õ¥¡¥¤¥ë¤ÎÆâÍƤòή¤·¹þ¤ß¤Þ¤¹¡£

¥Æ¥¹¥ÈDB¤ÎºîÀ®¤ÈSQLʸ¤Îή¤·¹þ¤ß
$ su pgsql

$ createdb postgresql_test
$ psql -f test.sql postgresql_test

¤³¤ì¤ÇDB¦¤ÎÀßÄ꤬´°Î»¤·¤Þ¤·¤¿¡£

¥Æ¥¹¥ÈÍÑperl¥³¡¼¥É

ºÇ¸å¤Ë¡¢²¼µ­¤Î¤è¤¦¤Êperl¥¹¥¯¥ê¥×¥È¤òÍÑ°Õ¤·¤Æ¼Â¹Ô¤·¤Æ¤ß¤Þ¤¹¡£

¥Æ¥¹¥ÈÍÑperl¥³¡¼¥É
#!/usr/local/bin/perl

use DBI;

$aHost      = 'localhost';
$aDBName    = 'postgresql_test';
$aTableName = 'person';
$aUser      = 'pgsql';
$aPassword  = '';

$tDBHandler=DBI->connect("DBI:Pg:host=$aHost;dbname=$aDBName",$aUser,$aPassword);

$tStatementHandler=$tDBHandler->prepare("SELECT name,age from $aTableName");

$tResult=$tStatementHandler->execute();

while(@RESULT=$tStatementHandler->fetchrow())
{
    print $RESULT[0].','.$RESULT[1]."\n";
}

$tStatementHandler->finish();

$tDBHandler->disconnect();

¼Â¹Ô·ë²Ì
Oblien,32
Oliver,45
Nielsen,18

¾åµ­¤Î¤è¤¦¤Êɽ¼¨¤¬½Ð¤¿¤é¡¢¥Æ¥¹¥È¤ÏÀ®¸ù¤Ç¤¹¡£


¤¢¤Ê¤¿¤Îõ¤·Êª¤Ï¸«¤Ä¤«¤ê¤Þ¤·¤¿¤«¡©
¤Þ¤µ¤Ë¤³¤ì¤À
»²¹Í¤Ë¤Ê¤Ã¤¿
¤Á¤ç¤Ã¤È°ã¤¦
¤³¤ì¤¸¤ã¤Ê¤¤

²¿¤«¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ì¤Ð¤ª´ê¤¤¤·¤Þ¤¹

¤³¤Î¥á¥Ã¥»¡¼¥¸¤òÈó¸ø³«¤Ë¤¹¤ë

¤´Ãí°Õ

¡¦Äº¤¤¤¿¥á¥Ã¥»¡¼¥¸¤Ï´ÉÍý¼Ô¤Î¥Á¥§¥Ã¥¯¤Î¸å¡¢¸ø³«¤µ¤ì¤Þ¤¹¡£
¡¦¥á¥Ã¥»¡¼¥¸¤Î¸ø³«¤ò´õ˾¤µ¤ì¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢¡Ö¤³¤Î¥á¥Ã¥»¡¼¥¸¤òÈó¸ø³«¤Ë¤¹¤ë¡×¤Ë¥Á¥§¥Ã¥¯¤òÆþ¤ì¤Æ¤¯¤À¤µ¤¤¡£
¡¦´ÉÍý¼Ô¤¬ÉÔŬÀÚ¤ÈȽÃǤ·¤¿¥á¥Ã¥»¡¼¥¸¤Ï¸ø³«¤·¤Þ¤»¤ó¤Î¤Ç¡¢Í½¤á¤´Î»¾µ¤¯¤À¤µ¤¤¡£


¤Þ¤µ¤Ë¤³¤ì¤À
1 (50%)
»²¹Í¤Ë¤Ê¤Ã¤¿
1 (50%)

ɽ¼¨¤Ç¤­¤ë¥á¥Ã¥»¡¼¥¸¤Ï¤¢¤ê¤Þ¤»¤ó¡£