Quantcast
Channel: 質問!ITmedia 新着質問(PostgreSQL/702)
Viewing all 116 articles
Browse latest View live

SQL カウント 以上 以下

$
0
0
失礼します。現在ある日付の範囲から3回以上、4回以下(main_id)が重複しているデータを抽出したいのですが、日付の範囲と3回以上までは出来たのですが、 4回以下という条件の追加が上手くできません よろしければご教授お願い致します。 以下に指定日時範囲から3回以上まで作成した例を記載します。 SELECT * FROM old_テーブル名 where 日時 between '2017-08-01' and '2017-08-10' AND (main_id) in (SELECT main_id FROM テーブル名 GROUP BY main_id HAVING COUNT(*) >= 3); 3の後に AND COUNT(*) <= 4とやってのですが上手くいきませんでした

postgres 強制的に連番を取得する事は可能?

$
0
0
postgres 強制的に連番を取得する事は可能ですか? 例えば、IPアドレスの最後の桁と用途を管理するテーブルがあるとします。 table_a ( item1 integer, -- IPアドレスの最後の桁 item2 character varying -- 用途 ) item1item2 ---------- 1デフォルトゲートウェイ 3複合機 11サーバー1 12NAS 21A氏のPC 22B氏のPC 23C氏のPC これを0から255まで空きを含めて一覧で表にしたいという場合、何か方法ありませんか? item1item2 ---------- 0 1デフォルトゲートウェイ 2 3複合機 4 5 6 7 8 9 10 11サーバー1 12NAS 13 14 15 16 17 18 19 20 21A氏のPC 22B氏のPC 23C氏のPC : 255 以下の2つは思いつきますが、あまりやりたくありません。 ・1件1件ぐるぐる回してSQLを発行する。 ・0から255の値を固定で持ったテーブルを別途作成し、それに対してジョインする。 1つのSQLで発行する方法はありませんか?

PostgreSqlのストアドファンクションで

$
0
0
PostgreSqlのストアドファンクションで PostgreSqlのストアドファンクションで連続的に複数のテーブルに書き込みを行う際に、 2つめ以降の書き込みで失敗しても、全部無かった事にしたいのですが、 どういう処理が必要でしょうか、具体的なコードを教えて下さい。 トランザクションの定義とロールバックの話です。 外部のアプリ(VB)から呼び出して使います。 何も書かない場合で、普通に処理が成功した場合、コミットされます。 1つ目の書き込みで失敗した場合は、そこで終了するので、それ以降は処理は行われません。 1つ目の書き込みで成功し、2つめの書き込みで失敗した場合、1つ目の書き込みをロールバックしたいのですが、 何も書かなければ、どうなりますか? ストアドファンクション内の書き込みは全てロールバックされますか? それとも、1つ目の書き込みはコミットされますか? また、もし後者なら、どう書けば全てロールバックできますか? CREATE OR REPLACE FUNCTION function1() RETURNS text AS $BODY$ DECLARE result text := null; BEGIN INSERT INTO tb1( item1 ) VALUES ( ,1 ); INSERT INTO tb2( item1 ) VALUES ( ,2 ); RETURN result; EXCEPTION WHEN others THEN SELECT SQLSTATE INTO result; RETURN result; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION function1() OWNER TO role1; COMMENT ON FUNCTION function1() IS 'ストアドテスト';

変体仮名を登録したいのですが。

$
0
0
名前に変体仮名を使っている人がいます。エクセルに、その方の名前を入力したいのですがマイクロソフトのIMEには入っていないようです。皆さんはどうやって入力していますか。私のPCはWindows10homeの64ビットです。Unicodeの最新版には入ったと聞いたのですがインストール方法がわかりません。それから、koinnというところからフリーソフトをインストールしようとしたのですが、身代金要求のプログラムが添付されているようで私のセキュリテーイソフトが拒否しました。宜しくお願いします。

DBの全ユーザーテーブルに対するtruncate

$
0
0
PostgreSQLを勉強中の者です。 データベースの全ユーザーテーブルに対して、個別にtruncateをかけるいい方法を探しています。  \pset pager  \dt 以上のコマンドを実行して、テーブル一覧を表示できることをはわかったのですが、ここから先の妥当なやり方がわかりません。 リダイレクトして、テキストエディタで加工して、シェルのようなもので流し込む・・・のような形になるのでしょうか? 実例も含めて教えていただけると助かります。 また、truncateされたことの上手い確認方法もあれば御教示下さい。 よろしくお願いします。

配列変数の定義、操作について

