PostgreSQL 9.5.2を使用しています。 「ABCde」を先頭5バイト分で「AB」と取り出したいです。 但し、例のように「C」が中途半端に範囲にかかるときは、取り出さないようにしたい のですが、どのようにすれば、可能なのでしょうか。 お忙しい中、申し訳ありませんが、ご教授頂けると助かります。 宜しくお願いいたします。
↧
文字列をバイト単位で取り出したい
↧
postgresqlのトランザクションについて
開発環境(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できなくなってしまうし。。。 上記のエラーをなくすために どのような対策をすればいいのかアドバイスをお願いいたします!
↧
↧
postgresのストアドファンクションでエラーの
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;
↧
postgresのtimestampの『witho
postgresのtimestampの『without time zone』と『with time zone』の違いを教えてください。 timestamp [ (precision) ] without time zone timestamp [ (precision) ] with time zone PostgreSQL 9.6.1文書を読んでみましたがイマイチ理解できていません。 https://www.postgresql.jp/document/9.6/html/datatype-datetime.html#datatype-datetime-input ざっくり何が違って、どういう用途で使い分けるのか教えてください。
↧
pgAdmin4はまだ使い物になりませんか?
pgAdmin4はまだ使い物になりませんか? postgresql-9.6.2-1-windows-x64.exeをインストールし、pgAdmin4を使ってみました。 日本語化する方法もよくわかりませんでした。 そのまま英語バージョンで使おうとしましたが、動作が遅すぎるし、そのままフリーズする事もしばしば。 右クリックから動かなかったりする機能も多く、結局、pgAdmin IIIを入れました。 取ってきたヤツが悪かったのですか? まだ使い物にならないレベルなのですか?
↧
↧
sudo createdbをnopasswdで実行
sudoをnopasswdで設定しているにも関わらずpostgresユーザーで sudo createdb を行うとパスワードを聞いてきます。 sudo 設定内容 postgres ALL=NOPASSWD: ALL 実際に行ったコマンド -bash-4.1$ sudo -u hogehoge /usr/bin/createdb -U hogehoge -W hogehoge -E UTF-8 -D hogehoge -w [sudo] password for postgres: nopasswdで実行出来れば最終的にcronでの定期実行を考えています。 環境は以下の内容です。 CentOS-6.2-x86_64 PostgreSQL 9.3.16 よろしくお願い致します。
↧
ポスグレで指定した中で最大のレコードを1件取得する
ポスグレで指定した中で最大のレコードを1件取得する方法を教えてください。 下記の項目を持つテーブルがあるとします。 ・部署 ・氏名 ・日付 ・連番 ・内容 KEY(部署,氏名,日付,連番) 部署と氏名を指定した中で直近のレコードを1件だけ取得したいです。 例えば select * from テーブル where 部署 = 値 and 氏名 = 値 order by 日付 desc ,連番 desc で頭の1件を抜ければよいのですが、 limit 1を指定しても、どうやらorder byより先にlimitがかかっているようで、並び替えた後の最初の1件をとれません。 また、 ソート項目が1つだけなら select * from テーブル where 部署 = 値 and 氏名 = 値 and 日付 = (select max(日付) from テーブル t1 where t1.部署 = 値 and t1.氏名 = 値) という事もできますが、 日付が最大の中での連番が最大というのはさらに一手間必要です。 何か良い方法はありませんか? 全件持ってきた後にアプリ側で最初の1件だけ使うのではなく、postgres内で1件にしてアプリ側に渡したいです。
↧
Postgreの日付関数に関して教えてください。
Postgreの日付関数に関して教えてください。 表9.30 日付/時刻関数の例を実行していますが、 make_ で始まる関数がすべて失敗します。 PostgreSQL 9.6.2文書9.9. 日付/時刻関数と演算子 https://www.postgresql.jp/document/9.6/html/functions-datetime.html 表9.30 日付/時刻関数 select age(timestamp '2001-04-10', timestamp '1957-06-13') select age(timestamp '1957-06-13') : : select make_date(2013, 7, 15) select make_interval(days => 10) select make_time(8, 15, 23.5) select make_timestamp(2013, 7, 15, 8, 15, 23.5) select make_timestamptz(2013, 7, 15, 8, 15, 23.5) make_dateの失敗のメッセージ ERROR: function make_date(integer, integer, integer) does not exist LINE 1: select make_date(2013, 7, 15) ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. ********** エラー ********** ERROR: function make_date(integer, integer, integer) does not exist SQLステート:42883 ヒント:No function matches the given name and argument types. You might need to add explicit type casts. 文字:8 何が悪いのでしょうか。
↧
postgresの関数内で変数からの時間の足し算
postgresの関数内で変数からの時間の足し算の仕方を教えてください。 DECLARE result timestamp with time zone; l_minuteinteger := 15; BEGIN result := current_timestamp + '15 minute'; RETURN result; END; このように 直接「 + '15 minute'」を足す方法は分かるのですが、 例えば、上記のユーザー変数l_minuteを使っての足し算がの仕方が分かりません。 よろしくお願いします。
↧
↧
PostgreSqlのinterval型のフォーマ
PostgreSqlのinterval型の項目に"1 day 05:19:00"という値が入っています。 これを29:19という時分で、 もしくは時を単独で29(時間)という数値に変換する方法を教えてください SELECT item1 -- "1 day 05:19:00" , to_char(item1,'HH:MI') -- "05:19" , to_char(item1,'HH24:MI') -- "05:19" , to_char(item1,'HH') -- "05" , to_char(item1,'MI') -- "19" FROM (select '1 day 05:19:00'::interval AS item1) query1
↧
Postgreresqlで「 \ 」が打てない
PostgreresqlのSQLshellで、半角バックスラッシュ(\)を入力すると、アンダースコア( _ )に自動変換されてしまって入力できません。そのため、SQLshellで「\q」などのバックスラッシュを伴うコマンドが認識されません。 ただ、ターミナルやその他のアプリケーション内では、バックスラッシュの入力ができます。つまり、SQLshell内のみで入力ができない状態です。 文字エンコードの問題かなとも思いますが、うまい具合に解決できずに困っています。ご回答宜しくお願いします。 また開発環境は、MacOSでELcapitaを使用し、PostgresSqlは9.6を使用しています。
↧
java からpostgreSQLを操作
java を使ってpostgreSQLを操作しようとしていますができません わかる人がいたら教えてください。 PostgreSQL JDBC Driver をダウンロードして↓ "C:\PostgreSQL\jdbc\postgresql-42.1.4.jar" javaのコードを書いたファイルを保存して↓ "C:\PostgreSQL\java\src\DBConnect1.java" コマンドプロンプトからコンパイルして↓ C:\PostgreSQL\java\src> C:\PostgreSQL\java\jdk\bin\javac DBConnect1.java クラスファイルができて↓ "C:\PostgreSQL\java\src\DBConnect1.class" プログラムを実行すると C:\PostgreSQL\java\jdk\bin\java -cp C:\PostgreSQL\jdbc\*;. DBConnect1 下記のようなエラーメッセージが表示されます↓ . : 用語 'DBConnect1' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されませ ん。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してくだ さい。 発生場所 行:1 文字:60 + C:\PostgreSQL\java\jdk\bin\java -cp C:\PostgreSQL\jdbc\*;. DBConnect1 + ~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (DBConnect1:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException
↧
postgresql primary_key
失礼します。 今回重複データの削除等をしたテーブル 例: ------------------------- id | name | 1 | hoge | 8 | piyo | 12 | temp | ------------------------- このようなserial型でprimary_keyに設定したidの値を1,2,3と振り直したいです。 探してみるともしかしたらそのような事が不可能なのかもと思って投稿しました。 宜しくお願い致します。
↧
↧
SQL カウント 以上 以下
失礼します。現在ある日付の範囲から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 強制的に連番を取得する事は可能?
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で発行する方法はありませんか?
↧
変体仮名を登録したいのですが。
名前に変体仮名を使っている人がいます。エクセルに、その方の名前を入力したいのですがマイクロソフトのIMEには入っていないようです。皆さんはどうやって入力していますか。私のPCはWindows10homeの64ビットです。Unicodeの最新版には入ったと聞いたのですがインストール方法がわかりません。それから、koinnというところからフリーソフトをインストールしようとしたのですが、身代金要求のプログラムが添付されているようで私のセキュリテーイソフトが拒否しました。宜しくお願いします。
↧
DBの全ユーザーテーブルに対するtruncate
PostgreSQLを勉強中の者です。 データベースの全ユーザーテーブルに対して、個別にtruncateをかけるいい方法を探しています。 \pset pager \dt 以上のコマンドを実行して、テーブル一覧を表示できることをはわかったのですが、ここから先の妥当なやり方がわかりません。 リダイレクトして、テキストエディタで加工して、シェルのようなもので流し込む・・・のような形になるのでしょうか? 実例も含めて教えていただけると助かります。 また、truncateされたことの上手い確認方法もあれば御教示下さい。 よろしくお願いします。
↧
↧
postgresql 合計値 PHP
失礼します現在テーブルからあるキーのフィールドの合計値を出していきたいのですがうまくいきません 例 テーブル名(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"; しかしエラーが出てしまいます。どの部分が間違っているのでしょうか? 宜しくお願い致します。
↧
selectでデータの中身を見れない
デスクトップ上にあるCSVファイルのデータをpostgresqlに\copyで取り込んだのですが、取り込んだデータをselectで見ることができません。 「sh: more: command not found」と表示されてしまいます。 そもそもsh:とmore:の意味をネットでも調べたのですが、よく分かりませんでした。command not foundはパスが通っていないらしいと言うのは分かりました。 どうすればcsvで取り込んだデータを見ることができるのか、どなたか教えていただけないでしょうか。
↧
最新日のレコードと合計の抽出
作業テーブル(作業者ID、作業日、作業時間)から、作業者ID毎に指定した作業日のレコード、および作業日を含む月の合計を抽出するSQLを考えております。 DBへのアクセス回数を減らすようにとの事で、1つのSQL文での抽出を検討しておりますが、いまいち上手くいかない状況です。 アドバイスを頂けると非常に助かります。 よろしくお願い致します。
↧