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

select文の書き方で分からないところがあります

$
0
0
どうしても分からないので教えてください。 先人の書いたphpの記述を解析しています。 postgreSQLとやり取りしている部分に、次のようなselect文の記述があります。 select lpad(seq_no,shiyo_keta,'0'),seq_min,seq_max from seqno_info where seq_key='YAMATODENPYO'; 実行すると次のようなエラーがでます。 ERROR: 関数lpad(bigint, smallint, unknown)は存在しません 茵 1: select lpad(seq_no,shiyo_keta,'0'),seq_min,seq_max from seqn... (lpadのあたりに印が付いていましたが、ここではずれるので消してあります。) HINT: 指定名称、指定引数型に合う関数がありません。明示的な型キャストが必要かも しれません テーブルの型は次のようになっています。 \d seqno_info Table "public.seqno_info" Column | Type | Modifiers ------------+----------+----------- seq_key | text | not null seq_no | bigint | seq_min | bigint | seq_max | bigint | shiyo_keta | smallint | 以下がそれぞれに入っているデータです。 select seq_no from seqno_info; seq_no -------- 999 (1 row) select shiyo_keta from seqno_info; shiyo_keta ------------ 3 (1 row) 調べても有力な情報が見当たらず困っています。 どなたか、ご教示ください。

PostgreSQLから外部のSQLServerへ

$
0
0
はじめまして。 現在業務で、PostgreSQLからdblinkを使用してSQLServerを更新しようとしています。 本番用サーバーではFDWが使えない為、dblinkでの接続となりました。 テスト用として、PostgreSQL9.5、SQLServer2000を使用しています。 本番ではPostgreSQL8.3となります。 接続を行うため、下記のクエリを使用しています。 select dblink_connect('conn1','hostaddr=「SQLServerのIP」 port=1433 dbname=「SQLSereverのDB名」 user=「SQLServerのuser名」 password=「SQLServerのパスワード」'); 上記のクエリを実行すると、「ERROR: could not establish connection SQLステート:08001」のエラーが出ます。 dblinkを使用するのが初めてで、ネット上でいろいろと調べたのですが、そもそもの考え方が間違っている可能性も否定できません。 どなたか、お力をお貸しいただければ幸いです。 何卒よろしくお願いいたします。

PostgreSQLのタイムアウトについて

$
0
0
VB.NETとPostgreSQLで社内システムを作っています。 更新クエリを実行すると15秒くらいでタイムアウトしてしまいます。 (エラーコードはメモを持ち帰るのを忘れたため覚えておりません…が、割と急いでいるので質問させて頂いてます) Statement_Timeoutはいじっておらず、値は0のままです。 プロバイダはnpgsqlです。 タイムアウトしないようにするにはどうすればいいでしょうか。 アドバイスお願いいたします。

JavaからのPL/pgSQL関数呼出でエラー

$
0
0
JavaからPL/pgSQLを呼び出そうとして、下記のエラーになります。 "関数sample(integer)は存在しません。" ネットで検索しても解決策が見つかりません。何が悪いのでしょうか。 EclipseでJavaプロジェクトを作成し、srcフォルダにjavaとsqlを置きました。 (javaのパッケージはデフォルトに設定) CREATE FUNCTION sample(in_num integer) RETURNS integer AS $$ DECLARE out_num integer := in_num; BEGIN RAISE NOTICE 'num is %', out_num; RETURN out_num; RND $$ LANGUAGE plpgsql; public void plsql() throws Exception { String sql = "{? = call sample(?)}"; cst = cn.prepareCall(sql); cst.registerOutParameter(1,Type.INTEGER); cst.setInt(2,777); cst.executeUpdate();←ここでエラーになる } データベースへの接続、およびテーブルの検索(select)は正常に動作しています。

VPSにpostgresインストールで気を付ける事

$
0
0
VPSのLinuxにpostgresqlをインストールする上でセキュリティ上で気を付ける事を教えて下さい。 postgresqlの環境をセットアップしたくて、レンタルVPSの無料期間を利用し試しに構築してみました。 すると、僅か数時間で乗っ取られ、サーバーの管理者から連絡があり、サーバーを止められました。 VPSのOSはLinuxでした。 VPS上のpostgresqlをインストールして、DBやテーブルを作り、pgadmin3でPCから弄ったり、 ダンプを取ったり、取ったダンプをリストアしたり、 firewallを起動させて使えなくしたり、 firewallにpostgresqlの通信を許可したり、 環境構築を一通りやってそのまま放置したところ、翌日には乗っ取られていてサーバーを止められました。 原因は、postgresqlをインストールすると生成されるlinuxユーザー(postgres)のパスワードが脆弱だった事です。 いろんな操作を試したかっただけなので、パスワードはテキトーでした。 postgresとか、passwordとかそういう類のパスワードでした。 容易に推測され、 sshでログインされ、 postgresでパイソンで作ったマルウェアをインストールされ、 cronにマルウェアを起動するスケジュールを組まれていました。 linuxユーザーのpostgres、ロールのpostgresともに複雑なパスワードにしなければ速攻でやられる事は分かりました。 そもそも、postgresユーザーで直接ログインする必要もないので、nologinにしといた方が良いのでしょうか? それ以外を含め、セキュリティ上で気を付けるべき事を教えて下さい。 なお、この質問は「VPSなど外部サーバーのLinuxにpostgresqlをインストールする上で」に限定しています。