$
0
0
こんにちは。 OracleからPostgreSQLへの移行を行っておりますが、Oracle、PostgreSQL共に 経験不足な為、質問をさせて頂きました。 Oracleのfunctionでコレクション型の変数を使用している部分があり、自分なりに 調べてPostgreSQLにはコレクション型が無いので、配列を利用する事になると 思いますが、配列変数の定義と操作が良く判りません。 内容としては、以下の様な配列を設け、ある変数にセットされている文字列が 1列目の内容に合致した時に、2列目の内容を取り出せるようにしたいと 考えております。  ※配列   ['abcd','1'] ['efgh','1'] ['xyz',2] ['lmn',2] ['st',3] ['uv',3]  ※例   ・変数etcに'abcd'と入っている時、’1’を取り出す   ・変数etcに'xyz'と入っている時、’2’を取り出す   ・変数etcに'uv'と入っている時、’3’を取り出す 行数については、要素に応じて随時増やす事になります。 大変申し訳御座いませんが、アドバイス等を頂けると助かります。 よろしくお願い致します。

postgresql 合計値 PHP

$
0
0
失礼します現在テーブルからあるキーのフィールドの合計値を出していきたいのですがうまくいきません 例 テーブル名(test_tbl) user | count ----------------- aaaa | 6 bbbb | 5 bbbb | 6 aaaa | 4 cccc | 9 とあった場合 aaaa | 10 bbbb | 11 のように出力がしたく、SQLを作成しました。countが文字列で格納されているのでto_numberを使用しました $sql = "SELECT user, SUM(to_number(count)) FROM test_tbl GROUP BY user HAVING SUM(to_number(count)) >= 10"; しかしエラーが出てしまいます。どの部分が間違っているのでしょうか? 宜しくお願い致します。

pg_dump スキーマ バックアップでエラー

$
0
0
スキーマ単位でバックアップをしたいと思ってます。 が・・ pg_dumpにてあるスキーマを指定して実行すると「PG_DUMP: no matching tables were found」のエラーが表示されます。 【環境】 PostgreSQL :9.6.0 サーバー :Windows2008 R2 クライアント:Windows7 データベース:postgres ユーザ :postgres -- スーパユーザ スキーマ :SCM -- 注意 大文字 【コマンド】エラー時 パターンA PG_DUMP -h 192.168.xxx.xxx -U postgres -p 5432 -f D:\POSGRESQL_DUMP\SCM_DUMP.DAT -n SCM -Fc postgres 【コマンド】エラー時 パターンB (スキーマに”をつける) PG_DUMP -h 192.168.xxx.xxx -U postgres -p 5432 -f D:\POSGRESQL_DUMP\SCM_DUMP.DAT -n "SCM" -Fc postgres ちなみに -n スイッチを外すと正常に実行されます。 【コマンド】正常時(-n SCMを外す) PG_DUMP -h 192.168.xxx.xxx -U postgres -p 5432 -f D:\POSGRESQL_DUMP\SCM_DUMP.DAT -Fc postgres どうか、お助け下さい。よろしくお願いします。

selectでデータの中身を見れない

$
0
0
デスクトップ上にあるCSVファイルのデータをpostgresqlに\copyで取り込んだのですが、取り込んだデータをselectで見ることができません。 「sh: more: command not found」と表示されてしまいます。 そもそもsh:とmore:の意味をネットでも調べたのですが、よく分かりませんでした。command not foundはパスが通っていないらしいと言うのは分かりました。 どうすればcsvで取り込んだデータを見ることができるのか、どなたか教えていただけないでしょうか。

Postgres 再帰?クエリについて

$
0
0
お世話になります。 postgresのクエリについて、たとえば下記のような場合 どうすればよいのでしょうか?    スタート 期首値     期末値   1年目 100   100      期首値-期首値*0.2(80) 2年目 100   前期末値(80) 期首値-期首値*0.2(64) ... と期末値が1になるまで繰り返したいのですが... 補足  1年目の期首はスタート値になります  案件はスタート値が100のみではなく、80等複数あり  テーブルに格納されています  lagとwith recursiveを組み合わせていろいろしてみましたが、  実現できませんでした。  皆様ご教授願います  

PostgreSQLの同期・非同期について

$
0
0
社内で稼働しているシステムの更新で 今までオラクルを使用していましたが、 PostgreSQLに移行すべく, 2台のサーバーでレプリケーションするつもりでいます。 ポスグレにはレプリケーションで、同期と非同期がありますが、 どちらも一長一短があり、迷っています。 製造工場のシステムに使用している為、 クライアント端末からサーバーへのアクセスは、 1日20時間程度。 障害時の復旧は、長くても2時間程度以内が希望です。 1日の追加行数は7千行程度。 2台のサーバーは物理的に分かれておりますが、 同じ部屋で稼働。 OS:WindowsServer 2012 R2 DB:PostgreSQL9.6 現行のオラクルは、同期モードがライセンス上できませんでしたので、 非同期で運用していますが、 ポスグレはどちらも選べますので、迷います。 同期・非同期 どちらにしたら良いと思われますか? 他に良い方法があるようでしたらご教授ください。

postgres 整数桁で切り上げ

$
0
0
PostgreSQLで整数桁で切り上げ処理できる関数はあるのでしょうか? Excelでいうと、ROUNDUP(1120,-2)のように100の位で切り上げすることができるのでしょうか?

PostgreSQLの同期・非同期について

