UNIX 関連の情報交換ボード
■ メインページ ■ サブボード修正
> サイトのルートに ftp できなくて困っています。 > 場所が /usr/local/share/apache/htdocs なのは > わかったのですが、どうやってここに ftp でアクセスするか ftp の cdコマンドでカレントディレクトリを変更する、と言う方法では ダメなのでしょうか? ^^; T-Netの場合、ホームディレクトリにソフトリンクしてあるので、すぐに 辿ることもできます。 tos.
一応 htdocs を chown して別のユーザーから変更できるようにし、 ftp ソフトにディレクトリを覚えさせて htdocs に ftp で 読み書きできるようになりましたが、何かこう釈然としません。 ユーザーが chroot されていたらできないことですし、 もっときちんとした解決法があっていい気がします。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
apache を入れて動いたのはいいんですが、 サイトのルートに ftp できなくて困っています。 場所が /usr/local/share/apache/htdocs なのは わかったのですが、どうやってここに ftp でアクセスするか どこを見ても書いていないところが多かったり、書いてあっても ほんとにこうするのがふつうなのかな?と疑問に思うような 内容だったりして、よくわかりません。 ふつうはどのようにするものなんでしょうか? GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> 要するに、アクセスが重なったときに整合性が取れるように > 片方の処理をきちんとひとまとめの処理として終わらせる > と言うような機構のことでしょうか。 たとえば,銀行である人Aが別の人Bにお金を振り込むとき, 1.Aの口座の残高をとりだし,x円引き,結果を書き込む 2.Bの口座の残高をとりだし,x円足し,結果を書き込む という2つの処理をするわけです. もし,ここで1が終わった段階でマシンがフリーズすると, x円が消失してしまいます. また,別の問題として,Aさんが振込処理すると同時に, 別のCさんがAさんの口座に振り込もうとしたとき, 1の処理で残高を取りだしたあとにCさんの振込処理で 残高が増えた場合,その後1の処理で結果を書き込むと, 振込処理で残高が増えた分が消えてしまいます. % 実際このくらいの簡単な操作なら,トランザクション以前に % 1つの塊として処理されますが(^^;; そういった問題を防ぐために,1と2を1つの塊として 処理するのがトランザクションですね. PostgreSQLは良く知りませんが,Oracleなどであれば, トランザクション完了の通知を受け取った段階で, たとえマシンがフリーズしようが電源切ろうが ちゃんと実行した内容は保存されてますし, 途中でダメになったらトランザクション全体が キャンセルされます. >> ただ,速さなら一番でしょう(^^; >> めちゃくちゃ速いはずです. > そうなんですか。いいことを聞きました(^^) > ただ、複数テーブルの処理になると整合性が取れなくなる可能性が > あるわけですね。 複数テーブルの場合,A,B,Cのテーブルがあるなら, その2つのテーブルを排他ロックしてから書き替えれば, (DBが途中で止まらない限り)整合性はとれます. ただ,テーブルのロック順を統一しないとデッドロックに なってしまうのでまずいです.
> MySQLは早いですが,トランザクションがありません. > テーブルロックがあるだけなので,複数テーブルでの > 更新とかをうまく行うのが難しくなりますね. 良く聞くけどトランザクションが分からなかったので調べてみると こんな説明がありました。 http://www.nttpub.co.jp/paso/0400.html 要するに、アクセスが重なったときに整合性が取れるように 片方の処理をきちんとひとまとめの処理として終わらせる と言うような機構のことでしょうか。 > ただ,速さなら一番でしょう(^^; > めちゃくちゃ速いはずです. そうなんですか。いいことを聞きました(^^) ただ、複数テーブルの処理になると整合性が取れなくなる可能性が あるわけですね。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
>> 書き込みの時にsyncしないオプションです. >> これつけると劇的に早くなりますよ. >> そのかわり,データの安全性は低くなりますが… > ほうほう、遅延書き込みなどをするようになるんでしょうか。 > 掲示板みたいな書き込んだ直後にデータを参照するタイプでも大丈夫かな? > 参照したときには書き込むのかもしれませんが。 遅延書き込みみたいなものです. というか,普通にファイルを書き込むのと同じ状態になります. -F を付けないと,トランザクションをcommitするときに,毎回 ディスク上にデータが実際に書き終わるまで待つようになります. > けど実際の運用では必須のオプションになりそうな気がしますね。 > 小さいデータベースに少ない要求なのに結構重い気がしますから。 わたしもいつも付けています.付けないと遅すぎ(^^;; > 小さな用途だったら MySQL の方が向いていますかね? > なんか速いとか聞きましたが。 MySQLは早いですが,トランザクションがありません. テーブルロックがあるだけなので,複数テーブルでの 更新とかをうまく行うのが難しくなりますね. ただ,速さなら一番でしょう(^^; めちゃくちゃ速いはずです.
>> -F オプションってなんでしょうか? postmaster のリファレンスを見ても >> 書いてないです。-o が postmaster に直接渡すオプションってのは分かったんですが。 > 書き込みの時にsyncしないオプションです. > これつけると劇的に早くなりますよ. > そのかわり,データの安全性は低くなりますが… ほうほう、遅延書き込みなどをするようになるんでしょうか。 掲示板みたいな書き込んだ直後にデータを参照するタイプでも大丈夫かな? 参照したときには書き込むのかもしれませんが。 けど実際の運用では必須のオプションになりそうな気がしますね。 小さいデータベースに少ない要求なのに結構重い気がしますから。 小さな用途だったら MySQL の方が向いていますかね? なんか速いとか聞きましたが。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> -F オプションってなんでしょうか? postmaster のリファレンスを見ても > 書いてないです。-o が postmaster に直接渡すオプションってのは分かったんですが。 書き込みの時にsyncしないオプションです. これつけると劇的に早くなりますよ. そのかわり,データの安全性は低くなりますが…
> これ以上の編集は試していませんがデータベースのインターフェイスが > ACCESS になればかなり心強いものがあります。今までのデータベースを > そのまま使えるのもおいしいです。 ACCESS で作ったテーブルを PostgreSQL のデータベースに ODBC で 投げてみたんですけど、yes/no 型のフィールドはだめみたいですね。 データ型はそれぞれの間で統一されていないのでこちらで対応しないと いけませんね。なにかいい資料とか無いでしょうか? ODBC ドライバがどう扱っているかが問題かな? GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> su -l postgres -c "pg_ctl ayaya" でやればうまくいきませんか?(^^; > どちらにしろ,停止時はちゃんとpg_ctlで止めた方が良いと思いますが… > (特に -o "-F" 使ってる場合は…) su -l って・・・おお!これでフルログインした形になるんですね(^^; 自動実行の時には postgres の環境変数がないから困っていたんですけど 助かりました(^^; -F オプションってなんでしょうか? postmaster のリファレンスを見ても 書いてないです。-o が postmaster に直接渡すオプションってのは分かったんですが。 確かにデータベースの安全性を考えると実際に運用するときは 確実に終了させないといけませんね。と言うか実際の運用では 電源を切らないとは思いますが(^^; GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> pg_ctl -w stop で終了させた場合はきちんと無くなっているようなんですが、 > pg_ctl は postgres でログインしないと実行できないし、 > 電源を切りたいときにいちいちそんなことは面倒です。 su -l postgres -c "pg_ctl ayaya" でやればうまくいきませんか?(^^; どちらにしろ,停止時はちゃんとpg_ctlで止めた方が良いと思いますが… (特に -o "-F" 使ってる場合は…)
うちの場合、FreeBSD の入ったマシンを切ることがあるんですが、 マシン起動時に自動的に postmaster (PostgreSQL deamon) を 起動させようとして問題がでました。 環境はここのインストールの手引きの通りにした状態です。 特に環境変数は重要ですので、設定しておいてください。 http://www.sra.co.jp/people/t-ishii/PostgreSQL/7.0/ コントロールスクリプトの pg_ctl をのぞいてみると、 /tmp/.s.PGSQL.5432 と言うソケットと /usr/local/pgsql/data/postmaster.pid と言うプロセス ID を 保存しているファイルを参照しているようです。 pg_ctl -w stop で終了させた場合はきちんと無くなっているようなんですが、 pg_ctl は postgres でログインしないと実行できないし、 電源を切りたいときにいちいちそんなことは面倒です。 そこで、マシン起動時に上の二つのファイルがあったら消すようにしてみました。 結果的にはそれでうまくいったので /usr/local/etc/rc.d に置く 自動実行シェルスクリプトを載せます。 #!/bin/sh if [ -x /tmp/.s.PGSQL.5432 ];then rm /tmp/.s.PGSQL.5432 fi if [ -x /usr/local/pgsql/data/postmaster.pid ];then rm /usr/local/pgsql/data/postmaster.pid fi su postgres -c "/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data start" su postgres -c "/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data status" そういえば一番下のステータスを表示させる部分はモニターのつながっていない うちのマシンには必要ないですね(^^; 起動時に -S -i オプションがないのは /usr/local/pgsql/data/postmaster.opts.default に書いてあるためです。 今まではいきなり電源切っても問題は出ていませんでしたが、 PostgreSQL 7.0 はファイルの存在で起動状態を調べるという仕様らしいので、 問題が出てきたんですね。とりあえず参考までに。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
続きです。 情報はすべてここで手に入りました。 http://www.interwiz.koganei.tokyo.jp/software/PsqlODBC/index.html faq もうちの環境を整備するには十分なものでした。UNIX 系の 情報サイトとしてはぴかいちのわかりやすさじゃないかと思います。 PostgreSQL ODBC Driver 日本語版を Win98 にインストールするわけですが 最初はオリジナルの英語版ドライバを入れます。実行ファイルで 普通にインストーラが起動しますので付和雷同しながらインストールします。 コントロールパネルの ODBC データソースのところに PostgreSQL ドライバが 現れました。ユーザデータソース、システムデータソースなどいろいろあるのですが どうもファイルデータソースと言うのが今接続したい PostgreSQL にあたりそうです。 そこでデータソースの追加をしてみました。ドライバはもちろん PostgreSQL です。 するとドライバの設定ダイアログがでてきました。データベース名は 先にサンプルのゲストブックスクリプトで使った postgres を入れました。 createdb で作られるデータベースのデフォルトがこれなんですね(^^; Server は PostgreSQL の入っているサーバの IP なりサーバ名なりを入れます。 Port はそのままでユーザー名は nobody にしました。 PHP などからの接続は nobody として処理されるらしく、 ユーザーとして既にデータベースをいじれるように登録してあったものです。 Password は無しです。オプションの中に ReadOnly のチェックが入っているので 編集したいんですから当然それをはずします。 これで OK を押すと、今まで失敗していた ODBC データソースの登録ができました。 さて ACCESS で試してみよう、と言うわけで適当に空のデータベースを用意して、 ファイル>外部データの取り込み>テーブルのリンクをしてみました。 ファイルの種類の中に ODBC detabase があるのでそれを選ぶと、 登録したデータソースがありますので(ここでも登録できます)それを選びます。 すると、test2 と言う postgres の中のアクセスを許可されているテーブルが 表示されました。ほんとに通信してる〜(T-T)感動 テーブルをリンクさせようとすると、レコードを一意にするためのフィールドを 求められます。文字は化けてるしそれにあたるものはないので困り、 全部選んでみましたが、怒られました(^^;テーブルとしてはあるので 表示してみようとすると接続に失敗しています。 もう一度ドライバのサイトを見てみると、PostgreSQL 7.0 には 2000/06/17版で対応したようです。日本語版は日本ご対応だけでなく そういう部分でも対応が進んでいるようなので、とりあえず入れます。 DLL を \windows\system フォルダにコピーするだけです。 これでもういちどリンクし直すときちんと表示されました! データベースの内容が日本語もきっちりと表示されています。 さてちょっと変更を加えてみようかなと思ったら、変更できませんとか言います。 faq を見ると ReadOnly は切ってあるので主キーがないのが怪しいです。 主キーがないと ACCESS では編集することができないらしいです。 データベース自体に主キーを持たせるのが一番いいんですが、 ドライバ側でも対応できるようです。主キーとして使える値を 付加して渡してくれるのです。ドライバ側の設定でそのチェックを入れて リンクし直すと oid と言う項目が増えています。それを一意に認識する 項目として指定すると、データベースを編集できるようになりました! さて、ゲストブックの PHP を見てみると、変更は反映されていません。 テーブルを閉じてみました。すると反映されました。 テーブルを閉じるか、レコード>更新で反映されるようです。 これ以上の編集は試していませんがデータベースのインターフェイスが ACCESS になればかなり心強いものがあります。今までのデータベースを そのまま使えるのもおいしいです。 ODBC を知らない段階からここまでうまくいくとは思いませんでした。 ODBC 万歳と言うところでしょうか(^^; ここまで持ってきてしまえば、かなり一般的な用途にも使えると思います。 個人で使うにしてもサーバにデータがあると言うだけでも 十分価値のあるものになるでしょう。しかもそのデータを PHP や Perl などの CGI からも参照できるわけですから、 データセンターとしてこれ以上ない気がします。 もちろん掲示板のような web 上のデータをまとめるのにも最適でしょう。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
と言うか、ODBC ってなに?って感じだったんですが(笑) Win98 のコントロールパネルに ODBC データソース、 と言うのがあります。開いてみるとわけ分かりません(笑) ヘルプはヘルプになってません(笑) とりあえず、ACCESS で接続できるらしい事は分かりました。 で、ODBC で接続するらしいんですが、うちの環境でできるのか? とか思いながらも、とりあえず PostgreSQL を --with-odbc で もう一度コンパイルし直しました。(これは必要だったのかどうか 今となっては分かりません) そして、コントロールパネルで適当にごちゃごちゃいじっても 全然うまくいきません。ODBC と言えば ODBC for oracle しかない... 仕方がないのでヒントを求めてインターネットで検索しながら 眺めていると、こんなところを見つけました。 http://www.interwiz.koganei.tokyo.jp/software/PsqlODBC/index.html てっきり PostgreSQL ODBC Driver と言うから PostgreSQL の方に インストールするものかと思ったら Win 側のドライバのようです。 そうか、PostgreSQL 用の ODBC ドライバを入れるもんだったのか、と やっと気付きました(^^; ODBC は単一のドライバだとばかり 思いこんでいました。 次のレスにドライバを入れて ACCESS で PostgreSQL のデータベースを 編集するに至るまでを書きます。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> コンパイル時に --enable-multibyte 付けないとダメですよ. > これを付けても,template DB は ASCII になりますが, > 問題ないです.(たぶん) とりあえずこれでインストールは成功しました。 psql とか createdb dropdb とか多少使い方をつかみながら、 こんな事やっている場合じゃない、とばかりに PHP の方に 手を移していきました(^^; GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> コンパイル時に --enable-multibyte 付けないとダメですよ. > これを付けても,template DB は ASCII になりますが, > 問題ないです.(たぶん) 消さなきゃ良かった(T-T)まあいいやもう一度コンパイルだ。 >> とりあえず日経ソフトウェアの先月号に SQL の特集があったようなので >> 取り寄せてみようかな。 > pgsql-ml を読んでみては? 早速購読しました。web だと最新版の情報ってあまりないですし(^^; GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
>> 7.0以降の場合は, >> createdb ayaya -E EUC_JP >> とかってやればマルチバイト対応になるかと. >> psql -l >> で確認しましょう♪ > ?? データベースを作るときにそういう指定ができると言うことは > コンパイル時の問題ではないと言うことですか? コンパイル時に --enable-multibyte 付けないとダメですよ. これを付けても,template DB は ASCII になりますが, 問題ないです.(たぶん) > とりあえず日経ソフトウェアの先月号に SQL の特集があったようなので > 取り寄せてみようかな。 pgsql-ml を読んでみては? http://www.sra.co.jp/people/t-ishii/postgres95/index.html
> 7.0以降の場合は, > createdb ayaya -E EUC_JP > とかってやればマルチバイト対応になるかと. > psql -l > で確認しましょう♪ ?? データベースを作るときにそういう指定ができると言うことは コンパイル時の問題ではないと言うことですか? ここまで本無しでインターネットのリソースだけでやってきましたが、 データベース関連になるとさすがに情報が少なくなってきた気がします。 いや、みんなやろうとしているような感じはあるんですけど、 説明するまでには至っていないと言う様子です。 とりあえず日経ソフトウェアの先月号に SQL の特集があったようなので 取り寄せてみようかな。 GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場
> ./configure --with-mb=EUC_JP とやったら、--enable-multibyte と書け > と文句を言われたのでそうしてからコンパイルしたはずなんですが、 > なんでマルチバイト対応になってないんだ〜 7.0以降の場合は, createdb ayaya -E EUC_JP とかってやればマルチバイト対応になるかと. psql -l で確認しましょう♪
PHP を使うならデータベースと連携させなきゃ、と言うことで、 PostgreSQL のインストールに挑戦してみました。 以下のサイトを参考にしました。 http://apex.wind.ne.jp/tetsuro/f-bsd/ http://www.geocities.co.jp/HeartLand-Namiki/3438/FreeBSD/quark.html しかし、HDD が残り 40MB (^^; 必要になる gcc の最新版とか入れただけでパンクしそうになってしまいました。 仕方がないのでなにか消せないか探しました。カーネルの設定は必要ないようなので とりあえずカーネルのソースを削除。doc もある程度消しました。 これで何とか 60MB くらい空いたので、PostgreSQL 7.02 のソースを持ってきて 展開、コンパイルをしましたが、できあがったものを使ってみると、 なんと、マルチバイト設定されていないとエラーが返ってきました。 ./configure --with-mb=EUC_JP とやったら、--enable-multibyte と書け と文句を言われたのでそうしてからコンパイルしたはずなんですが、 なんでマルチバイト対応になってないんだ〜 と、叫びながら find /usr/local/pgsql -delete なんでパッケージがないんでしょうね。ports でもいいんですけど、 この残り 100MB では ports ディレクトリを作るだけでパンクしてしまいました。 ftp で PostgreSQL の ports が見つかればいいんですけど、ないんですよね。 結局まともにソースからインストールしないといけないと言う状態です。 今までほとんどのものを /stand/sysinstall を使ってインストールしてきたんですけど もう UNIX 初心者は脱却しないといけないんでしょうか(^^; GOO E-Mail: goo_n@hotmail.com WWW: http://homepage2.nifty.com/~goo/ GTET 置き場