postgresql-CSV生成時の文字化け

$
0
0
お世話になります。 実行環境:  OS:Win8.1 64bit  PostgreSQLのバージョン:9.5.3-1  client_encoding:SJIS  データベースエンコーディング:EUC_JP C C 以上のような環境でローカルフォルダにCSVを出力することを 考えていますが、ファイル名に日本語が含まれるCSVを出力 すると文字化けします。 正常なケース:  COPY (select * from db) TO 'D:\pos\hoge.csv' (FORMAT csv); 異常なケース:  COPY (select * from db) TO 'D:\pos\ほげほげ.csv' (FORMAT csv);  →ファイル名が文字化け。   ただし、レコードの中身は文字化けせず出力できている。 文字化けせずに日本語ファイルを出力できるのが理想です。 対処法はありますでしょうか? --そもそもCOPYコマンドのファイル名のエンコードはどこで設定するのでしょうか?

自動採番について

$
0
0
お世話になります。 データベースのシーケンスによるシリアル型について質問があります。 例えば下記のような商品テーブルがあるとします。 ・商品コード ・商品名 ・価格 ・備考 ※商品コードは重複しない値(一意)を格納。 このようなマスタを作成する際にシーケンスによるシリアル型による自動採番のフィールドを指定した方がいいのでしょうか。またシーケンスによるシリアル型をどのような場合に使うのが一般的なのでしょうか。 大変、お手数をお掛けしますが説明していただけませんでしょうか。 くだらない質問ですみませんが宜しくお願いします。

PostgresqlのILIKEについて

$
0
0
現在、PostgresqlのILIKEを用いて、あるDBに検索をかけています、 半角英字の場合は検索でうまくいくのですが、全角文字で検索をかけるとILIKEでうまく検索をかけてくれません。(動作がLIKEと同じ)。 他のDBだとILIKEは使えるのですが、検索をしたいDBではILIKEがつかえません。 これはDBのロケールの問題なのでしょうか? 大変お手数ですが、ご教授お願い致します。 検索対象DBのロケール:C Postgresqlのバージョン:9.3.13

大容量のCSVファイルをインポートするには。

$
0
0
お世話になります。 Windows版のPostgreSQLをインストールしてCSVファイルを読み込ませようとしていますが途中でエラーが発生してしまい困っています。 取り込んでいるCSVファイルの件数は約65万件です。 その際に実行している下記のコマンドは以下の通りです。 SET client_encoding TO 'SJIS'; COPY T_SAMPLE FROM 'C:\test.csv' WITH CSV; また途中で発生したエラーの内容は以下の通りです。 ERROR: メモリ不足です DETAIL: 1073708532バイトを持つ文字列バッファを65534バイト多く、大きくすることができません。 CONTEXT: T_SAMPLEのCOPY。行番号 231916 どのようにしたら大容量のCSVファイルをデータベースにインポートする事ができるのでしょうか。 大変、申し訳ありませんがどうか私を助けて下さい。 些細な事でも何でも構いませんのでアドバイスいただけませんでしょうか。 私の環境のOSは「Windows Vista Ultimate」でPostgreSQLは「PostgreSQL 9.5.4」です。 何卒、宜しくお願いします。では、失礼します。

postgreSQLでデータベースへ権限付与

$
0
0
テーブル単位でなく、データベースに対して権限を付与したい場合は、どのようなコマンドをたたけば良いでしょうか

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 どうか、お助け下さい。よろしくお願いします。

複数のテーブルから登録順にデータ取得

$
0
0
複数のテーブルから登録順にデータ取得なんてことできるのでしょうか? table_A A_id int A_time timestamp A_title text table_B B_id int B_time timestamp B_title text とtable_A table_Bにデータが存在するときに AB関係なく A_titleもしくはB_title を登録順のA_timeもしくはB_time 順に10個とかSQL一発でかけるのでしょうか? そもそもこのような作りにするな!ということでしょうが・・・

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

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

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

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

SQLの結合

$
0
0
以下のようなSQLがあるのですが、検証できる環境もなく机上でどうなるのか見ているのですが、結果がイメージできず質問させていただきます。 data1テーブル上のnumberもcntも数値です。cntは何等か集計された値です。 SELECT id, name, country, size, model FROM data1 WHERE cnt % 2 = 0 OR number != cnt UNION ALL SELECT a.id, b.name, b.country, b.size, b.model FROM (SELECT * FROM data1 WHERE cnt % 2 = 0 OR number != cnt ) a INNER JOIN (SELECT * FROM data1 WHERE cnt % 2 = 0 OR number != cnt ) b ON a.number = b.number - 1 AND a.country = b.country AND a.size = b.size AND a.model = b.model WHERE a.number % 2 != 0 GROUP BY a.id, b.name, b.country, b.size, b.model UNION ALL以降の部分ですが、内部結合の条件からすると「a.number = b.number - 1」は何を意味しているのでしょうか? data1テーブルを何度も複雑に結合しているのですが、UNION ALLからすると無理やり結合してデータを追加で得ようとしているのですが・・・

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できなくなってしまうし。。。 上記のエラーをなくすために どのような対策をすればいいのかアドバイスをお願いいたします!

