楼主: sunbeking

postgresql入门(日文的)

[复制链接]
论坛徽章:
21
ITPUB元老
日期:2005-05-10 17:20:252012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
21#
 楼主| 发表于 2005-3-23 18:08 | 只看该作者
PostgreSQL 編21 - PL/pgSQL、構文書式、制御構造、メッセージ、動的 SQL

■PL/pgSQL

  ・PL/pgSQL は、Oracle の PL/SQL と違い、ストアドファンクションとして
    のみ使用可能である。

  ・PL/SQL とは違い PL/pgSQL 内ではトランザクションコマンドは使えない。
    しかし、ADO - ODBC や JDBC でのトランザクション配下から、呼ばれた
    ストアドやトリガーは、ちゃんとロールバック可能である。
    実用システムとしては、まったく問題ないと考える。

■構文書式

  ・PL/pgSQL の作成は、次のようにする。

create function 関数名(引数, ...) returns 戻り値型 as
'
declare
  定数 constant 型 := 定数値
  変数 alias for $1; -- 引数の別名宣言
  変数 型 := 初期値
  変数 型 defalut 省略値
  変数 テーブル%rowtype;
  変数 テーブル.フィールド%type;
  変数 record;
  rename 変数名 to 新変数名;
  一般宣言;
begin
  perform 呼び出し関数(引数, ...);  -- 関数呼び出し
  一般構文;
  return 戻り値;
end;
'
language 'plpgsql'
;

  ・PL/pgSQL の削除は、次のようにする。

drop function 関数名(引数, ...);

■注釈

  -- 1 行注釈
  /* 注釈開始
  */ 注釈終了

■演算子、関数

  ・通常の SQL と同等である。

  isnull()
  is null
  not
  found

■制御構造

  ・条件判定は、次のようにする。

  if 条件 then
    真のときの構文;
  else
    偽りのときの構文;
  end if;

  if 条件1 then
    条件1 - 真のときの構文;
  elsif 条件2 then
    条件2 - 真のときの構文;
  elsif 条件3 then
    条件3 - 真のときの構文;
  else
    偽りのときの構文;
  end if;

  ・ループ制御は、次のようにする。

<<LABEL>>
  loop
    構文;
    exit;           -- 脱出
    exit when 条件  -- 脱出条件
    exit LABEL      -- ラベルへ脱出
  end loop;

  while 条件 loop
    構文;
  end loop;

  ・for ループ制御は、次のようにする。

  for カウンタ in 1..10 loop
    構文;
  end loop;

  for カウンタ in reverse 10..1 loop
    構文;
  end loop;

  for レコード/ロー in クエリ loop
    構文;
  end loop;

■メッセージ出力、エラー発生

  ・raise で、デバッグメッセージを表示することができる。
    バラメタは、% の箇所に埋め込まれ、複数指定することも可能である。

  raise debug ''key = %'', rec.key;
        |_ debug
           notice
           execption エラー発生

■動的 SQL 実行

  ・通常の構文で insert 等は書けるので、普段は使う必要ないが、Oracle と
    同じように動的な SQL を実行する場合に使用する。

  execute sql;
          |_ SQL

drop function instest1();
create function instest1() returns int as
'
declare
  q_ char(1) := chr(39);
  sql varchar(200);
begin
  sql := ''insert into testm values ('' || q_ || ''a001'' || q_ || '', 1, 2, 3)'';
  execute sql;
  return 0;
end;
'
language 'plpgsql'
;

使用道具 举报

回复
论坛徽章:
21
ITPUB元老
日期:2005-05-10 17:20:252012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
22#
 楼主| 发表于 2005-3-23 18:09 | 只看该作者
PostgreSQL 編22 - PL/pgSQL、カーソル for ループ、カーソル制御、FETCH

■select into

  ・select into は、Oracle の PL/SQL と同等である。

drop function fnctest1();
create function fnctest1() returns int as
'
declare
  ct int;
begin
  select count(*) into ct from testm;
  raise debug ''count = %'', ct;
  return ct;
end;
'
language 'plpgsql'
;

select fnctest1();

DEBUG:  count = 4
fnctest1
----------
        4

■カーソル for ループ

  ・for ループでの select には、通常のものと、execute を指定した動的な
    ものが指定できる。
    これが一番簡単にカーソルループを作れる。

drop function fnctest1();
create function fnctest1() returns int as
'
declare
  rec record;
begin
  for rec in select * from testm loop
    raise debug ''key = %  data1 = %'', rec.key, rec.data1;
  end loop;
  return 0;
end;
'
language 'plpgsql'
;

select fnctest1();

DEBUG:  key = a001      data1 = 1
DEBUG:  key = a011      data1 = 1
DEBUG:  key = b002      data1 = 10
DEBUG:  key = c003      data1 = 100

  ・for ループでの select に execute を指定した場合は、次のようになる。

drop function fnctest1();
create function fnctest1() returns int as
'
declare
  rec record;
  s varchar(20) := ''testm'';
begin
  for rec in execute ''select * from '' || s loop
    raise debug ''key = %  data1 = %'', rec.key, rec.data1;
  end loop;
  return 0;
end;
'
language 'plpgsql'
;