$
0
0
社内で稼働しているシステムの更新で 今までオラクルを使用していましたが、 PostgreSQLに移行すべく, 2台のサーバーでレプリケーションするつもりでいます。 ポスグレにはレプリケーションで、同期と非同期がありますが、 どちらも一長一短があり、迷っています。 製造工場のシステムに使用している為、 クライアント端末からサーバーへのアクセスは、 1日20時間程度。 障害時の復旧は、長くても2時間程度以内が希望です。 1日の追加行数は7千行程度。 2台のサーバーは物理的に分かれておりますが、 同じ部屋で稼働。 OS:WindowsServer 2012 R2 DB:PostgreSQL9.6 現行のオラクルは、同期モードがライセンス上できませんでしたので、 非同期で運用していますが、 ポスグレはどちらも選べますので、迷います。 同期・非同期 どちらにしたら良いと思われますか? 他に良い方法があるようでしたらご教授ください。

最新日のレコードと合計の抽出

$
0
0
作業テーブル(作業者ID、作業日、作業時間)から、作業者ID毎に指定した作業日のレコード、および作業日を含む月の合計を抽出するSQLを考えております。 DBへのアクセス回数を減らすようにとの事で、1つのSQL文での抽出を検討しておりますが、いまいち上手くいかない状況です。 アドバイスを頂けると非常に助かります。 よろしくお願い致します。

WindowsでポスグレからSQLサーバに接続

$
0
0
ご存じの方、教えてください。 Windows10の環境でPostgresからSQLサーバにtds_fdwを利用して、外部テーブルを参照したいと考えています。 いろいろなサイトを見ているのですが、なかなか見つかりません。 Linux用のセットはあるのですが、Windows用がどうしても見つけられません。 Windows用はまだ開発されていないのでしょうか? ご回答をお願いいたします。

PostgreSQLの文字コード設定

$
0
0
PostgreSQL 9.6.7 を使用しています。 次のSQLを発行しました。 select name, setting from pg_settings where name = 'client_encoding'; 結果: name:client_encoding setting:UTF8 上記の setting を UTF8 ではなく EUC_JP にしたいため、 postgresql.conf で client_encoding = 'EUC_JP' を指定して PosgreSQL の設定ファイル再読込(念のため再起動も)しましたが、 結果は UTF8 のままで変わりませんでした。 恒久的に EUC_JP とするにはどのようにしたら良いでしょうか。

postgresqlのトランザクションについて

$
0
0
開発環境(centOS、apatch、php、postgresql) postgrsqlで「current transaction is aborted, commands ignored until end of transaction block」 のエラーが出てしまいました。 ・複数テーブルに対してinsertを行っています。 ・複数tableのinsert中のどこかでエラーになった場合、全tableをrollbackしたいです。 ・複数テーブルのうち、ひとつのtableでは5回insertを行っています。   for文でまわしているのですが、ここで2回目のinsertの時に   上記のエラーになってしまいます。 で、トランザクション(begin、rollback、commit)を全てはずしたところ、全てのtableで正常にinsertできました。 上記のエラーを調べてみても rollbackしていない・・・みたいなことしか調べられませんでした。 エラーにはなっていないのでrollbackはしないし、ここでcommitしてしまうと、次のinsertなどでエラーになった時、rollbackできなくなってしまうし。。。 上記のエラーをなくすために どのような対策をすればいいのかアドバイスをお願いいたします!

文字列をバイト単位で取り出したい

$
0
0
PostgreSQL 9.5.2を使用しています。 「ABCde」を先頭5バイト分で「AB」と取り出したいです。 但し、例のように「C」が中途半端に範囲にかかるときは、取り出さないようにしたい のですが、どのようにすれば、可能なのでしょうか。 お忙しい中、申し訳ありませんが、ご教授頂けると助かります。 宜しくお願いいたします。

抽出に時間がかかります。

$
0
0
同じテーブルを比較したいのですが、数百件だと時間がかからず、数万件となると抽出に数分かかります。速く抽出するにはどのように修正すればよいでしょうか? 以下がSQL文です。 select distinct sch1.schedule_id from ( select a.schedule_id , a.jigyou_id from a left outer join b on a.schedule_id = b.schedule_id ) as sch1, ( select a.schedule_id , a.jigyou_id from a left outer join b on a.schedule_id = b.schedule_id ) as sch2 where sch1.schedule_id != sch2.schedule_id and EXISTS (select sch1.jigyou_id from a where sch1.jigyou_id='aaa') and EXISTS (select sch2.jigyou_id from a where sch2.jigyou_id='aaa')

文字列をバイト単位で取り出したい

$
0
0
PostgreSQL 9.5.2を使用しています。 「ABCde」を先頭5バイト分で「AB」と取り出したいです。 但し、例のように「C」が中途半端に範囲にかかるときは、取り出さないようにしたい のですが、どのようにすれば、可能なのでしょうか。 お忙しい中、申し訳ありませんが、ご教授頂けると助かります。 宜しくお願いいたします。
Viewing all 116 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>