レコードをdrop後のデータファイル内データ

$
0
0
基本的な質問です。 postgresql9であるレコードをdrop後にバキュームを行ないましたが データファイル({postgres_homedir}/data/base/oid/テーブルNo)でdropしたレコードの文字列が残っています。 ここからも消したいのですがどうしたら消えますか?

PostgreSqlのレプリケーションができません

$
0
0
はじめまして。 現在、Windows7を2台用意し、PostgreSql9.3.9を用いて、レプリケーション(メモリ同期)を行おうとしています。 設定は、個人サイト様の情報を参考しながら行い、マスターを起動した後、スレーブを起動した際に接続ができないログが出力されてしまいました。 マスターログ -------------- 2017-01-12 09:08:30 JST LOG: クライアントからデータを受信できませんでした: No connection could be made because the target machine actively refused it. 2017-01-12 09:08:30 JST LOG: スタンバイ接続で想定外のEOFがありました -------------- スレーブログ -------------- 2017-01-12 09:08:21 JST LOG: スタンバイモードに入ります 2017-01-12 09:08:21 JST LOG: 0/5C000028のREDOを開始します 2017-01-12 09:08:21 JST LOG: 0/5C0000F0 でリカバリー状態の整合が取れました 2017-01-12 09:08:21 JST LOG: データベースシステムはリードオンリー接続の受付準備ができました 2017-01-12 09:08:22 JST LOG: プライマリのタイムライン1の 0/5D000000からでWALストリーミングを始めます 2017-01-12 09:08:22 JST LOG: 統計情報収集プロセス (PID 8868)は例外C000013Aで終了しました 2017-01-12 09:08:22 JST ヒント: 16進値の説明についてはC インクルードファイル"ntstatus.h"を参照してください。 2017-01-12 09:08:22 JST LOG: バックグランドライタプロセス (PID 6124)は例外C000013Aで終了しました 2017-01-12 09:08:22 JST ヒント: 16進値の説明についてはC インクルードファイル"ntstatus.h"を参照してください。 2017-01-12 09:08:22 JST LOG: 他の活動中のサーバプロセスを終了しています -------------- 設定は、 マスター側 postgresql.conf -------------- wal_level = hot_standby synchronous_commit = remote_write max_wal_senders = 2 synchronous_standby_names = 'slave1' -------------- pg_hba.conf -------------- host replication repl_user 192.168.1.xxx/24 md5 -------------- スレーブ側 postgresql.conf -------------- hot_standby = on -------------- recovery.conf -------------- standby_mode = 'on' primary_conninfo = 'host=192.168.1.xxx port=5432 user=repl_user password=password application_name=slave1' -------------- 作業した順番は、 1.マスターの設定 2.マスターの起動 3.スレーブへマスタのベースバックアップ 4.スレーブの設定 5.スレーブの起動 です。 3の後にパーミッションの設定をコマンドライン cacls "C:\Program Files\PostgreSQL\9.3\data" /E /T /C /G xxxxxxx:F で行っています。 ※スレーブ起動時にこれを行わないと「Permission denied」が発生してしまったため また、マスター、スレーブのPostgreSql/9.3のフォルダは共有を行い、権限をフルコントロールとしています。 PostgreSql初心者のため、設定自体、いろいろと間違っているかもしれません。 何卒、ご教授をお願い致します。

レコードをdrop後のデータファイル内データ

$
0
0
基本的な質問です。 postgresql9であるレコードをdrop後にバキュームを行ないましたが データファイル({postgres_homedir}/data/base/oid/テーブルNo)でdropしたレコードの文字列が残っています。 ここからも消したいのですがどうしたら消えますか?

postgresのストアドファンクションでエラーの

$
0
0
postgresのストアドファンクションでエラーの拾い方を教えてください。 insertして重複したらアップデートに切り替えるというサンプルをよく見かけます。 DECLARE BEGIN insert文 RETURN TRUE; EXCEPTION WHEN unique_violation THEN update文 END; それと同じノリで、何かしらのエラーがあった時に、 『RETURN FALSE;』するか、もしくはエラーコードをそのまま拾って返すというようなサンプルが欲しいです。 DECLARE BEGIN 何かしらのSQL RETURN TRUE; EXCEPTION WHEN すべてのエラー THEN RETURN FALSE; END; DECLARE BEGIN 何かしらのSQL RETURN TRUE; EXCEPTION WHEN すべてのエラー THEN RETURN エラーコード; END;
Viewing all 116 articles
Browse latest View live


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