■カーソル制御 FETCH

  ・カーソル制御にも色々なパターンがある。動的なものは execute を指定
    して利用する。次は、refcursor を使用した例である。

drop function fnctest1();
create function fnctest1() returns int as
'
declare
  cu refcursor;
  rec record;
begin
  open cu for select * from testm;
  loop
    fetch cu into rec;
    if not found then
      exit;
    end if;
    raise debug ''key = %  data1 = %'', rec.key, rec.data1;
  end loop;
  close cu;
  return 0;
end;
'
language 'plpgsql'
;

select fnctest1();

DEBUG:  key = a001      data1 = 1
DEBUG:  key = a011      data1 = 1
DEBUG:  key = b002      data1 = 10
DEBUG:  key = c003      data1 = 100

  ・次は、cursor for を使用した例である。

drop function fnctest1();
create function fnctest1() returns int as
'
declare
  cu cursor for select * from testm;
  rec record;
begin
  open cu;
  loop
    fetch cu into rec;
    if not found then
      exit;
    end if;
    raise debug ''key = %  data1 = %'', rec.key, rec.data1;
  end loop;
  close cu;
  return 0;
end;
'
language 'plpgsql'
;

  ・次は、cursor is で、カーソルパラメタを使用した例である。

drop function fnctest1();
create function fnctest1() returns int as
'
declare
  cu cursor (sel varchar) is select * from testm where key like sel || ''%'';
  rec record;
begin
  open cu(''a'');
  loop
    fetch cu into rec;
    if not found then
      exit;
    end if;
    raise debug ''key = %  data1 = %'', rec.key, rec.data1;
  end loop;
  close cu;
  return 0;
end;
'
language 'plpgsql'
;

  ・次は、カーソルで動的 SQL を使用した例である。

drop function fnctest1();
create function fnctest1() returns int as
'
declare
  cu refcursor;
  rec record;
  s varchar(20) := ''testm'';
begin
  open cu for execute ''select * from '' || s;
  loop
    fetch cu into rec;
    if not found then
      exit;
    end if;
    raise debug ''key = %  data1 = %'', rec.key, rec.data1;
  end loop;
  close cu;
  return 0;
end;
'
language 'plpgsql'
;

使用道具 举报

回复
论坛徽章:
21
ITPUB元老
日期:2005-05-10 17:20:252012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
23#
 楼主| 发表于 2005-3-23 18:09 | 只看该作者
PostgreSQL 編23 - PL/pgSQL、テーブルレコード件数一覧表示

■テーブルレコード件数一覧表示

  ・各テーブルのレコード件数を表示するには、次のようにする。
    戻り値にはテーブル数が返る。
    尚、複数のデータベースがある場合の動作は未検証である。

-- PL/pgSQL 作成 --
drop function tblrecct();
create function tblrecct() returns int as
'
declare
  rec  record;
  cu   refcursor;
  rec2 record;
  ct   int;
  rcd  int := 0;
begin
  for rec in
  select * from pg_tables where not tablename like ''pg%''
  order by tableowner, tablename loop
    open cu for execute ''select count(*) as ct from '' || rec.tablename;
    fetch cu into rec2;
    if not found then
      ct := 0;
    else
      ct := rec2.ct;
    end if;
    close cu;
    raise debug ''tablename= %  ct= %'', rec.tablename, ct;
    rcd := rcd + 1;
  end loop;
  return rcd;
end;
'
language 'plpgsql'
;

-- PL/pgSQL 実行 --
select tblrecct();

-- PL/pgSQL 結果 --
DEBUG:  tablename= test2m  ct= 3
DEBUG:  tablename= testm  ct= 8
tblrecct
----------
        2

使用道具 举报

回复
论坛徽章:
21
ITPUB元老
日期:2005-05-10 17:20:252012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
24#
 楼主| 发表于 2005-3-23 18:10 | 只看该作者
PostgreSQL 編24 - PL/pgSQL、テーブル構造一覧表示、標準、動的SQL、LIKE

■テーブル構造一覧表示(標準例)

  ・各テーブルのテーブル構造一覧を表示するには、次のようにする。
    戻り値にはテーブル数が返る。
    尚、複数のデータベースがある場合の動作は未検証である。

-- PL/pgSQL 作成 --
drop function tbllist();
create function tbllist() returns int as
'
declare
  rec  record;
  rec2 record;
  rcd  int := 0;
begin
  for rec in
  select * from pg_tables where not tablename like ''pg%''
  order by tableowner, tablename loop
    raise debug ''tablename= %'', rec.tablename;
    for rec2 in
    select attname, atttypid, attlen from pg_attribute
    where attnum > 0 and attrelid =
    (select relfilenode from pg_class where relname = rec.tablename)
    order by attnum loop
      raise debug ''attname= %  atttypid= %  attlen= &'', rec2.attname, rec2.atttypid, rec2.attlen;
    end loop;
    rcd := rcd + 1;
  end loop;
  return rcd;
end;
'
language 'plpgsql'
;

-- PL/pgSQL 実行 --
select tbllist();

