• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フィールドに関して)

PostgreSQLのフィールドについての疑問

このQ&Aのポイント
  • PostgreSQLの設定におけるフィールド「rdate」の意味を教えてください。
  • 初心者の私は、DBの違いによるフィールド設定の意味が分かりません。
  • フィールドの意味が分からず躓いています。どなたか教えていただけませんか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>rdate timestamp default 'now' この文の意味としては、rdateというtimustamp型(日時を表す)の列に、insert時に値を設定しなかった場合、システムから現在日時を受け取って格納するという意味です。 >MySQLの場合、どのような属性が適切なのかをお教えいただければ データ型のtimestampは、PostgreSQL、MySQLの双方に存在し、日時を表す点では等価と考えて問題ないでしょう。 →実際にはPostgreSQLの方が、timestamp型でもいくつかの表現形式を持っているという違いがあります。 default 'now'というのは、PostgreSQLの独特の記述で、一般的な表記方法としてdefault current_timestampという表記がPostgreSQLでも等価の意味で行えます。この表記方法は、MySQLでも同じです。 →PostgreSQL 8.0.0では、default 'now'と記述すると、最初のinsert時に受け取った現在日時がその後も繰り返し受け渡しされ、これはバグだと思われます。current_timestamp指定では、insert毎に最新の日時が仕様通り返されます。 PostgreSQLでも一般的なSQLの書き方にすれば、今回のケースでは、MySQLでもそのままの文で表定義を行えます。 CREATE TABLE session ( sid varchar(32) primary key, uid varchar(16) not null, password varchar(16), rawdata varchar(512), rdate timestamp default current_timestamp );

sadacha
質問者

お礼

chukenkenkou様 こんばんは。早速のお返事を有難う御座います。 分かりやすい説明で、とても参考になりました。 お忙しい中、有難う御座いました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

この表定義は、どこからの引用ですか? ユーザの表定義なのですから、各列がどういう意味を持つのかは、引用元で調べるしかありません。 運良く(?)この表定義の引用元と思われるサイトを、私の方でも発見できました。 PHPでのコーディングのソース上のコメントでは、以下のように記されていますね。 処理内容は検証していないので、ご自分で確認してください。 =====ここから、引用===== // シリアライズされたセッションデータ保管用項目名。 // 読み出し用関数の作成が楽だったので、これも // 保管するようにしちゃいました。 define(S_RAW_DATA_FIELDNAME, "rawdata"); // セッションID保管用項目名。 define(S_SID_FIELDNAME, "sid"); // セッション登録日保管用項目名。 define(S_RDATE_FIELDNAME, "rdate"); =====ここまで=====

参考URL:
http://www.stackasterisk.jp/tech/php/php03_06.jsp
sadacha
質問者

お礼

