PostgreSQL

全1193件中161~180件表示
  • postgresqlサーバーのチューニングについて

    現在、Access2010+Postgresqlにてシステムを構築しており ADOにてデータベースからレコードの検索・追加・更新を行っております。 今回質問させて頂きましたのはpostgresqlのチューニング方法についてです。 現在、あるテーブルにWANからVPNを経由して接続した状態でSELECTを行うと、 結果が帰ってくるまでにおよそ6分程度かかるテーブルがあります。 (LAN内では4秒程度) 抽出するフィールドを*ではなく、1フィールドに限定しても約4分程度かかります。 そのテーブルには約30000件ほどレコードが格納されており SELECTする際は、bool型のフィールドをWHERE条件に入れています。 例)SELECT * FROM tbl_test WHERE f条件 = TRUE; しかし同じテーブルの別のvarchar型フィールドにLIKE演算子で検索を かけると、すぐ(0.44秒)に結果が帰ってきます。 例)SELECT * FROM tbl_test WHERE 名称 LIKE '%テスト%'; 尚、この場合の結果は20件ほどですので、結果が早いのは当然ですが なぜbool型を条件にした場合に6分もかかってしまうのでしょうか。 システムの都合上、WANからVPNを経由してアクセスする事が必須ですので LAN内の速度が速くてもWANからの速度が遅いのはNGなのです。 一応、Web上で紹介されている一般的なチューニング方法を参考にし postgresql.confの設定値は下記の通りに行いました。 ・shared_buffers → 1024MB ・max_connections → 100 ・effective_cache_size → 512MB ・random_page_count → 2 ・work_mem → 3MB 恐らく根本的にどこかの設定や設計がまずい為、このような結果に なっているのであろうと思うのですが、それを特定するに至りません。 見直すべき点やアドバイスなどがあれば教えて下さい。 <サーバースペック> OS:WindowsXP Pro SP3 メモリ:3GB CPU:Pen4 2.8GHz Postgresqlバージョン:8.3

  • SQL支援ソフト

    postgreSQL8.4を使っているのですが、SQL支援ソフトを導入したいと考えています。 以前、cseを使ったことがあるのですが、これ以外にオススメのソフトありましたら、ご教授願います。

  • SQL文のAS句の意味を教えて下さい。

    generate_seriesをネットで調べていたら下記のページを見つけ、このページのSQL文を解読していたら一か所、わからないところがあったので質問しました。 下記のSQL文はサイトからコピーしたものです。 SELECT  current_date + s.a AS date FROM  generate_series(   (SELECT 0 - extract(dow FROM current_date))::int,   (SELECT 6 - extract(dow FROM current_date))::int  ) AS s(a); 下記が上記のSQL文を実行した結果です。   date ---------- 2012-02-26 2012-02-27 2012-02-28 2012-02-29 2012-03-01 2012-03-02 2012-03-03 上記のSQL文のAS句を下記のように私が変更してSQL文を実行したら上記の結果と同じ結果を出力しました。 SELECT  current_date + s AS date FROM  generate_series(   (SELECT 0 - extract(dow FROM current_date))::int,   (SELECT 6 - extract(dow FROM current_date))::int  ) AS s; 下記が上記のSQL文を実行した結果です。   date ---------- 2012-02-26 2012-02-27 2012-02-28 2012-02-29 2012-03-01 2012-03-02 2012-03-03 上記のSQLのAS句の「s(a)」はどういう意味ですか? ※AS句は別名を付ける際に使うと思うんですが... すみませんが説明していただけませんでしょうか? 宜しくお願いします。

  • 2つのテーブルで引き算 postgres

    SELECT point FROM point_1 where id = 1; SELECT point FROM point_2 where id = 1; 別のテーブルの同じカラムで引き算をしたいです。 どうすればいいのでしょうか?

  • 2回目のselect文

    同じselect文でも 1回目のselect文と2回目のselect文の早さが全然違います。 なぜでしょう?

  • CygwinでPostgreSQL makeエラー

    お世話になります。 Cygwin(ver:1.7.10-1)でPostgreSQL(ver:8.3.13)をインストールしたいのですが、make all時に以下のエラーが発生します。 Cygwinパッケージの不足等があるのでしょうか?何かアドバイスをいただけるとありがたいです。 ====================================================== rm -f thread.c && ln -s ../../../../src/port/thread.c . gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -I../include -I../../../../src/interfaces/ecpg/include -I../../../../src/interfaces/libpq -I../../../../src/port -I../../../../src/include -DBUILDING_DLL -c -o thread.o thread.c dlltool --export-all --output-def ecpg.def execute.o typename.o descriptor.o data.o error.o prepare.o memory.o connect.o misc.o path.o pgstrcasecmp.o thread.o dllwrap -Wl,--enable-auto-import -o cygecpg.dll --dllname cygecpg.dll --def ecpg.def execute.o typename.o descriptor.o data.o error.o prepare.o memory.o connect.o misc.o path.o pgstrcasecmp.o thread.o -L../pgtypeslib -L../../../../src/interfaces/libpq -L../../../../src/port -L/usr/local/lib -lpgtypes -lpq -lm execute.o:execute.c:(.text+0x20e1): undefined reference to `_libintl_setlocale' execute.o:execute.c:(.text+0x2107): undefined reference to `_libintl_setlocale' execute.o:execute.c:(.text+0x251b): undefined reference to `_libintl_setlocale' execute.o:execute.c:(.text+0x255b): undefined reference to `_libintl_setlocale' execute.o:execute.c:(.text+0x262f): undefined reference to `_libintl_setlocale' execute.o:execute.c:(.text+0x26fb): more undefined references to `_libintl_setlocale' follow collect2: ld はステータス 1 で終了しました dllwrap: gcc exited with status 1 ../../../../src/Makefile.shlib:314: recipe for target `libecpg.a' failed make[4]: *** [libecpg.a] Error 1 make[4]: ディレクトリ `/home/nabe/postgresql-8.3.13/src/interfaces/ecpg/ecpglib' から出ます Makefile:6: recipe for target `all' failed make[3]: *** [all] Error 2 make[3]: ディレクトリ `/home/nabe/postgresql-8.3.13/src/interfaces/ecpg' から出ます Makefile:20: recipe for target `all' failed make[2]: *** [all] Error 2 make[2]: ディレクトリ `/home/nabe/postgresql-8.3.13/src/interfaces' から出ます Makefile:17: recipe for target `all' failed make[1]: *** [all] Error 2 make[1]: ディレクトリ `/home/nabe/postgresql-8.3.13/src' から出ます GNUmakefile:12: recipe for target `all' failed make: *** [all] Error 2

  • ファンクション内での円マークについて

    値をカンマ形式で変換するファンクションを作成しています。 ファンクションの内容は下記の通りです。 CREATE FUNCTION Test (DECIMAL) RETURNS VARCHAR(15) AS ' DECLARE arg ALIAS FOR $1; str VARCHAR(16); BEGIN str := ''''; SELECT TRIM(TO_CHAR(arg, ''\\9,999,999,999'')) INTO str; RETURN str; END; ' language 'plpgsql' ; 上記のコマンドを実行したらワーニングが出力されました。 下記が出力したワーニングの内容です。 WARNING: nonstandard use of \\ in a string literal 行 2: ' ^ HINT: Use the escape string syntax for backslashes, e.g., E'\\'. WARNING: nonstandard use of escape in a string literal 行 1: SELECT TRIM(TO_CHAR( $1 , '\9,999,999,999')) ^ HINT: Use the escape string syntax for escapes, e.g., E'\r\n'. QUERY: SELECT TRIM(TO_CHAR( $1 , '\9,999,999,999')) CONTEXT: SQL statement in PL/PgSQL function "test" near line 6 CREATE FUNCTION ※一応、ファンクションは作成できたんですで・・・ ファンクションを実行したらワーニングと結果が出力されました。 SELECT test(10000); 下記が出力したワーニングの内容です。 WARNING: nonstandard use of escape in a string literal 行 1: SELECT TRIM(TO_CHAR( $1 , '\9,999,999,999')) ^ HINT: Use the escape string syntax for escapes, e.g., E'\r\n'. QUERY: SELECT TRIM(TO_CHAR( $1 , '\9,999,999,999')) CONTEXT: PL/pgSQL function "test" line 6 at SQL statement test -------- 10,000 (1 行) 下記のように円マークの箇所にEをつけたりしましたがワーニングが解消する事はできませんでした。多分、私の記述がいけないような気がします。 すみませんがどのように記述すればいいのでしょうか。 ご教授いただけませんでしょうか。 宜しくお願いします。

  • PostgreSQLでストアドプロシージャについて

    皆さんのお陰でストアドファンクションを作成する事ができました。 ここで1つ、疑問が・・・ ネットでPostgreSQLの「CREATE PROCEDURE」を検索しても私が望んでいる情報を得る事ができませんでした。 申し訳ありませんがここで質問があります。 PostgreSQLで「CREATE PROCEDURE」はないんでしょうか。 PostgreSQLではストアドプロシージャとストアドファンクションは一緒なのでしょうか。 MySQLやSQL Serverではストアドプロシージャとストアドファンクションは別だった気がしますが・・・ ※違っていたらすみません。 どなたか私の疑問を解決していただけませんでしょうか。 宜しくお願いします。

  • プライマリキー(主キー)を貼る際の注意は

    初歩的な事を聞かせて下さい。 テーブルを作成しました。 テーブルの項目は以下の通りです。 連番 コード 名前 カタカナ パスワード メールアドレス 所属 権限 削除フラグ 作成者 作成日 更新者 更新日 プライマリキー(主キー)を貼る際の注意は有りますでしょうか。 私自身、プライマリキーはユニーク項目に貼るという認識していますが間違っていますでしょうか。 また、一つのテーブルにプライマリキーって貼る事はできますかっていうか貼る事ができるんでしょうか。 くだらない質問をしている事は重々、承知していますが自身がありません。 申し訳ありませんがアドバイスいただけませんでしょうか。 皆さん、ご教授宜しくお願いします。

  • ストアドファンクションのエラーについて

    PostgreSQLでストアドファンクションを作成しました。 ファンクションの内容は下記の通りです。 CREATE FUNCTION getRenban (VARCHAR) RETURNS VARCHAR(7) AS ' DECLARE key ALIAS FOR $1; code VARCHAR(7); code2 VARCHAR(2); code5 VARCHAR(5); renban INTEGER; new_code VARCHAR(7); BEGIN SELECT MAX(code) INTO code FROM M_ITEM WHERE flg = TRIM($1); code2 := TRIM($1); IF code IS NULL THEN renban := 1; ELSE SELECT SUBSTR(code, 2) INTO code5; SELECT TO_NUMBER(code5, ''99999'') INTO renban; renban := renban + 1; END IF; code5 := ''''; SELECT TO_CHAR(renban, ''00000'') INTO code5; SELECT code2 || code5 INTO new_code; RETURN new_code; END; ' language 'plpgsql' ; コンソール上で下記のコマンドを実行したらエラーが出力されました。 SELECT getrenban('01'); 出力されたエラーの内容は下記の通りです。 ERROR: value too long for type character varying(5) CONTEXT: PL/pgSQL function "getrenban" line 19 at SQL statement お恥ずかしいですがいくらコードを見てもどこが原因なのかわかりません。 申し訳ありませんがご教授お願いできませんでしょうか。 昨日から悩んでいます。 どうか助けて下さい、宜しくお願いします。

  • リレーションについて

    伝票データを各テーブル(ヘッダと明細)に分けたい格納したいと考えています。 ※ヘッダ情報と明細にヘッダNoというフィールドを作成してこの値で紐付けるようにしています。 そこで皆さんに質問があります。 ヘッダ情報を削除した際に紐づいている明細データも一緒に削除され、明細のみ削除する際はヘッダ情報は削除されずに明細のみが削除されるような仕組みにするにはどうしたらいいでしょうか。 またこういう機能ってういか、仕組みの事を何て言うんでしょうか。 ※確かテーブルを作成する際に何か記述したらできたような記憶がするんですが・・・  間違っていたらすみません。 説明が下手ですみませんが理解していただけましたでしょうか。 申し訳ありませんがアドバイス宜しくお願いします。

  • テーブルのフィールド名の命名について

    テーブルを作成する際に下記の項目のフィールドを考えていますがいい英語のフィールド名が浮かびません。 ・作成者 ・作成日 ・更新者 ・更新日 申し訳ありませんがご教授いただけませんでしょうか。 また命名で気をつける事がありましたらアドバイスいただけたら幸いです。 宜しくお願いします。

  • pgAdminIIIアンインストールについて

    windows7にインストールされていたpgAdminIII1.8.?(詳細なバージョン不明) をインストールして使用しておりました。 DB本体もインストールの必要が出てきたため、PostgreSQL9.1をインストールしました。 同時にpgAdminIII1.14もインストールされました。 DBのバックアップを使用と、pgAdminIII1.14でDBを選択し"ツール"から"バックアップ"を選択し バックアップを試みたのですが、バージョン違いでバックアップできないとのエラーがでました。 エラーの内容からpgAdminIII1.8のバックアップ実行ファイル呼び出しているものと思われたので pgAdminIII1.8、PostgreSQL9.1をコントロールパネルからアンインストールし、 インストールされていたフォルダを削除、 postgresのユーザーアカウントを削除、 postgresのユーザーフォルダを削除 再起動の後、PostgreSQL9.1を再度インストールしました。 pgAdminIII1.14からバックアップを試みようとしたのですが、 "ツール"からバックアップを選べなくなっており(グレーアウト) 右クリックメニューにも"バックアップ"が出てこなくなりました。 アンインストール前に設定していたサーバの設定が残っていたため、 正常にアンインストールされていなかったと推測しております。 困っております。 対処法をご存知の方がいらっしゃいましたら 教えてください。 よろしくお願いいたします。

  • pg_dumpのバッチ実行

    Windows2008環境で、PostgreSQL8xを開発しています。 日次のバックアップで、DOSバッチからpg_dumpコマンドを実行し、 ダンプを取りたいと思います。 そこでサンプルを作成し、実行したのですが、 途中パスワードを聞かれてしまい、止まってしまいます。 実行は下記のコマンドです。 >>pg_dump -U User01 -Fc testdb > backup.dat パスワードファイル、というファイルに 「ホスト名:ユーザ名:パスワード:DB」User01の エントリを追加したところ、パスワードが聞かれなくなりました。 これはマニュアルどおりだと思います。 ただファイルにユーザ毎にパスワードを書くのもどうもイマイチで 他の方法が無いか調べています。 ・パスワードを聞かれない管理ユーザで実行する ・実はpg_dumpでパスワードを指定するパラメータがある とかあれば良いのですが・・ パスワードファイル以外に、回避方法は ありますでしょうか?。

  • TRUNCATEの権限設定について

    現在、phpおよびPostgreSQLを使用して WEBアプリケーションを開発しています。 その中で、あるテーブルのデータを一括削除するために TRUNCATEを使用したいと思い、以下のようにTRUNCATE権限を設定しようと したところ以下のエラーになりました。 ERROR: unrecognized privilege type "truncate" truncateタイプの権限設定が認められていない感じのエラーでしょうか。 ちなみに、テーブル作成および権限設定はphpPgAdminを使用して行いました。 SQLは以下の通りです。 CREATE TABLE stock_tbl ( cc_no int, course_no int, date int, time_no int, status int NOT NULL DEFAULT 0, del_flg int NOT NULL DEFAULT 0, create_dt timestamp NOT NULL DEFAULT now(), update_dt timestamp NOT NULL DEFAULT now(), PRIMARY KEY (cc_no, course_no, date, time_no) ); REVOKE ALL ON stock_tbl FROM admin; GRANT SELECT, UPDATE, INSERT, DELETE, TRUNCATE ON stock_tbl TO admin; 環境は以下の通りです。 サーバーはCentOS5.5 PostgreSQLのバージョンは8.1.23 phpPgAdminのバージョンは4.1.3 バージョンなどの問題でTRUNCATEの権限を設定できないのかなと思い 色々調べてみたのですが、解決に結びつくものが見当たりませんでした。 なんとか、上記テーブル、ユーザーにTRUNCATEの権限を与えたいのですが どのように設定を行えばよろしいでしょうか? 補足ですが、PostgreSQLのバージョンが8.1.22で 上記テーブルに何の特権も設定せずにアプリケーションでTRUNCATEを 実行してもエラーになりませんでした。 どなたか、上記に関してアドナイスをいただけないでしょうか? よろしくお願いいたします。

  • SQLで特定データがNULLなら別データを引用?

    SQL文で“ある箇所のデータがNULLだったら指定した場所からデータを引用する”ということをしたいのですがどのように記述すれば良いのでしょうか? 画像にあるようなテーブル構成だと仮定します。 やりたいこととして select A.XA, A.YA, A.ZA + M.M2, B.XB, B.YB B.ZB from A, B, M where A.XA = B.XB and A.YA = B.YB and B.ZB = M.M1 ; というような書き方です。 ちなみにM2のデータ型は「Interval Day?」とかいうような型らしい?です。名前忘れましたが・・・ このイラストから見るとマスターテーブルの“F5”のM2データがNULLです。 NULLデータは日付の加算ができなくなるので・・・対処したいのです。 このSQL文に加える処理として、 「もし、マスターテーブルのF5がNULLの場合のみG6のM2を参照する」 という構文を追加したいのですが・・・ そのような記述はSQL内で可能なのでしょうか?

  • 特定の時間のだけ表示したいです

    データベースに 名前|取得時間 AAA|2011-12-11 19:00:33.562266 BBB|2011-12-16 18:53:13.163553 CCC|2011-12-19 14:01:35.91384 ってあった際に、18時から20時の間だけ抽出して 名前|取得時間 AAA|2011-12-11 19:00:33.562266 BBB|2011-12-16 18:53:13.163553 と表示したいです。 時間はnow()でINSERTしています。 宜しくお願いします。

  • PostgreSQLで表結合+DELETEしたい

    PostgreSQLで、テーブル(2)の情報をキーに(1)を削除したいのですが、エラーが出てしまいます。 どなたか解決策をご存知の方いらっしゃいましたら ご教授宜しくお願い致します。 _構造_____________________ テーブル(1)・・カラムA テーブル(2)・・カラムA、カラムB _SQL文_____________________ DELETE FROM (1) INNER JOIN (2) ON (1).カラムA= (2).カラムA WHERE (2).カラムB=X _エラーメッセージ__________ [Err] ERROR: syntax error at or near "INNER"

  • postgreSQLのupdateについて

    postgresqlのupdateについて質問です。 一つのテーブルで二つの列と任意の文字を別の列へ結合するupdate文を作りたいのですが初心者なものでわかりやすくご教授いただけたら幸いです。 UPDATE テーブル名 SET 列3 = '文字' || "列1" || '文字' || "列2" WHERE 列 Is Null; 何卒、よろしくお願い致します。

  • varcharからnumericへの型の変更

    お願いします。 環境 PostgreSQL 8.1 どなたか、 varcharからnumericへの型の変更 する方法をご存知ないでしょうか