-- PL/pgSQL 結果 --
DEBUG:  tablename= test2m
DEBUG:  attname= key  atttypid= 1042  attlen= &
DEBUG:  attname= code1  atttypid= 1042  attlen= &
DEBUG:  tablename= testm
DEBUG:  attname= key  atttypid= 1042  attlen= &
DEBUG:  attname= data1  atttypid= 20  attlen= &
DEBUG:  attname= data2  atttypid= 20  attlen= &
DEBUG:  attname= data3  atttypid= 20  attlen= &
tbllist
---------
       2

■テーブル構造一覧表示(動的 SQL での例)

  ・標準例と同じことを動的 SQL を使用して実現する。
    実際には「標準」で出来ることに「動的 SQL」を使用する必要はない。

-- PL/pgSQL 作成 --
drop function tbllist();
create function tbllist() returns int as
'
declare
  rec  record;
  rec2 record;
  rcd  int := 0;
  sql  varchar;
begin
  for rec in
  select * from pg_tables where not tablename like ''pg%''
  order by tableowner, tablename loop
    raise debug ''tablename= %'', rec.tablename;
    sql := ''select attname, atttypid, attlen from pg_attribute where attnum > 0 and attrelid = (select relfilenode from pg_class where relname = '' || chr(39) || rec.tablename || chr(39) || '') order by attnum'';
    for rec2 in execute sql loop
      raise debug ''attname= %  atttypid= %  attlen= &'', rec2.attname, rec2.atttypid, rec2.attlen;
    end loop;
    rcd := rcd + 1;
  end loop;
  return rcd;
end;
'
language 'plpgsql'
;

-- PL/pgSQL 実行 --
select tbllist();

-- PL/pgSQL 結果 --
DEBUG:  tablename= test2m
DEBUG:  attname= key  atttypid= 1042  attlen= &
DEBUG:  attname= code1  atttypid= 1042  attlen= &
DEBUG:  tablename= testm
DEBUG:  attname= key  atttypid= 1042  attlen= &
DEBUG:  attname= data1  atttypid= 20  attlen= &
DEBUG:  attname= data2  atttypid= 20  attlen= &
DEBUG:  attname= data3  atttypid= 20  attlen= &
tbllist
---------
       2

■テーブル構造一覧表示(LIKE 使用例)

  ・標準例と同じことを LIKE を使用して実現する。
    実際にはテーブル構造一覧表示では厳密一致が必要なので LIKE の出番は
    ない。構文例として見てください。

-- PL/pgSQL 作成 --
drop function tbllist();
create function tbllist() returns int as
'
declare
  rec  record;
  rec2 record;
  rcd  int := 0;
begin
  for rec in
  select * from pg_tables where not tablename like ''pg%''
  order by tableowner, tablename loop
    raise debug ''tablename= %'', rec.tablename;
    for rec2 in
    select attname, atttypid, attlen from pg_attribute
    where attnum > 0 and attrelid =
    (select relfilenode from pg_class where relname like rec.tablename || ''%'')
    order by attnum loop
      raise debug ''attname= %  atttypid= %  attlen= &'', rec2.attname, rec2.atttypid, rec2.attlen;
    end loop;
    rcd := rcd + 1;
  end loop;
  return rcd;
end;
'
language 'plpgsql'
;

使用道具 举报

回复
论坛徽章:
21
ITPUB元老
日期:2005-05-10 17:20:252012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
25#
 楼主| 发表于 2005-3-23 18:10 | 只看该作者
PostgreSQL + VB ADO 編1 - ODBC ドライバ、レコード更新、レコード参照

■PostgreSQL ODBC ドライバインストール

  ・VB から PostgreSQL にアクセスするため、psqlodbc.exe 日本語版をインス
    トールする。PostgreSQL 7.01.00.06 PSQLODBC.DLL となっている。
    この日本語ドライバでは、項目名やデータに日本語を指定することができる。

■PostgreSQL ODBC システム DSN 設定

  ・ODBC システム DSN に PostgreSQL の名前で DSN を設定する。
    特に難しいところはない。

■PostgreSQL ODBC + VB ADO テーブル作成

  ・テーブル作成で、日本語項目名が指定できるかテストする。
    問題なく作成できる。

  Dim cn as Variant
  Dim sql as String