chukenkenkou様 はじめまして、こんにちは。 仰るとおり、この定義はstackasterisk.jp様のところからの引用です。 chukenkenkou様も仰るように、サイト内のコードにはコメントで説明があるのですが、DBのフィールド属性であるtimestamp default 'now'が、MySQLでは使えないといった記事もあったりしたので、MySQLの場合、どのような属性が適切なのかをお教えいただければと質問させて頂きました。 このての説明も、いくつかのサイトには記してあるのですが、動作確認をしようにも、このサンプルコード自体を動かす事が出来ずにおりまして、コードが原因なのか、DBの設定が原因なのか、を解消できればと…。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • セッションに関して

    お世話になっております。 先日も「セッションに関して」と質問させて頂きましたが、引き続き進めている中で、どうも解釈に困ってしまい改めて質問させて頂きます。 と、もうしますのも、下記サイトにある説明で、 http://www.stackasterisk.jp/tech/php/php03_06.jsp;jsessionid=aCXqtz5vDdDg セッション管理用DB(PostgreSQL)を以下の様に設定とありますが、MySQLでは、どのようなフィールドになるのでしょうか? CREATE TABLE session ( sid varchar(32) primary key, uid varchar(16) not null, password varchar(16), rawdata varchar(512), rdate timestamp default 'now' ); また、サイトで紹介させているスクリプトには、随時session_handler.php とい うプログラムを requireしているのですが、require しない場合の通常のファイルとは、どのような記述になるのか概要だけでも教えてはいただけないでしょうか? サイトの説明では、「一人のユーザが 10 のページを表示したら、PostgreSQL の構造上 10 行のデータが追加されます。」ということで、セッション管理にはMySQLを勧めておられるのですが(当方もMySQLです)、先のフィールドに関する質問も含めて、少し具体的にお教え願えればと思っております。 この手の質問はPHPではなく、MySQLかな?などと思いつつ、まとまりのない質問になってしまいましたが、スクリプトの構造が分からず、こちらにて投函させて頂きました。 回りくどい質問になってしまいましたが、このサンプルにおいてのMySQLでのフィールドおよび設定。 session_handler.phpファイルの概要。およびrequireしない場合のスクリプトの記述方法(流れだけで構いません)をご指導頂ければ幸いに思っております。 お忙しいところ恐縮ですが宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • テーブル作成時にエラー?

    こんにちは。 以下のような環境で操作を行っています。 RedHatLinux9.0 PostgreSQL 8.0.3 テーブル作成時に次のようなメッセージが出力され、テーブルを作成することができません。 NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "PK_SIKYO" for table "TM_SIKYO" ちなみに実行したSQL文は次の通りです。 CREATE TABLE "TOUSHIN"."TM_SIKYO" ( "SHIKYO_CD" int4 NOT NULL DEFAULT nextval('"TOUSHIN"."TM_SIKYO_SHIKYO_CD_seq"'::text), "SHIKYO_NM" varchar(50), "SHIKYO_RNM" varchar(50), "SHOW_FLAG" bool, "UNUSE_FLAG" bool, "CREATE_DATE" timestamp DEFAULT ('now'::text)::timestamp(6) with time zone, "CREATE_ID" varchar(10), "CHANGE_DATE" timestamp DEFAULT ('now'::text)::timestamp(6) with time zone, "CHANGE_ID" varchar(10), CONSTRAINT "PK_SIKYO" PRIMARY KEY ("SHIKYO_CD") ) WITHOUT OIDS; SQL文はWindows版のPostgreSQLから作成したものを、そのままコピーして利用しました。 プライマリーキーが正しく設定できていないようなメッセージだと思うのですが、対処法など詳しいことが分からずに困っています。 Windows版から出力したSQL文なので、SQL文に間違いがありそうな感じでもないですし、一体何が原因なのでしょうか?

  • MySQLのFOREIGN KEYについて

     MySQLのFOREIGN KEYについて質問です。 下記のようにitemテーブルを作ってからarrivalhistoryテーブルを作ろうとすると ERROR 1005 (HY000): Can't create table 'xxx_db.arrivalhistory' (errno: 150) というエラーが出てしまいます。 自分でもForeign keyの作り方等調べてはみたのですが、 上手く解決することができません。 どなたかアドバイス下さい。お願いします。 ・親 create table item ( id bigint not null primary key, itemno VARCHAR(50) ) engine=InnoDB; ・子 create table arrivalhistory( id int primary key, itemno varchar(50), arrivaldate date, index(itemno), foreign key(itemno) references item(itemno) on update cascade on delete cascade ) engine=InnoDB;

    • ベストアンサー
    • MySQL
  • 投稿サイトをサクッと作りたい

    http://webeg.info/php-course/step3-030/のログイン画面をログインして、投稿サイトを作りたいのですが、 ログイン情報はどこで定義してなんというものになっているのでしょうか? 空にして もログインできません。 投稿部分だけが欲しいのですが、ログインしないと作れないようです。 もちろんもっと簡単に投稿サイトが作れる情報があればそれでも構いません。 CREATE TABLE `users` ( `user_id` int(11) NOT NULL COMMENT '通しID', `user_loginid` varchar(20) NOT NULL COMMENT 'ログインID', `user_password` varchar(100) NOT NULL COMMENT 'パスワード', `user_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日時', `user_created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '作成日時' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='管理画面ユーザー'; ALTER TABLE `users` ADD PRIMARY KEY (`user_id`); ALTER TABLE `users` MODIFY `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '通しID', AUTO_INCREMENT=1; アカウントの追加 を実行しただけなのでPW、IDは空と考えてよいでしょうか? パスワードの所には長さ100とコメントパスワードとしか記載がないのですがdbではどこにpwを入れるのですか? この場合は空と考えるべきでしょうか? 投稿サイトをサクッと作りたいだけなのですが、もっと簡単に作る方法はないのでしょうか?

    • ベストアンサー
    • MySQL
  • pearの認証(Auth)ができません。

    下記のサイトを参考にして認証サンプルを作成しました。 http://blueeyesblue.cocolog-nifty.com/technote/2007/09/pearauthmdb2-e2.html 下記のコマンドを実行してインストール済みかを確認しました。 pear list -------------------------------------------------- Auth 1.6.4 stable MDB2 2.5.0b3 beta MDB2で正常にデータベースに接続できるかを確認しました。 問題なく接続できました。 下記のテキストボックスに値を入力して[Login]ボタンをクリックしたら下記のエラーが出力されました。 ・Username ・Password ※ログイン画面はAuthのデフォルト画面を使用しています。 [エラー] login failed テーブルは下記のように作成しています。 CREATE TABLE TBL_USER (  no BIGSERIAL PRIMARY KEY,  name VARCHAR(64) NOT NULL,  mail VARCHAR(128) NOT NULL,  password VARCHAR(128) NOT NULL,  del VARCHAR(1) DEFAULT '0' NOT NULL,  ins_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  ins_name VARCHAR(64) NOT NULL,  upd_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  upd_name VARCHAR(64) NOT NULL ); ※テーブルのpasswordフィールドに格納している値は下記のように生成して追加しました。 mkpasswd -l 7 php -r 'echo md5(*******);' ※md5に指定している値はmkpasswdで出力された値を指定しました。 サンプルコードは下記の個所のみを変更しました。 $options = array(  "dsn" => "pgsql://ユーザー名:パスワード@localhost/データベース名",  "table" => "TBL_USER",  "usernamecol" => "name",  "passwordcol" => "password", ); 正直、何が原因なのかわからず困っています。 どうかご存知の方がいましたらアドバイスいただけませんでしょうか。 また今まで認証は1から自作していましたがpearの認証は使いやすいみたいな記事を読んだので使用しようと思いましたが・・・ 自作の認証とpearの認証ではどちらがいいのでしょうか。 ご意見等、何でも構いませんので教えていただけませんでしょうか。 宜しくお願いします。

    • 締切済み
    • PHP
  • MySQLの地理情報の取り扱いについて。

    よろしくお願いいたします。 PostgreSQLの、 CREATE TABLE global_points ( id SERIAL PRIMARY KEY, name VARCHAR(64), location GEOGRAPHY(POINT,4326) ); というSQLの、最後の location GEOGRAPHY(POINT,4326) というところを、MySQLで、実装しようとしているのですが、MySQLにも、地理情報に関する命令はあるようですが、どうすればよいのか見当がつかなく困っています。 どなたか、MySQLでは、こういう風に書くなどのことをご存知の方おられましたら、どんなことでも構いませんので、ご教授願います。

    • ベストアンサー
    • MySQL
  • 簡単に正規化したい

    プログラム素人です。 初心者なのでこんなテーブルを思いつくのですが、これってカラムをいちいち作らないといけないので後のメンテが大変な気がします CREATE TABLE hoge( id INT PRIMARY KEY, item1 VARCHAR(255), value1 INT, item2 VARCHAR(255), value2 INT, item3 VARCHAR(255), value3 INT ); こんな感じのテーブルにどんどんINSERTしていきたいのです CREATE TABLE hoge( id INT PRIMARY KEY, item VARCHAR(255), value INT ); 聞きたいこと MYSQL側 IDにPRIMARY KEYが付いているのですが2つ同じPRIMARY KEYはINSERTでききませんよね?どうすればいいでしょうか? perl側 IDごとにまとめて取得して配列に入れる方法はありますか? idが1のアイテムを全部取得して配列に入れる方法がわかりません(他にいい方法があったらお願いします) よろしくお願いします

    • ベストアンサー
    • MySQL
  • エラーになってしまうCREATE文

    MySQL 5.0.21(Win版)を導入してみたのですが、 http://hotwired.goo.ne.jp/webmonkey/2000/01/index2a_page5.html にある下記のSQL文を「MySQL Command Line Client」から実行すると CREATE TABLE employees ( id tinyint(4) DEFAULT '0' NOT NULL AUTO_INCREMENT, first varchar(20), last varchar(20), address varchar(255), position varchar(50), PRIMARY KEY (id), UNIQUE id (id)); を実行すると、 mysql> CREATE TABLE employees ( id tinyint(4) DEFAULT '0' NOT NULL AUTO_INCREMEN T, first varchar(20), last varchar(20), address varchar(255), position varchar(5 0), PRIMARY KEY (id), UNIQUE id (id)); ERROR 1067 (42000): Invalid default value for 'id' mysql> とエラーになってしまいます。なぜでしょうか?

    • ベストアンサー
    • MySQL
  • FOREIGN KEYの書き方

    オラクル9iを使っています たとえば ☆MST_商品テーブル        ・商品コード  varchar2(10) 主キー  ・分類区分   varchar2(10)  ・商品名称   varchar2(30)  ・仕入先コード varchar2(10) ☆MST_仕入先テーブル  ・仕入先コード varchar2(10)主キー  ・仕入先名称  varchar2(30)    ・取引区分   varchar2(30) があったとして 商品テーブルの仕入先コードと仕入先テーブルの仕入先コードにFOREIGN KEYを使ってリレーションを張りたい場合どのようにSQL文は書いたらいいのでしょうか? ☆CREATE TABLE MST_仕入先    (仕入先コード varchar2(10) NOT NULL,     仕入先名称 varchar2(30), 取引区分 varchar2(30), ALTER TABLE MST_仕入先 ADD CONSTRAINT PMST_仕入先 PRIMARY KEY(仕入先コード); と CREATE TABLE MST_商品 (商品コード varchar2(10),     分類区分 varchar2(10)     商品名称 varchar2(30), 仕入先コード varchar2(10), ALTER TABLE MST_商品 ADD CONSTRAINT PMST_商品 PRIMARY KEY(商品コード); でテーブルと主キーを設定し ALTER TABLE MST_商品 ADD CONSTRAINT FMST_商品 FOREIGN KEY(仕入先コード) REFERENCES MST_仕入先(仕入先コード); ほかにもいろいろ試したのですが にっちもさっちもいかないのでよろしくお願いします。

  • PostgreSQLからMySQLへ変換

    現在ECサイトに追加カスタマイズ機能を導入したいと考えているのですが、 その際の使用コードが以下のようにPostgreSQLの記載となっており、 使用しているphpMyAdminにてSQLコードを入力するとエラーとなってしまいます。 ↓PostgreSQLコード CREATE TABLE dtb_bookmark ( bookmark_id serial NOT NULL, customer_id integer NOT NULL, product_id integer NOT NULL, memo text, create_date timestamp without time zone NOT NULL, update_date timestamp without time zone NOT NULL, del_flg integer ); ALTER TABLE ONLY dtb_bookmark ADD CONSTRAINT dtb_bookmark_pkey PRIMARY KEY (bookmark_id); COMMENT ON TABLE dtb_bookmark IS 'お気に入り情報'; エラーはtimestamp型とALTER以降の文で発生致します。 mysql文にて解釈させるにはどのように変更したらよろしいのでしょうか? 使用mysqlバージョンはMySQL 4.1.21です。 アドバイスなど頂けましたら幸いです。 よろしくお願い致します。

    • ベストアンサー
    • MySQL