『리눅스 학당-번역물 (go LINUX)』 249번 제 목:[번역]perl DBD::Pg man 올린이:apoca (박정범 ) 99/04/20 00:32 읽음:343 관련자료 없음 ----------------------------------------------------------------------------- Pg(3) User Contributed Perl Documentation Pg(3) Translated by apoca@apoca.sarang.net 이글은 제가 공부하는데 참조하기 위해서 번역한 것입니다. 따라서 번역시 많은 오류가 있을 수 있고 철자법도 안 맞는 경우가 많습니다. 그리고 철자나 맞춤법 오류가 발견되었어도 내용상의 오류가 없고 유추가 가능한 경우 굳이 고치지 않았습니다. 펄로 DB관련 프로그래밍 하시려는 분들에게 조금이라도 도움이 되었으면 하는 마음에서 올립니다. 누구든 수정해도 됩니다. 그럼 행복하시길... ^_^ NAME ==== DBD::Pg - DBI 모듈을 위한 PostgreSQL 데이타베이스 드라이버 SYNOPSIS ======== use DBI; $dbh = DBI->connect("dbi:Pg:dbname=$dbname"); # 상세한 것은 DBI모듈을 참조하라 DESCRIPTION =========== DBD::Pg는 PostgreSQL 데이타베이스에 접근을 제공하는 DBI모듈과 동작하는 Perl 모듈이다. MODULE DOCUMENTATION ==================== 이 문서는 드라이버에 특정한 동작방식과 제약을 서술한다. 사용자에 대한 유일한 참조는 아니다. 어쨌든 DBI문서를 먼저 읽어보라. ##################### ## THE DBI CLASS ## ##################### DBI Class Methods ----------------- -- connect 최소의 인자로 database에 연결한다. 다음 문법을 사용한다.: $dbh = DBI->connect("dbi:Pg:dbname=$dbname"); 이것은 localhost에 있는 $dbname의 데이타베이스에 사용자 인증없이 연결한다. 이것은 PostgreSQL의 기본값으로는 충분하다. 다음 connect문은 모든 가능한 인자를 제시한다. $dbh = DBI->connect("dbi:Pg:dbname=$dbname;host=$host;port=$port; option=$options;tty=$tty", "$username", "$password"); 만일 파라미터가 정의되지 않았다면 PostgreSQL은 먼저 특정 환경변수를 찾아보고 다음에 프로그램에 내정된 값을 사용한다. parameter environment variable hard coded default -------------------------------------------------- dbname PGDATABASE current userid host PGHOST localhost port PGPORT 5432 options PGOPTIONS "" tty PGTTY "" username PGUSER current userid password PGPASSWORD "" 만일 호스트가 명시되어 있다면 이 호스트상의 postmaster는 -i 옵션(TCP/IP sockets)으로 시작될 필요가 있다. options 파라미터들은 Postgres backend를 위한 실행옵션이다. 일반적인 사용은 -B옵션으로 버퍼의 수를 늘리는 것이다. 더 상세한 것은 postgres 맨페이지를 참조하라. username과 password로 사용자를 인증하기 위해서는 적절한 내용을 pg_hba.conf 에 써 넣어야 한다. 다른 타잎의 인증을 위해서는 pg_hba.conf 맨페이지와 pg_passwd 맨페이지를 참조하라. 이 두 파라미터에 대해서 DBI는 empty와 undefine을 구분한다는 점에 유의하라. 만약 이러한 파라미터들이 undefine 되었다면 DBI는 환경변수 DBI_USER와 DBI_PASS가 있을 경우 그것으로 대체한다. -- available_drivers @driver_names = DBI->available_drivers; DBI에 의해 구현된 것으로 드라이버에 특정한 영향은 없다. -- data_sources @data_sources = DBI->data_sources('Pg'); 드라이버는 이 메소드를 지원한다. 데이타베이스 template1에의 필요한 데이타베이스 연결이 어떠한 사용자 인증을 거치지 않고 지역호스트상에서 수행될 것이라는 점에 유의하라. 다른 선택들은 환경변수 PGHOST, DBI_USER 그리고 DBI_PASS로만 설정될 수 있다. -- trace DBI->trace($trace_level, $trace_file) DBI가 구현한것으로 드라이버에 특정한 영향은 없다. DBI Dynamic Attributes Common Methods를 참조하라. ##################################### ## METHODS COMMON TO ALL HANDLES ## ##################################### -- err $rv = $h->err; DBI가 제안한대로 드라이버에 의해서 지원된다. connect메소등에 대해 PQstatus 를 반환한다. 모든 다른 경우에 그것은 현재 핸들의 PQresultStatus를 반환한다. -- errstr $str = $h->errstr; DBI가 제안한대로 드라이버에 의해 지원된다. 그것은 현재 핸들과 관련된 PQerrorMessage를 반환한다. -- state $str = $h->state; 이 드라이버는 아직은 state 메소드를 지원하지 않는다. -- trace $h->trace($trace_level, $trace_filename); DBI에 의해 구현된 것으로 드라이버에 특정한 영향은 없다. -- trace_msg $h->trace_msg($message_text); DBI에 의해 구현된 것으로 드라이버에 특정한 영향은 없다. ######################################## ## ATTRIBUTES COMMON TO ALL HANDLES ## ######################################## -- Warn (boolean, inherited) DBI에 의해 구현된 것으로 드라이버에 특정한 영향은 없다. -- Active (boolean, read-only) DBI가 제안한대로 드라이버가 지원한다. 데이타베이스가 연결되어 있는 동안에는 데이타베이스 핸들은 활성상태이고 statement핸들이 종료되기 전까지는 그것은 활성상태이다. -- Kids ( integer, read-only) DBI에 의해 구현된 것으로 드라이버에 특정한 어떤 영향은 없다. -- ActiveKids (integer, read-only) DBI에 의해 구현된 것으로 드라이버에 특정한 어떤 영향은 없다. -- CachedKids (hash ref) DBI에 의해 구현된 것으로 드라이버에 특정한 어떤 영향은 없다. -- CompatMode (boolean, inherited) 이 드라이버는 위 속성을 사용하지 않는다. -- InactiveDestroy (boolean) DBI에 의해 구현된 것으로 드라이버에 특정한 어떤 영향은 없다. -- PrintError (boolean, inherited) DBI에 의해 구현된 것으로 드라이버에 특정한 어떤 영향은 없다. -- RaiseError (boolean, inherited) DBI가 구현한 것으로 드라이버에 특정한 영향은 없다. -- ChopBlanks (boolean, inherited) DBI가 제안한대로 드라이버에 의해 지원되는 것으로 이 메소드는 SQL 기능 RTRIM 과 유사하다.(역주: right trim, LTRIM은 left trim을 말한다.) -- LongReadLen (integer, inherited) DBI에 의해 구현된 것으로 이드라이버는 이속성을 사용하지 않는다. -- LongTruncOk (boolean, inherited) DBI에 의해 구현된 것으로 이 드라이버는 이 속성을 사용하지 않는다. -- private_* DBI가 구현한 것으로 어떤 드라이버에 특정한 영향은 없다. ################################### ## DBI DATABASE HANDLE OBJECTS ## ################################### Database Handle Methods ----------------------- -- selectrow_array @row_ary = $dbh->selectrow_array($statement, \%attr, @bind_values); DBI가 구현한 것으로 어떤 드라이버에 특정한 영향은 없다. -- selectall_arrayref $ary_ref = $dbh->selectall_arrayref($statement, \%attr, @bind_values); DBI가 구현한 것으로 어떤 드라이버에 특정한 영향은 없다. -- prepare $sth = $dbh->prepare($staement, \%attr); PostgreSQL은 statement를 prepare한다는 개념을 가지고 있지 않다. 따라서 prepare 메소드는 단지 place-holder를 검사한 후에 statement를 저장할 뿐이다. statement를 prepare한후에 저장된 statement에 대한 아무런 정보도 이용할 수 없다. -- prepare_cached $sth = $dbh->prepare_cached($statement, \%attr); DBI에 의해 구현뒨 것으로 어떤 드라이버에 특정한 영향은 없다. 이 메소드는 이 드라이버에는 사용가능하지 않다. 왜냐하면 statement를 prepare하는 것이 데이타베이스에 전혀 영향을 미치지 않기 때문이다. -- do $rv = $dbh->do($statement, \%attr, @bind_values); DBI가 구현한 것으로 어떤 드라이버에 특정한 영향은 없다. execute메소드에 대한 note를 참조하라. -- commit $rc = $dbh->commit; DBI가 제안한대로 이 드라이버가 지원한다. Transactions에 대한 note를 참조하라. -- rollback $rc = $dbh->rollback; DBI가 제안한대로 이 드라이버에 의해 지원된다. transactions에 대한 note를 참조하라. -- disconnect $rc = $dbh->disconnect; DBI가 제안한대로 이 드라이버가 지원한다. -- ping $rc = $dbh->ping; 이 드라이버는 ping메소드를 지원한다. 이것은 데이타베이스 핸들의 유효성을 검사하는데 사용될 수 있다. ping메소드는 empty 쿼리를 발생시키고 결과 상태를 검사한다. -- table_info $sth = $dbh->table_info; DBI가 제안한대로 드라이버에 의해 지원된다. 이 메소드는 현재 사용자에 의해 소유된 모든 테이블과 view를 반환한다. 이 메소드는 인덱스나 연속적인 결과를 고르지 않는다. 또한 system 테이블들은 select되지 않는다. ( 시스템 테이블의 정보는 반환되지 않고 또 일련의 결과나 인덱스에 해당하는 테이블의 정보만을 따로 볼수는 없다는 뜻이 아닌가 생각) TABLE_QUALIFIER 로서 reltype 속성이 반환되고 REMARKS는 undefine된다. -- tables @names = $dbh->tables; DBI에 의해 제안된대로 드라이버에 의해 지원된다. 이 메소드는 현재 사용자에 의해 소유된 모든 view와 테이블을 반환한다. 이 메소드는 인덱스나 연속적인 결과를 select하지 않는다. 또한 system table은 select되지 않는다. -- attributes $sth = $dbh->DBD::Pg::db::attributes($table); 이 메소드는 PostgreSQL에만 존재하는 메소드로 주어진 table에 대해 다음 데이타를 반환한다.: unique number attribute name attribute type attribute length ( 가변길이속성들에 대해서는 -1) 이 메소드가 DBI에 의해 지원되지 않기 때문에 그 패키지를 포함하는 완전한 이름으로 사용해야 한다. -- type_info_all $type_info_all = $dbh->type_info_all; DBI에 의해 제안된 대로 드라이버에 의해 지원된다. SQL 데이타타잎과 자주 사용되는 데이타타잎에 대해서는 정보가 제공된다. PostgreSQL 타잎 이름과 SQL92 데이타타잎 사이의 매핑은(만일 가능하다면) 다음 테이블에 의해 행해진다.: +---------------+------------------------------------+ | typname | SQL92 | |---------------+------------------------------------| | bool | BOOL | | text | / | | bpchar | CHAR(n) | | varchar | VARCHAR(n) | | int2 | SMALLINT | | int4 | INT | | int8 | / | | money | / | | float4 | FLOAT(p) p<7=float4, p<16=float8 | | float8 | REAL | | abstime | / | | reltime | / | | tinterval | / | | date | / | | time | / | | datetime | / | | timespan | TINTERVAL | | timestamp | TIMESTAMP | +---------------+------------------------------------+ PostgreSQL 특정 데이타타잎에 관련된 더 상세한 것은 pgbuiltin 맨페이지를 읽어보라. -- type_info @type_info = $dbh->type_info($data_type); DBI에 의해 구현된 것으로 드라이버에 특정한 영향은 없다. -- quote $sql = $dbh->quote($value, $date_type); 이 모듈은 자체의 quote 메소드를 구현한 것이다. DBI 메소드외에 또한 backslash를 두개로 한다. 그 이유는 PostgreSQL은 backslash를 escape 문자로 다루기 때문이다. 선택적인 data_type 인자는 사용되지 않는다. Database Handle Attributes -------------------------- -- AutoCommit (boolean) DBI가 제안한대로 드라이버가 지원한다. DBI의 분류에 따르면 PostgreSQL은 transaction이 명시적으로 시작되어야 하는 데이타베이스이다. transaction을 시작하지 않았으면 데이타베이스에 행해진 모든 변화는 즉각적으로 반영된다. 즉 PostgreSQL의 디폴트로 정해진 행동은 AutoCommit가 on 상태인 것이다. AutoCommit가 off로 되어 있다면 transaction이 시작되어야 하고 모든 commit나 rollback은 자동으로 새로은 transaction을 시작하게 할 것이다. 상세한 것은 transaction에 대한 note를 참조하라. -- Name (string, read-only) DBI의 디폴트 메소드보다 드라이버에 특정한 메소드가 우선순위를 가지며, 위의 메소드는 단지 데이타베이스 이름만을 반환할 뿐이다. 연결문자열의 이외의 것은 모두 잘려나간다. DBI 스펙과 달리 이 메소드는 read-only인점에 유의하라. -- pg_auto_escape (boolean) PosthgreSQL 특정한 속성. 만일 true라면 모든 인자내의 quote나 backslash는 다음처럼 escape될 것이다. : escape quote with a quote (SQL) octal표현에 사용된 backslash(/)를 제외하고는 backslash는 escape문자취급 디폴트값은 on이다. PostgreSQL은 또한 quote를 받아들이고 이것을 backslash 에 의해 escape처리한다. 어떠한 다른 ASCII문자라도 문자열 상수에서 직접 사용될 수 있다. #################################### ## DBI STATEMENT HANDLE OBJECTS ## #################################### Statement Handle Methods ------------------------ -- bind_param $rv = $sth->bind_param($param_num, $bind_value, \%attr); DBI가 제안한대로 드라이버에 의해 지원된다. -- bind_param_inout 이 드라이버에서는 지원되지 않는다. -- execute $rv = $sth->execute(@bind_values); DBI에 의해 제안된대로 이 드라이버에 의해 지원된다. 항상 영향받은 row의 갯수를 반환하는 'UPDATE', 'DELETE', 'INSERT' 문들에 덧붙여서 execute 메소드는 'SELECT ... INTO table'문에 사용될 수 도 있다. -- fetchrow_arrayref $ary_ref = $sth->fetchrow_arrayref; DBI에 의해 제안된대로 드라이버에 의해 지원된다. -- fetchrow_array @ary = $sth->fetchrow_array; DBI에 의해 제안된대로 드라이버에 의해 지원된다. -- fetchrow_hashref $hash_ref = $sth->fetchrow_hashref; DBI가 제안한대로 드라이버가 지원한다. -- fetchall_arrryref $tbl_ary_ref = $sth->fetchall_arrayref; DBI에 의해 구현되었으면 어떠한 드라이버에 특정한 영향은 없다. -- finish $rc = $sth->finish; DBI가 제안한대로 드라이버가 지원한다. -- rows $rv = $sth->rows; DBI가 제안한대로 드라이버가 지원한다. 많은 다른 드라이버와 대조적으로 statement를 수행한후에 즉각적으로 rows의 갯수를 이용할 수있다. -- bind_col $rc = $sth->bind_col($column_number, \$var_to_bind, \%attr); DBI가 제안한대로 드라이버가 지원한다. -- bind_columns $rc = $sth->bind_columns(\%attr, @list_of_refs_to_vars_to_bind); DBI가 제안한대로 드라이버가 지원한다. -- dump_results $rows = $sth->dump_results($maxlen, $lsep, $fsep, $fh); DBI에 의해 구현되었고 드라이버에 특정한 영향은 없다. -- blob_read $blob = $sth->blob_read($id, $offset, $len); DBI가 제안한대로 드라이버에 의해서 지원된다. DBI에 의해 구현되었지만 문서화되지 않아서 이 메소드는 변할 수도 있다. 이 메소드는 Oracle의 blobs의 현재의 구현에 의해 크게 영향을 받는 것 같다. 그럼에도 불구하고 가능한한 호환성을 유지하려 노력했다. Oracle은 blob이 테이블에 관련있고 모든 테이블은 하나의 blob (data-type LONG)만을 가질수 있다는 제약을 가지고 있지만 PostgreSQL은 소위 객체 인식자라는 것을 사용해서 blob을 어떠한 테이블에도 독립적으로 그 blob을 다출수 있다. 이것은 왜 blob_read 메소드가 STATEMENT 패키지 속으로 blessed되고 DTATABASE 페키지로 블레스되지 않는가에 대한 이유이다. 여기서 필드 파라미터는 이 객체인식자를 다루는데 사용되어왔다. offset와 len파라미터들은 0으로 세팅될수 있는데 이 경우에 드라이버는 전체 blob을 한번에 fetch한다. blob_copy_to_file 메소드를 참조하라. 이것역시 DBI에 의해 지원되지만 문서화 되지 않았다. blob에 대한 자세한 정보나 예를 보려면, 특히 두 내장함수 lo_import()와 lo_export()에 대해서는 large_objects 맨 페이지를 참조하라. Statement Handle Attributes --------------------------- -- NUM_OF_FIELDS (integer, read-only) DBI에 의해 구현되어졌고 드라이버에 특정한 영향은 없다. -- NUM_OF_PARAMS (integer, read-only) DBI에 의해 구현되어졌고, 드라이버에 특정한 영향은 없다. -- NAME (arrary-ref, read-only) DBI에 의해 제안된대로 드라이버가 지원 -- TYPE (arrary-ref, read-only) DBI에 의해 제안된대로 드라이버가 지원, 국제적인 표준에 맞지 않는 PostgreSQL에 특정한 데이타타잎들이 있다는 제약이 있다. -- PRECISION (array-ref, read-only) 드라이버에 의해 지원되지 않는다. -- SCALE (array-ref, read-only) 드라이버에 의해 지원되지 않는다. -- NULLABLE (array-ref, read-only) 드라이버에 의해 지원되지 않는다. -- CursorName (string, read-only) 드라이버에 의해 지원되지 않는다. Cursors에 대한 note를 참조하라. -- Statement (string, read-only) DBI에 의해 제안된대로 드라이버에 의해 지원된다. -- pg_size (array-ref, read-only) PostgreSQL의 특정한 속성. 각 column에 대한 integer값 arrary의 참조를 반환한다. 그 integer는 column의 크기를 바이트로 나타낸다. 가변길이의 column은 -1로 나타낸다. -- pg_type (hash-ref, read-only) PostgreSQL에 특정한 속성. 각 column에 대한 문자열 array의 참조를 반환. 문자열은 data_type의 이름이다. -- pg_oid_status (integer, read-only) PostgreSQL에 특정한 속성으로 마지막 INSERT 명령의 OID를 반환한다. -- pg_cmd_status (integer, read-only) PostgreSQL에 특정한 속성이다. 마지막 명령의 타잎을 반환한다. 가능한 타잎은 INSERT, DELETE, UPDATE, SELECT가 있다. ########################### ## FURTHER INFORMATION ## ########################### Transactions ------------ transaction 동작은 이제 AutoCommit 속성에 의해 제어된다. AutoCommit의 완전한 정의는 DBI문서를 참조하라. DBI의 설명에 따르면 AutoCommit의 디폴트값은 on이다. 이 모드에서 데이타베이스에 대한 어떠한 변화라도 즉각적으로 타당한 변화가 된다. begin이나 commit, rollback등의 문은 거부될 것이다. 만일 AutoCommit가 off로 세팅된다면 transaction은 즉각적으로 begin문을 발생함으로서 시작될 것이다. commit나 rollback등은 새로운 transaction을 시작시킬것이다. disconnect는 rollback 문을 발생시킬것이다. Cursors ------- PostgreSQL은 cursor 개념을 가지고 있지만 현재의 구현에서는 사용되지 않았다. PostgreSQL에서 Cursor는 단지 transaction 블럭의 내부에서만 사용될 수 있다. 단지 한번에 한 transaction블록만이 허용된다는 것으로 부터 내포형의 SELECT문을 사용해선 안된다는 제약을 있음을 알 수 있다. execute 메소드는 한번에 모든 데이타를 frontend 응용프로그램에 위치하고 있는 데이타구조에 집어넣는다. 이것은 많은 양의 data를 select할때 고려되어야 한다. Data-Type bool -------------- 현재의 PostgreSQL의 구현은 true에 대해서는 't'를 false에 대해서는 'f'를 반환한다. perl 관점에서는 좋지못한 선택이다. DBD-Pg 모듈은 데이타 타잎 bool을 펄과 같은 방식으로 해석한다. 'f' -> '0' 그리고 't' -> '1'. 이 방법에서는 응용프로그램이 데이타타잎 bool에 대해 데이타베이스에 특정한 반환값인지를 검사할 필요가 없다. 왜냐하면 perl이 '0'을 false로 '1'을 true로 다루기 때문이다. PostgreSQL 버전 6.2은 입력 't'를 true로 그외의 것은 모두 false로 간주했다. PostgreSQL 버전 6.3은 입력 't', '1' 그리고 1 을 true로 그 외의 것은 모두 false로 간주했다. PostgreSQL 6.4는 입력 't','1','y'를 true로 그리고 그외의 문자는 false로 간주한다. SEE ALSO ======== the DBI manpage AUTHORS ?DBI and DBD-Oracle by Tim Bunce (Tim.Bunce@ig.co.uk) ?DBD-Pg by Edmund Mergl (E.Mergl@bawue.de) Major parts of this package have been copied from DBI and DBD-Oracle. COPYRIGHT The DBD::Pg module is free software. You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file, with the exception that it cannot be placed on a CD-ROM or similar media for commercial distribution without the prior approval of the author. ACKNOWLEDGMENTS See also DBI/ACKNOWLEDGMENTS. 15/Feb/1999 perl 5.004, patch 05