'** ODBC 接続
  set cn = CreateObject ("ADODB.Connection"
  cn.Open "dsn=PostgreSQL;uid=sak;pwd=sak"
  cn.CursorLocation = 3

'** テーブル作成
  sql = "create table testm ("
  sql = sql & "キー char(008),"
  sql = sql & "データ1 int8,"
  sql = sql & "データ2 int8,"
  sql = sql & "データ3 int8"
  sql = sql & ""
  cn.Execute sql

'** ODBC 接続解除
  cn.Close

■PostgreSQL ODBC + VB ADO レコード更新

  ・レコード追加で、日本語データが指定できるかテストする。
    問題なく追加できる。

  Dim cn as Variant

'** ODBC 接続
  set cn = CreateObject ("ADODB.Connection"
  cn.Open "dsn=PostgreSQL;uid=sak;pwd=sak"
  cn.CursorLocation = 3

'** トランザクション開始
  cn.BeginTrans

'** レコード処理
  cn.Execute "insert into testm values ('x001', 1, 2, 3)"
  cn.Execute "insert into testm values ('x002', 10, 20, 30)"
  cn.Execute "insert into testm values ('日本語', 1, 2, 3)"
  cn.Execute "insert into testm values ('かんじ', 10, 20, 30)"

'** トランザクション終了
  cn.CommitTrans

'** ODBC 接続解除
  cn.Close

■PostgreSQL ODBC + VB ADO レコード参照

  ・レコード参照で、日本語項目、日本語データが参照できるかテストする。
    問題なく参照できる。

  Dim cn as Variant
  Dim rs as Variant

'** ODBC 接続
  set cn = CreateObject ("ADODB.Connection"
  cn.Open "dsn=PostgreSQL;uid=sak;pwd=sak"
  cn.CursorLocation = 3

'** レコードセットオープン
  set rs = cn.Execute("select * from testm"

'** レコード処理
  do until rs.EOF
    print rs("キー".name & " | " & rs("キー"
    rs.MoveNext
  loop

'** レコードセットクローズ
  rs.Close

'** ODBC 接続解除
  cn.Close

■その他 ADO 操作

  ・SQL に多少の違いはあっても、ADO そのものの操作は Oracle と変わらない。
    『VB ADO + SQL 応用編』、『ASP VB Script ADO + SQL 応用編』
    を参考にして下さい。

使用道具 举报

回复
论坛徽章:
21
ITPUB元老
日期:2005-05-10 17:20:252012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
26#
 楼主| 发表于 2005-3-23 18:10 | 只看该作者
PostgreSQL + ASP ADO 編1 - ODBC ドライバ、レコード更新、レコード参照

■PostgreSQL ODBC ドライバインストール

  ・VB と共通である。

■PostgreSQL ODBC システム DSN 設定

  ・VB と共通である。

■PostgreSQL ODBC + ASP VB Script ADO テーブル作成

  ・テーブル作成で、日本語項目名が指定できるかテストする。
    問題なく作成できる。

<%@ Language=VBScript %>
<%
  Const title = "PostgreSQL ODBC + ASP VB Script ADO テーブル作成"
  Dim cn
  Dim sql

'** ODBC 接続
  set cn = Server.CreateObject ("ADODB.Connection"
  cn.Open "dsn=PostgreSQL;uid=sak;pwd=sak"
  cn.CursorLocation = 3

'** テーブル作成
  sql = "create table testm ("
  sql = sql & "キー char(008),"
  sql = sql & "データ1 int8,"
  sql = sql & "データ2 int8,"
  sql = sql & "データ3 int8"
  sql = sql & ""
  cn.Execute sql

'** ODBC 接続解除
  cn.Close
%>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE><% = title %></TITLE>
</HEAD>
<BODY>
<P><% = title %></P>
<P><% = sql %></P>
<P>処理終了</P>
</BODY>
</HTML>

■PostgreSQL ODBC + ASP VB Script ADO レコード更新

  ・レコード追加で、日本語データが指定できるかテストする。
    問題なく追加できる。

<%@ Language=VBScript %>
<%
  Const title = "PostgreSQL ODBC + ASP VB Script ADO レコード更新"
  Dim cn

'** ODBC 接続
  set cn = Server.CreateObject ("ADODB.Connection"
  cn.Open "dsn=PostgreSQL;uid=sak;pwd=sak"
  cn.CursorLocation = 3

'** トランザクション開始
  cn.BeginTrans

'** レコード処理
  cn.Execute "insert into testm values ('x001', 1, 2, 3)"
  cn.Execute "insert into testm values ('x002', 10, 20, 30)"
  cn.Execute "insert into testm values ('日本語', 1, 2, 3)"
  cn.Execute "insert into testm values ('かんじ', 10, 20, 30)"

'** トランザクション終了
  cn.CommitTrans

'** ODBC 接続解除
  cn.Close
%>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE><% = title %></TITLE>
</HEAD>
<BODY>
<P><% = title %></P>
<P>処理終了</P>
</BODY>
</HTML>

■PostgreSQL ODBC + ASP VB Script ADO レコード参照

  ・レコード参照で、日本語項目、日本語データが参照できるかテストする。
    問題なく参照できる。

<%@ Language=VBScript %>
<%
  Const title = "PostgreSQL ODBC + ASP VB Script ADO レコード参照"
  Dim cn
  Dim rs
%>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE><% = title %></TITLE>
</HEAD>
<BODY>
<P><% = title %></P>
<%
'** ODBC 接続
  set cn = Server.CreateObject ("ADODB.Connection"
  cn.Open "dsn=PostgreSQL;uid=sak;pwd=sak"
  cn.CursorLocation = 3

'** レコードセットオープン
  set rs = cn.Execute("select * from testm"

'** レコード処理
  response.write(rs("キー".name & "<BR>"
  response.write("-------------<BR>"
  do until rs.EOF
    response.write(rs("キー" & "<BR>"
    rs.MoveNext
  loop
  response.write("-------------<BR>")

'** レコードセットクローズ
  rs.Close

'** ODBC 接続解除
  cn.Close
%>
<P>処理終了</P>
</BODY>
</HTML>

■その他 ADO 操作

  ・SQL に多少の違いはあっても、ADO そのものの操作は Oracle と変わらない。
    『VB ADO + SQL 応用編』、『ASP VB Script ADO + SQL 応用編』
    を参考にして下さい。

使用道具 举报

回复
论坛徽章:
21
ITPUB元老
日期:2005-05-10 17:20:252012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
27#
 楼主| 发表于 2005-3-23 18:11 | 只看该作者
PostgreSQL + Web 編1 - Apache、CGI Perl、PHP、MySQL インストール、設定

■PostgreSQL + Web 環境

  ・PostgreSQL を ASP 以外の Web 環境でアクセスするためには、根気の作業
    が必要かもしれない。(^^;
    ウェブサーバ Apache、CGI Perl 等を従来環境とは別に PostgreSQL 専用に
    準備設定する。

■.bashrc に PATH 追加

  ・mysql/bin、perl/bin、apache の PATH を追加する。
    Perl のパスは、別の Perl がシステムパスの先頭にあるので、MySQL と
    共に最初に追加する。
    尚、修正後に「source /.bashrc」と実行するか、Cygwin B20 を再起動する
    必要がある。

export HOME=/
export PATH=/usr/local/mysql/bin:/usr/local/perl/bin:$PATH:/usr/local/pgsql/bin:/usr/local/bin:/usr/local/apache
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=/usr/local/pgsql/lib
export PGDATA=/usr/local/pgsql/data
export LD_LIBRARY_PATH=/usr/local/pgsql/lib:/usr/local/lib
cd
ls -aF

■Apache 1.3.20 インストール

  ・いくつかのパッケージをダウンロードしたが、Cygwin でコンパイルが通ら
    ない。(^^; 結局、従来から使ってる win32 ネィティブ版を Cygwin 用に
    c:/cygnus/usr/local/apache/ としてコピーする。

  ・apache/conf/httpd.conf を環境に合わせてリプレースする。
    「c:/phpdev」 → 「c:/cygnus/usr/local」

  ・Apache の起動は、次のようにする。

apache -k start &

  ・Apache の終了は、次のようにする。

apache -k shutdown

■Perl 5.6.1 インストール

  ・これも、従来から使ってる win32 ネィティブ版を Cygwin 用に
    c:/cygnus/usr/local/perl/ としてコピーする。

  ・Perl へのパス から /cygnus がどうしても取れない。(^^;
    いろいろ設定してみたがうまくいかず、どうせ特別ならと、Perl へのパス
    を次のようにした。(CGI の開始記述)

#!/cygnus/usr/local/perl/bin/perl

■PHP 4.0.6 インストール

  ・これも、従来から使ってる win32 ネィティブ版を Cygwin 用に
    c:/cygnus/usr/local/php/ としてコピーする。

■MySQL 1.3.20 インストール

  ・これも、従来から使ってる win32 ネィティブ版を Cygwin 用に
    c:/cygnus/usr/local/mysql/、c:/cygnus/usr/local/mysqlfront/ として
    コピーする。

  ・MySQL の起動は、次のようにする。

mysqld-nt --standalone &

  ・MySQL の終了は、次のようにする。
    またまた、「mysqld-nt --shutdown」がきかない。(^^;

ps

    PID TTY     STIME COMMAND
   1031  -1  09:19:06 /CYGWIN~1/H-I586~1/bin/bash.exe
   1037  -1  09:19:57 /usr/local/apache/apache.exe
   1097  -1  09:38:43 /usr/local/mysql/bin/mysqld-nt.exe
   1100  -1  09:39:17 /CYGWIN~1/H-I586~1/bin/ps.exe

kill 1097

■www ウェブホーム作成

  ・これも、従来から使ってる www を Cygwin 用に
    c:/cygnus/usr/local/www/ としてコピーする。

  www/
    cgi-bin/
    phpdev4/
    phpMyAdmin/
    index.html

-- index.html --
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE>SAK Design</TITLE>
<STYLE type=text/css>
<!--
  A:hover {BACKGROUND-COLOR: ; COLOR: #229022; TEXT-DECORATION: underline}
-->
</STYLE>
</HEAD>
<BODY bgcolor="#ddcab0" link="#6040aa" vlink="#903090" alink="#229022" text="#404040">
<CENTER><B><FONT face="Trebuchet MS" size="+1">-- SAK Design --</FONT></B></CENTER>
<HR>
<DIV>
<UL>
  <LI><FONT size="-1"><A href="phpMyAdmin/index.php" target="_self">MySQL Tool</A></FONT>
  <LI><FONT size="-1"><A href="cgi-bin/test.cgi" target="_self">CGI Perl - test.cgi</A></FONT>
  <LI><FONT size="-1"><A href="test.php" target="_self">PHP - test.php</A></FONT>
</UL>
</DIV>
<HR>
</BODY>
</HTML>

使用道具 举报

回复
论坛徽章:
21
ITPUB元老
日期:2005-05-10 17:20:252012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
28#
 楼主| 发表于 2005-3-23 18:11 | 只看该作者
PostgreSQL + PHP 編1 - 接続 pg_connect、レコード参照 pg_fetch_array

■PostgreSQL + PHP アクセス

  ・PHP の場合、PostgreSQL で日本語を処理するとき、日本語 EUC で記述しな
    いとエラーになる。
    また、日本語を含むデータを表示する場合は、Content-Type も EUC-JP と
    する必要がある。

  ・Windows 版 PHP は、標準で PostgreSQL、MySQL にアクセスできる。
    UNIX 系は、コンフィグレーションで指定する必要がる。

  ・次のコードは、PHP4 である。

<?php
/*
========================================================================
  PostgreSQL Connect Test
========================================================================
*/
?>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<TITLE>PostgreSQL Connect Test</TITLE>
</HEAD>
<BODY>
<P align="center">-- PostgreSQL Connect Test --</P>
<HR>
<DIV>
<?php
// PostgreSQL Connect
  if (!($cn = pg_connect("host=sak-design port=5432 dbname=sak user=sak password=sak")) {
    die;
  }

// PostgreSQL Select
  $sql = "select * from testm";
  if (!($rs = pg_exec($sql))) {
    die;
  }

// PostgreSQL Get Records
  $ct = pg_numrows($rs);
  for ($i = 0; $i < $ct; $i++) {
    $item = pg_fetch_array($rs, $i);
    print "${item[0]} ";
    print "${item[1]} ";
    print "${item['・ヌ。シ・ソ2']} ";
    print "${item['・ヌ。シ・ソ3']}<BR>";
  }

// PostgreSQL Disconnect
  pg_close($cn);

// End
  print "<P>Normality end.</P>";
?>
</DIV>
<HR>
</BODY>
</HTML>

■その他 PHP + PostgreSQL 操作

  ・『PHP + MySQL 編』とタイトルはなっていますが、
    こちらにも PHP + PostgreSQL の資料があります。

使用道具 举报

回复
论坛徽章:
21
ITPUB元老
日期:2005-05-10 17:20:252012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
29#
 楼主| 发表于 2005-3-23 18:12 | 只看该作者
PostgreSQL + Web 編2 - JAVA Servlet、JSP、J2SDK、Tomcat、JDBC 環境

■PostgreSQL + JDBC、JAVA Servlet、JSP 環境

  ・PostgreSQL を JAVA サーブレット、JSP でアクセスするための環境を準備
    する。これまた win32 版がなかなかわからず、Tomcat で試してみる。
    Apache と Tomcat の連携については、次の資料を参考にして下さい。
    PostgreSQL + Web 編3 - Apache、Tomcat 連携、mod_jk.dll、mod_jk.conf

■JAVA2 SDK 1.3.1 インストール

  ・PostgreSQL 7.0.2 なら、J2SDK として、j2sdk-1_3_1-win.exe を
    c:/cygnus/j2sdk/ としてインストールする。

■JAVA2 SDK 1.4.0 インストール

  ・PostgreSQL 7.2.3 なら、J2SDK として、j2sdk-1_4_0-win.exe を
    c:/cygnus/j2sdk/ としてインストールする。

■Tomcat 3.3.1 インストール

  ・Tomcat は、JAVA Servlet 2.2、JAVA Server Page 1.1 に簡易ウェブサーバ
    がセットになっている。
    jakarta-tomcat-3.3.1.zip を解凍して、jakarta-tomcat-3.3.1 フォルダを
    c:/cygnus/jakarta-tomcat-3.3.1/ として配置する。

■.bashrc に Tomcat 設定追加

  ・Tomcat 環境変数 TOMCAT_HOME、JAVA_HOME を .bashrc に追加する。
    尚、修正後に「source /.bashrc」と実行するか、Cygwin B20 を再起動する
    必要がある。

export HOME=/
export PATH=/j2sdk/bin:/usr/local/mysql/bin:/usr/local/perl/bin:$PATH:/usr/local/pgsql/bin:/usr/local/bin:/usr/local/apache
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=/usr/local/pgsql/lib
export PGDATA=/usr/local/pgsql/data
export LD_LIBRARY_PATH=/usr/local/pgsql/lib:/usr/local/lib
export TOMCAT_HOME=c:/cygnus/jakarta-tomcat-3.3.1
export JAVA_HOME=/j2sdk
export CLASSPATH=c:/cygnus/jakarta-tomcat-3.3.1/lib/common/servlet.jar
cd
ls -aF

■mount 設定

  ・JAVA ソース用に g:/tmp/ を「mount -f g:/tmp /src」としてマウントする。

mount -f g:/tmp /src

Device           Directory           Type        Flags
c:\cygnus\cygwin-b20\share /sw/cygwin-b20/share    native      text!=binary
g:\tmp           /src                native      text!=binary
c:\cygnus        /                   native      text!=binary

■Tomcat 起動、終了

  ・Tomcat の起動は、次のようにする。

cd /jakarta-tomcat-3.3.1/bin
startup.sh

  ・Tomcat の終了は、次のようにする。

cd /jakarta-tomcat-3.3.1/bin
shutdown.sh

■Tomcat ウェブサーバアクセス

  ・Tomcat ウェブサーバ root へは、次のようにアクセスする。

http://sak-design:8080/

  ・Apache ウェブサーバ www へは、次のようにアクセスする。
    Apache サービスを起動しておけば、両方の環境が同時に使用できた。

http://sak-design/

  ・尚、Apache に統合できないかと挑戦したが、エラーに悩まされて今回は
    見送った。

■PostgreSQL JDBC ドライバコンパイル

  ・JAVA Servlet、JSP で PostgreSQL にアクセスするための JDBC ドライバ
    postgresql.jar をコンパイル作成する。

export CLASSPATH=./
cd /usr/src/pgsql/postgresql-7.0.2/src/interfaces/jdbc
make jdbc2

  ・次のように make が終了すれば、
    /usr/src/pgsql/postgresql-7.0.2/src/interfaces/jdbc/ に
    正しく postgresql.jar ができている。

...
...
...
------------------------------------------------------------
The JDBC driver has now been built. To make it available to
other applications, copy the postgresql.jar file to a public
place (under unix this could be /usr/local/lib) and add it
to the class path.

Then either add -Djdbc.drivers=org.postgresql.Driver to the
commandline when running your application, or edit the
properties file for your application (~/.hotjava/properties
under unix for HotJava), and add a line containing
jdbc.drivers=org.postgresql.Driver

More details are in the README file and in the main postgresql
documentation.

------------------------------------------------------------
To build the examples, type:
JDBC1:  make examples
JDBC2:  make examples2

To build the CORBA example (requires Java2):
  make corba

To make the tests, type:
  make tests
------------------------------------------------------------

  ・JDBC 接続テスト用サンプルコードをコンパイルする。

export CLASSPATH=./
cd /usr/src/pgsql/postgresql-7.0.2/src/interfaces/jdbc
make examples2

  ・JDBC 接続テストをする。

ipc-daemon &
postmaster -i &
export CLASSPATH=./
cd /usr/src/pgsql/postgresql-7.0.2/src/interfaces/jdbc
java example.basic jdbcostgresql:template1 SAK SAK
export CLASSPATH=c:/cygnus/jakarta-tomcat-3.3.1/lib/common/servlet.jar

  ・正常な example.basic の処理結果は次のとおり。

PostgreSQL basic test v6.3 rev 1

Connecting to Database URL = jdbcostgresql:template1
Connected...Now creating a statement
ERROR:  Relation 'basic' does not exist

Running tests:
Updated 3 rows
performing a query
  a=1 b=8
  a=2 b=8
  a=3 b=8
  a=4 b=2
  a=4 b=3
  a=4 b=4
performing another query
  a=1 b=8
  a=2 b=8
  a=3 b=8
  a=4 b=2
  a=4 b=3
  a=4 b=4
Now closing the connection

■JDBC ドライバ postgresql.jar インストール

  ・PostgreSQL 7.0.2 の JDBC ドライバは、次のようにインストールする。

c:/cygnus/jakarta-tomcat-3.3.1/webapps/sak/WEB-INF/lib/postgresql.jar

  ・webapps/sak/WEB-INF/lib/ の作成については、次の資料を参考にして下さい。
    PostgreSQL + Servlet、JSP 編1 - war 作成、JDBC 配置、Servlet, JSP テスト

  ・CLASSPATH は、次のようにした。
    尚、Cygwin B20 では、「"」で囲まないと「;」でエラーになる。
    また、普通のパスは、Cygwin B20 では「:」で区切るが、CLASSPATH は、
    DOS と同じく「;」でかつ、「c:/...」のようにシステムパスから指定する
    必要がある。

export CLASSPATH=".;c:/cygnus/jakarta-tomcat-3.3.1/lib/common/servlet.jar;c:/cygnus/jakarta-tomcat-3.3.1/webapps/sak/WEB-INF/lib/postgresql.jar"

■JDBC ドライバ pgjdbc2.jar インストール

  ・PostgreSQL 7.2.3 の JDBC ドライバは、次のようにインストールする。
    pgjdbc2.jar については、JDBC ドライバの make もうまくいかず、ダウン
    ロードしてきた。(Servlet や JSP のソースの修正は不要であった。)

c:/cygnus/jakarta-tomcat-3.3.1/webapps/sak/WEB-INF/lib/pgjdbc2.jar

  ・webapps/sak/WEB-INF/lib/ の作成については、次の資料を参考にして下さい。
    PostgreSQL + Servlet、JSP 編1 - war 作成、JDBC 配置、Servlet, JSP テスト

  ・CLASSPATH は、次のようにした。
    尚、Cygwin B20 では、「"」で囲まないと「;」でエラーになる。
    また、普通のパスは、Cygwin B20 では「:」で区切るが、CLASSPATH は、
    DOS と同じく「;」でかつ、「c:/...」のようにシステムパスから指定する
    必要がある。

export CLASSPATH=".;c:/cygnus/jakarta-tomcat-3.3.1/lib/common/servlet.jar;c:/cygnus/jakarta-tomcat-3.3.1/webapps/sak/WEB-INF/lib/pgjdbc2.jar"

使用道具 举报

回复
论坛徽章:
21
ITPUB元老
日期:2005-05-10 17:20:252012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
30#
 楼主| 发表于 2005-3-23 18:12 | 只看该作者
PostgreSQL + Servlet、JSP 編1 - war 作成、JDBC 配置、Servlet, JSP テスト

■Tomcat PostgreSQL JDBC、JAVA Servlet、JSP 実行環境

  ・JAVA Servlet、JSP アクセスをする準備として、Tomcat の
    /jakarta-tomcat-3.3.1/webapps/ 配下に実行環境を作成する必要がある。
    また、JDBC ドライバの配置も行う。

■Servlet、JSP 実行フォルダ作成

  ・JAVA サーブレット(Servlet) *.class のコンバイルは、次のように行う。

cd /src
javac test.java

  ・テスト用の Servlet、JSP 実行フォルダ作成のための war パッケージファ
    イルを作成する。次のようなフォルダ構成をワークに作成する。
    jsp/ には、*.jsp を置く。
    classes/ には、*.class を置く。
    lib/ には、*.jar を置く。

  sak/
    jsp/
    WEB-INF/
      classes/
      lib/

  ・war パッケージファイルは、次のように作成する。

cd /src/sak
jar cvf sak.war ./*

  ・作成された sak.war を /jakarta-tomcat-3.3.1/webapps/ 配下に置き、
    Tomcat を再起動すると、自動的に展開され実行環境の設定が行われる。
    /jakarta-tomcat-3.3.1/webapps/sak/ がこれで利用可能となる。

  ・webapps/ 配下に直接、ファイルを作成するだけでは、実行ができないので、
    war 展開で初期セットアップすると良い。
    その後は、*.jsp、*.class、*.jar を直接その場所に置いても実行できる。

  ・Servlet への実行 URL は、
      http://sak-design:8080/sak/servlet/test
    となる。

  ・JSP への実行 URL は、
      http://sak-design:8080/sak/jsp/test.jsp
    となる。

■JDBC ドライバ postgresql.jar インストール

  ・PostgreSQL 7.0.2 の JDBC ドライバは、次のようにインストールする。

c:/cygnus/jakarta-tomcat-3.3.1/webapps/sak/WEB-INF/lib/postgresql.jar

  ・CLASSPATH は、次のようにした。
    尚、Cygwin B20 では、「"」で囲まないと「;」でエラーになる。
    また、普通のパスは、Cygwin B20 では「:」で区切るが、CLASSPATH は、
    DOS と同じく「;」でかつ、「c:/...」のようにシステムパスから指定する
    必要がある。

export CLASSPATH=".;c:/cygnus/jakarta-tomcat-3.3.1/lib/common/servlet.jar;c:/cygnus/jakarta-tomcat-3.3.1/webapps/sak/WEB-INF/lib/postgresql.jar"

■JDBC ドライバ pgjdbc2.jar インストール

  ・PostgreSQL 7.2.3 の JDBC ドライバは、次のようにインストールする。
    pgjdbc2.jar については、JDBC ドライバの make もうまくいかず、ダウン
    ロードしてきた。(Servlet や JSP のソースの修正は不要であった。)

c:/cygnus/jakarta-tomcat-3.3.1/webapps/sak/WEB-INF/lib/pgjdbc2.jar

  ・CLASSPATH は、次のようにした。
    尚、Cygwin B20 では、「"」で囲まないと「;」でエラーになる。
    また、普通のパスは、Cygwin B20 では「:」で区切るが、CLASSPATH は、
    DOS と同じく「;」でかつ、「c:/...」のようにシステムパスから指定する
    必要がある。

export CLASSPATH=".;c:/cygnus/jakarta-tomcat-3.3.1/lib/common/servlet.jar;c:/cygnus/jakarta-tomcat-3.3.1/webapps/sak/WEB-INF/lib/pgjdbc2.jar"

■JAVA Servlet テスト

  ・単純なサーブレットのテストを行う。
    尚、S-JIS、日本語 EUC コードを使用しても日本語が表示できなかった。
    なにか指定方法がありそうである。(JSP は日本語が普通に使えた。)

// test.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class test extends HttpServlet {

  public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
    PrintWriter rw = res.getWriter();
    rw.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">";
    rw.println("<HTML>";
    rw.println("<HEAD>";
    rw.println("<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">";
    rw.println("<TITLE>JAVA Servlet Test</TITLE>";
    rw.println("</HEAD>";
    rw.println("<BODY>";
    rw.println("<P>JAVA Servlet Test...</P>";
    rw.println("<P>OK</P>";
    rw.println("</BODY>";
    rw.println("</HTML>");
  }

}

  ・コンパイルは、次のようにする。

cd /src
javac test.java

  ・test.class を /jakarta-tomcat-3.3.1/webapps/sak/WEB-INF/classes/ 内
    に置き、http://sak-design:8080/sak/servlet/test として実行する。

■JAVA Server Page(JSP) テスト

  ・単純な JSP のテストを行う。
    Servlet と違い、JSP は、S-JIS での日本語表示も OK であった。

<%@ page import="java.util.*" contentType="text/html; charset=Shift_JIS"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE>JAVA Server Page(JSP) Test</TITLE>
</HEAD>
<BODY>
<%
out.println("<P>JAVA Server Page(JSP) Test...</P>");
out.println("<P>JSP は、日本語も OK</P>");
%>
</BODY>
</HTML>

  ・JSP は、ソースをそのまま実行する形となるので、test.jsp を
    /jakarta-tomcat-3.3.1/webapps/sak/jsp/ 内に置き、
    http://sak-design:8080/sak/jsp/test.jsp として実行する。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表