PostgreSQL Part.11©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
VBやPHPに例えられても嬉しくないなぁ
レンタルサーバで使えない問題は Heroku Postgres で多少はマシになったか アメリカなんかじゃ昔からMySQLの方が人気があって、Postgresが人気あるのは日本くらい。 アメリカ人はバカだからMyISAM速えええええええええつって喜んでただけやで
それもずいぶん昔の話やw 一説にはWindowsで動かせたからとも言われてるな。
日本でフリーDBMSが導入され始めた頃はPostgres7.0が出る頃だったから
MySQLじゃなくてトランザクションをまともに使えるPostgresの方に流れたとも。
ヒゲががんばって布教したってのもあるんだろうけど。 まぁ 普通の開発者、ユーザーから見れば普通に使えれば
それほど最新技術はなくてもぉ とは思うんじゃないの? PostgreSQL使い始めた頃はMySQLはサブクエリ使えなかったからなあ MySQLはデータベースとして当然備えてる機能を備えてないんだよ
商用データベースから来た人にはおもちゃにすら見えない UberがPostgreSQLからMySQLへ移行した経緯の記事と
それへの反論は興味深かった 俺のとこではmaxでも10リクエスト/sec程度なんで、あんま参考にはならなかったな いままでPostgreSQLで、ごく最近Oracle使い始めたけど、
Oracleって糞だなって思うこと多い。
Oracleをよく知らないせいだとは思うけど。
業務系、Webシステムなどでは、PostgreSQLで何も問題なし! 普通に使う分はもちろん、バックアップもフェールセーフも問題ないよね。
マテリアライズドビューなんて使った事もないし。 だからボラクルはサポートで金とってんだっつってんだろ >>113
最近は差を詰めてきてるよね
とはいえ大規模になればまだまだOracle
>>114
PostgreSQLにも一応マテリアライズドビューあるでしょ
>>115
金払わないとパッチすらくれず、払っててもバグ修正してくれないけどな >>116
>金払わないとパッチすらくれず、払っててもバグ修正してくれないけどな
何その塩対応 >>116
ポスグレのそれを使った事ないって意味ですよ。
Orackeの現場では頻繁に聞こえますね。でも結構トラブッてるようなw バグが修正されてユーザのコードが動かなくなったとき
危険なコードを書くのが悪いと言われるのがPostgres
専用の互換性パッチの見積もりをくれるのがOracle >>119
なるほど
ボラクル体質をとても明快に理解できた
そんでもってどっちがまともかは言わずもがなだな バージョンあがって動かなくなるなら、バージョンあげないだけだよ
そもそも特に困ってないのにバージョンあげるわけないだろう
ミドルウェアのバージョンが変わるなんて、5年ごとのリプレースだけだよ そのバグ修正の内容がセキュリティ脆弱性の改善でなければな データベースサーバにセキュリティパッチあてるわけないだろ (データベースサーバはインターネッツに公開なんかしないんだから、セキュリティパッチあてる必要もないだろ)
ということかな OSのパッチなのかRDBMSのパッチなのかでもかわってくるw おまえらPostgreSQLにセキュリティのためにパッチなんて当てたことあるの?
UPSERT使いたいからバージョンあげるとかだったらあるかもだけど
セキュリティなんて考えたこともない >>139
・パラレルクエリ
・同期レプリケーション / シャーディング (postgres_fdw)
・全文テキスト検索 (たぶん日本語はダメ)
って感じ?
結構なパワフルユーザ向けだな。まぁ基本はやり尽くしているんだろうけど どうしてPostgreSQLって本屋さんに本が全然ないんですか?
MySQLはたくさんあるのに 最新のシーラカンス本の対応バージョンは8くらいだったっけ? CTEやCONFLICTについてがっつり書いてるような本が欲しい となるとやっぱ最新マニュアルしかないわなぁw
そこそこ良く書けてるしわかり易いと思う。 おすすめの記事ってどこかある?
ブロガーさんやニュースサイトでも何でも
PostgreSQLについて情報が集まるようなとこ探してる さあ、みんな今こそ売り込みの絶好のタイミング
自社のURLを貼るんだ エセ左翼の目的は、わざと突っ込みどころが多い主張をすることで自分たちへ注意を向けさせ、
カルトへ向かう非難の矛先を逸らすこと。
国益に反することを言ったり、主張が食い違うもの同士の対立を煽ろうとするので放置し難いが、
主義思想についての洗脳を受けているわけではなく、フリをしているだけなので、
言い負かされてもダメージを負った様子もなく、論点をすり替えられるかスルーされる。
まともに相手をしてはならない。 pgAdmin3 は日本語で使ってるとなんかのコマンドが日本語で流れてエラーになった記憶があるので、それ以来ずっと英語で使ってる 来週末のPGConf.Asia、みんなは行くかい?
http://www.pgconf.asia/JP/ PostgreSQLって、OrderByを書かないと・・・・
毎回違う並び順になるの?
それとも、PrimaryKey順になるの? 不定だわな。たとえ何かの順に並んでたとしても信用出来ない。 >>162
一々ソーティングしなくていいから少しでも速く、省メモリで結果返して欲しいって時に勝手にソーティングされたら寧ろ迷惑だと思わないかい?
ソーティングは通常ではなくオプションとすべきだ 不定だけど、大体はINSERTした順になることが多い
UPDATEしたりするとそれが最後になったりするので
id順とはいえない
もちろん出てくる順番を当てにしちゃいけないw で、なんでそんな物理的事情で並んだ順で返すのかって言ったら、『一々ソーティングしなくていいから少しでも速く、省メモリで結果返して欲しいって時に勝手にソーティングされたら寧ろ迷惑だろ、ソーティングは通常ではなくオプションとすべきだ』ってことでないの? >>170
クラスタ化インデックスだとpk順になる。 >>170
そんなのどんなRDBMSでも同じで、実装を考えれば、そうなるだろうが。 >>171
違う。RDBのレコードはソート指定をしないかぎり不定というのが標準SQLでの仕様だから。 PHP+PostgreSQLで運用する場合、元号の処理ってどうしてる?
自分でしか使わないシステムなので、極力西暦で通すか、どうしても必要な場合は1988引いてるけど(基本的に昭和のデータは扱わない)、今度の改元がなぁ >>176
データベースだというのに西暦→和暦マスタテーブルを作ろうという発想がないことに驚く >>176
昭和99年とかの特殊な要件がなければ内部は西暦、外部とのやり取り時に変換が普通かと >>176
表示なり入力なりエンドユーザに一番近いところで変換したいな
そもそも元号という「汚い」ものを可能な限り扱いたくないし、
Postgres用の変換はおそらく自作が必要だが、PHPやJS用なら適当に拾ってこれるから >>177
マスタテーブルだけで変換しようとすると、年の途中での改元に対応しないといけないんで、1日あたり1レコード要るんじゃね?
100年で36,525か36,524になっちゃう >>180
アホくさ。なんで年号が変わらない部分の日の単位でデータを持つんだよ。
それじゃあ自分の生年月日を書くのに今日からさかのぼって一日ごとに列挙して書くようなもんだろw 明治:1868-01-25 〜 1912-07-29
大正:1912-07-30 〜 1926-12-24
昭和:1926-12-25 〜 1989-01-07
平成:1989-01-08 〜
これをどうUIに反映するかは、各自の考え方だろう。 インデックスについて教えてください。
調べましたが「検索が早くなる場合もあるらしい」くらいしか分かりませんでした。
・ インデックスは作成するだけでよいのか?
検索時に作成したインデックスを指定したりしなくてよいのか。
調べた限り指定する方法がなかったため、作成するだけで効果があるように見えた。
・ REINDEXでのロック時の挙動
インデックスがロックされると聞いた。
インデックスがロックされるだけで検索自体は可能なのか。
・ とりあえずインデックスを作成しておけばよいのか?
インデックスがそんなに便利なものなら、ハードディスクの容量が許す限り、
検索しそうなものは片っ端からインデックスを作成しておけばよいのか。 >>186
> ・ インデックスは作成するだけでよいのか?
はい。
インデックスを使った方が検索コストが低い場合は、自動的に使われます。
> ・ REINDEXでのロック時の挙動
> インデックスがロックされるだけで検索自体は可能なのか。
いいえ。検索もブロックされます。
通常はreindexする必要はありません。
将来、reindexが必要だと感じたら(容量が増大したなどの場合)、どう対処するのが
良いか検索するとよいです。
> ・ とりあえずインデックスを作成しておけばよいのか?
いいえ。
インデックスがあるということは、INSERT/DELETEのときにデータ本体だけでなく
インデックスそのものも更新する必要があります。
単純に言えば、処理時間が増えるということです。
不要なインデックスは生成しないようにするのが良いです。 日本語扱うならencodeはCだろって言う人を結構見る気がしますが、なぜutf8じゃ駄目なんでしょうか? 例えばこの人
http://soudai1025.blogspot.jp/2015/03/postgresqlunicode-6.html
> なお、検証した環境のPostgreSQLのlocale指定はC(nolocale)としています。
> (日本語を扱う場合はほとんどの場合はCを指定するでしょうし) えっ・・・
今まで作ったシステム、全部utf8にしてきてしもうた・・・ encodeとlocaleは別だぞ。
encode=utf8 かつ locale=C が推奨なのはよく見る。
Linux (glibc) はlocaleの実装をサボっているので、C以外に設定しても性能が落ちるだけで何の利点もない。
Windowsなら文字列の比較やソートに差が出るので、用途に適して選べばいい。 initdb --encoding=UTF8 --no-locale ←これが基本かなと >>193
Linuxでも当然ながら差が出る。
なぜなら、文字コードは辞書順には並んでないから。 >>196
どんな文字コードでも漢字の並び順は、日本人が見ても意味のある順番になってないからな。 >>196
Linuxもまともになったのか?
昔使ったときはlocale=ja系でも変わらず文字コード順に並べられたんだが >>198
「辞書順」の正しい定義を知らないけど、少なくとも文字コード順には並ばないよ。
create table foo(s text)に、漢数字の'一'から'九'をインサートし、以下のクエリを実行。
select array_agg(s) from (select s from foo order by s) as t;
locale=C -> {一,七,三,九,二,五,八,六,四} -- 文字コード順
locale=ja_JP.UTF-8 -> {一,九,五,三,四,七,二,八,六} -- 辞書(?)順 文字コード順でも辞書順でも、それを正解とするかどうかは要件次第。
ちなみに漢数字は、訓読み順で並んでいる。 >>199
理解した。Linuxでも順序は変わるね。
ひらがな/カタカナの濁/半濁の扱いは今でも差があるようだ。設計思想?互換性?
msvcrt: ハはバばパぱ
glibc : はばぱハバパ
環境依存が怖い。要件次第だが、自前で「ふりがな」列を用意したほうがマシだな。 他人に公開する予定の無い、自分専用のwebサイトを作る場合でもSQLインジェクション対策はしておいた方がいいよね?
クラスを転用するときに問題になるし、悪意が無くてもエラーのもとだし >>203
言語によるけど今時パラメータクエリぐらいは使えるだろうから普通にパラメータクエリでやるわな
あとから見てもその方がわかりやすいし >>205
PHPで言えば、pg_query_params()とか? phpって対策されていないやつ
非推奨じゃなかったっけ
おいらはPDOでやってるかな ぽすとぐれすきゅーえる
ぽすとぐれすえすきゅーえる TIMESTAMP (WITHOUT TIMEZONE)とCURRENT_TIMESTAMPについて教えてください。
INSERTにてCURRENT_TIMESTAMPで入れたあと、SELECTで取り出すと日本時間になっています。
どの時点で日本時間になっているのでしょうか?
1. CURRENT_TIMESTAMPの時点ではJSTだが、INSERTするときにJSTがUTCに変換されて保存され、
SELECTで取り出すときにシステムの時刻を見て+0900されている
2. CURRENT_TIMESTAMPの時点ではJSTで取得されるが、
元々これにタイムゾーンのデータはなく、そのまま保存され、
SELECTで取り出すときは同じシステム時刻を使ってるからたまたま同じタイムゾーンとして取得されている
3. CURRENT_TIMESTAMPの時点ではUTCで取得され、保存もUTCだが
SELECTで取り出すときはシステム時刻を参照して勝手にJSTにしている
4. その他の未知の仕組み >>210
http://www.postgresql.jp/document/current/html/datatype-datetime.html
> 通常timestamp without time zoneの値はtimezoneのローカル時間としてみなされる
とあるから、言葉通りだとするなら:
・INSERTするときに時刻の値だけを保存する (+0900を無視)
・SELECTするときに現在のタイムゾーン扱い (+0900を追加)
SET TIMEZONE TOしながら試してみれば検証できるかも >>210
まず前提として、without time zoneをselectした結果にはtime zone情報はないのだから、UTCもJSTもない。
次にcurrent_timestampは、tz情報付きのデータ。
それをwithout time zone絡むにインサートすると、tz情報は切り捨てられる。(たとえば、"2017-05-12 18:00:00")
そのデータを、日本で取得しようがアメリカで取得しようが、tz情報なしの"2017-05-12 18:00:00"が取得される。
つまり、アメリカで取得した人は、現地時間の"2017-05-12 18:00:00"だと見えるということ。 >>211-212
ありがとうございます。
世界向けのSNSを作ろうとしたのですが、これがネックで
時間部分の設計ができない状態でした。
助かります。 お世話になります。
psql で database ごとに history を分けて表示したい (\s) のですが、
(他の databae の history を表示したくない)
どうやったらいいのでしょうか?
よろしくお願いします。 historyって、homeの .psql_history 出してるだけだからなあ
db切り替えるたびにリネームするとか? ああ、そういう仕組みなんですね。
複数の database をそれぞれ別々に psql で開いたりしてるんですけど、じゃぁ、全然無理ですね。
わかりました、ありがとうございました。 >>217
そのものズバリですね♪
ありがとうございます。
おかげで、.psqlrc っていう設定ファイルのことも知りました。
PostgreSQL の Documentation にありますね。
かさねがさねありがとうございました。 拡張を使った場合、メジャーバージョンが変わるときのアップグレードで使えなくなったり作業が増えたりするのでしょうか?
スキーマのバージョンが変わっている拡張があったら何かしないといけないとか? >>221
> 30分単位とかで時間を丸めてくれる関数ないですか
自作すれば? トリガのデバッグってどうやってますか?
初めてトリガ関数作ります >>224
普通に、クエリ後、関連データを取得してassert >>225
ASSERT文、調べました。
そういうのがあるんですね♪
ありがとうございました >>226
たぶん勘違いしてる
クライアントコードを実装する、JavaとかPHPとかのプログラミング言語で普通にチェックしろってこと
IDEでステップ実行とかできないからね >>227
> クライアントコードを実装する、JavaとかPHPとかのプログラミング言語で普通にチェックしろってこと
そうなの?
それなら俺も勘違いしてたわ。 ASSERTがどうのってのはPL/pgSQLの機能でしょ
https://www.postgresql.jp/document/current/html/plpgsql-errors-and-messages.html
トリガ関数をどの言語で作るかにもよるけど
たいていはサーバーログにメッセージを書き出す、いわゆるprintfデバッグになるのでは そう思う。自立型トランザクションを使えばログ表に対するcommitを必ずしながら
トリガー本来の処理ではrollback等もできる。多分10g以降の機能で9iでは不可。 >>229
普通にデータベースにアクセスするメソッドをテストする方法と同じだよ。
確認する項目が、トリガーが変更したデータも対象になるってだけで。
普通にデータベースにアクセスするメソッドをテストするときもprintfデバッグしてたら、
トリガーのテストもそうなるだろうけど、普通はコードで確認するんじゃないか? ゴメン。Oracleと勘違いしてた。>>230 は無視して >>231
トリガだと「普通のアクセス」とはデバッグ方法が違いそう、ってのが質問の意図じゃないの?
それを「同じだよ」で済ませるのは会話が噛み合っていない感がある
トリガの内部で何が起きているかのデバッグにはprintf程度しか道具が無いんじゃないかな?
トリガの結果が適切かを確認するにはテストコードを使うのはわかる 日本語メッセージでGSSAPIがGSSAIになっちゃってるところがある >>233
> トリガの内部で何が起きているかのデバッグにはprintf程度しか道具が無いんじゃないかな?
内部が正しいと確信が持てるだけのテストをすればいいだけ。
てか、トリガーのコードじゃなくて、ホストプログラムのコードだってそうだろ?
まぁ、途中で変数の中身を見ないと、なにが行われているのかわかれないスキルレベルだったら話は違うが。 >>235
ホワイトボックステストも知らないなら絡んでくるなよ >>236
いや、ホワイトボックステストの話をしてるつもりだが。
TDDはホワイトボックステストだが、やることは、
・前提条件を作る
・テスト対象のメソッドを呼ぶ
・結果を確認する
を、自分の確証が持てるまでやる。
トリガーをテストする場合も同じ。
トリガーをキックするメソッドを呼び出すか、あるいは直接INSERT/UPDATE/DELETEを実行し、
トリガーが変更した内容を、実際にデータを取得してassertする。
C0カバレッジで満足できるならそこでやめる。
確証が持てないなら、C1カバレッジになるようなテストを追加する。 >>237
テストのやり方はそれでいいけど、テストが失敗してなおかつ原因がよくわからないときの話じゃないかな
そういうときは、raise noticeがやっぱり最強だと思う トリガーはいいとして、複雑なクエリのデバッグはどうやるつもりなんだろうか
それこそ、printfも使えない >>237
背伸びしすぎ
> TDDはホワイトボックステストだが
TDD の話なんて誰もしてない
最近知って話したくてしょうがないのか? w
そもそも TDD はコードを作る前にテストケースを作るからホワイトボックステストにはならない
むしろ仕様からテストケースを作るのでテストケースの作り方としてはブラックボックステストに近い
> ・前提条件を作る
> ・テスト対象のメソッドを呼ぶ
> ・結果を確認する
その前提条件の作り方の話だぞ
> を、自分の確証が持てるまでやる。
違う、ホワイトボックステストでは内部のコードを考慮してテスト条件を作るんだよ
それがわかってないから
> トリガーをキックするメソッドを呼び出すか、あるいは直接INSERT/UPDATE/DELETEを実行し、
> トリガーが変更した内容を、実際にデータを取得してassertする。
なんてアホなことを言い出す IPAのデータベーススペシャリスト持ってない奴は書き込むなよ デバッグしたいと言ってるやつの目的がわからない。
テストと混同しているみたいでやばそうだな。 >>241
TDDのわかってない奴と議論しても時間の無駄なんで、これでも読んで。
https://ja.wikipedia.org/wiki/%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA
> 違う、ホワイトボックステストでは内部のコードを考慮してテスト条件を作るんだよ
C0, C1カバレッジの意味わかってるか?
それを網羅しなければ自信がもてない場合は、それをカバーするテストを納得できるまで追加するんだよ。 >>241
つか、お前、データベースアクセスを含むクラス・メソッドの単体レベルのテストはやってるのか?
やってるとしたら、どうやってんだ?
テストコード書いてるなら、トリガーがあろうとなかろうと関係ないことは自明だろ。 plpgsqlは実行しないとtypoなんかがわからないので、c0必須 >>247
これな
存在しないシンボル名使ってたら、CREATEでエラーにしてくれって話だ raise notice方法の良くないところは、リリース時にそれを削除する必要があること
トリガーをダンプしてバージョン管理とかしてると、ただそれだけでリビジョンが進む
そして、それを忘れやすい データベース内で完結するテスト方法は苦行なんで、
普通にプログラムからクエリを実行してテストしたほうがいいよ >>245
Wikipedia なんて底が浅すぎ w
コードを見てテストケースを作るなんて書いてないだろ?
C0, C1 は結果の話
根本的に理解してないのがバレバレだぞ w
>>246
それトリガーの話じゃないだろ
まあ必死だな、ってだけ言っとくよ w >>252
あ、「クエリを発行して」の言いまちがいね >>253
発行も実行も普通は同じ意味で使われる。 データベースに詳しくないのが、何かの言語と結合してテストするようなのとを言ってるけど、それおかしいから。
データベース軽視なんだろうな。 もともとトリガのテストがしたいという話だが、トリガとトリガが呼び出す関数をいきなり一緒にテストしようとしているのが間違い。
関数は関数でテストして、トリガはトリガがテストして、結合テストはデータのIN/OUTで確認すればいいだけ。
データ観点のテストをあまりしないやつらはかなりいるが、とんでもないから無視した方がいい。 トリガープロシージャって普通の関数として単体で実行できるんだっけ?
やったことないけど、OLDとかNEWとかどう与えるんだろう。 >>257
Oracleのトリガーと混同してたわ。トリガ関数に普通の関数を呼び出すようにしてないとできないな。 >>254
いや全然意味違うけどw
始めて本当に日本語勉強した方がいい人見つけたw >>256
> トリガープロシージャって普通の関数として単体で実行できるんだっけ?
>>237でも言ったが、トリガー関数単体では実行できないので、トリガーのみをテストしたいなら、
INSERT/DELETE/UPDATEを実行して結果を確かめれば良い。
USERSテーブルにINSERTすると、どこかのテーブルのユーザ数合計がトリガーで更新されるとき、
function testUserCountSucc()
{
prevCount = getPrevUserCount();
db->execute("INSERT INTO USERS ...");
currCount = getPrevUserCount();
assertEquals(prevCount + 1, currCount);
}
自分がそのトリガーを実装する場合は、トリガー内のIFやFORがどういう条件でどうなるかは
わかるはずなので、C0カバレッジになるようにテストケースを増やせば良い。
「ユーザを追加するとユーザ数合計が更新される」というのが、ホストコードで実装されるのか
トリガーで実装されるのかを「実装詳細」と考えるなら、実は上のやり方は好ましくない。
Users::Add()をテストするどこかで、ユーザ数合計が更新されているassertionを追加したほうが良い。 s/getPrevUserCount/getUserCount/ なんかもっといろいろ間違ってた。
最初のアンカーは、256じゃなくて>>257
> C0カバレッジ
↓
> C0カバレッジ100% >>256
どういう意味で結合テストっていってるのかしらんけど、単体テストでもデータのIN/OUTで確認するだろ 「発行」するのは人またはプログラム、「実行」するのはRDBMS、という原理主義者なのか? >>265
そういうことじゃなくて、俺謎理論だと思うよ >>255
DB内で完結するテスト例:http://pgtap.org/
苦行
あえて選ぶなら止めないが >>268
・普通のプログラムでは簡単に書ける「共通処理」が書きづらい
→ まぁ、functionで実装していけばいいが、以下の考慮が必要になる
・テストを変更するのにいちいちmigrationが必要
・テストはテスト対象と同一データベース内におく必要がある
・故に、CIでテストしようとすると全員のテストを一つのDBに入れる必要がある
・そうすると、他人とシンボル名が重複しないようにするなどの配慮が必要だとわかる
・スキーマで分割すればいいじゃんとか思う
・グダる
普通にコードで書くのが楽よ >>269
コードって別の言語だし、ユーザー、スキーマは結合テストレベルでは本番環境に無理に合わせない。
なんでいきなりシステムテストレベルで確認しようとするのか?
まあ小さいパッケージやWebサイト屋だとそういうテストをする会社や人間が存在するのは知っているが。 >>270
ちょっと言ってる意味がわからない。
例えばトリガーを単発でテストする方法は>>261に書いたとおり。
ユニットテストレベルの話をしてるのだが。 >>270
数千人月以上のメガプロジェクトの五次請けさん、お疲れっす pl/pgsqlの、お勧めの入門書ってありますか?
ネットである程度調べられるけど、できれば体系的に学びたいのので >>272
いろいろあなたがずさんなのはいいけど、回答するような立場ではないことは自覚した方がいい。 >>276
>>270の方が回答するレベルでも立場でもないわなぁ
あと、>>270のいうシステムテストレベルって何だよ? コード書けないし、>>261レベルのコードでも何やってるかわかんなくてぐだぐだいってるんだろ >>279
最近のレスでは、君が一番ピントずれてるよ 結局、どうやってテストするかって>>261以外誰も示せてないな >>279
で、君のところではどうやってテストしてるの? あれかな、Excelの定型処理を自動化しようとしてマクロ書いたら怒られた的な話? つか、SIerが仕切る大規模開発で、トリガーが許されるケースなんかあるのか?
トリガーはおろか、ストアドすら許されたことがないんだが。 >>284
そのシステム開発プロジェクトのポリシーだろうけど、理由の一つはプロジェクトメンバーのレベルがあらゆる面で低い、もう一つはデータベースがよくわからなくて上がトリガやストアドファンクションを禁止しているパターン。
こういうそれなりに大きいプロジェクトは総じてクソでうまくいかない。 >>282
データとSQLを用意してトリガーを動かして実行前と実行後を比較する。
なんでこんなあたりまえのことを言われなきゃわからないのか? >>285
最も大きい理由は、大抵データベース設計チームが独立していて、そこが物理設計まで行い、
パフォーマンスの責任まで負うから。
次に大きい理由は、スキーマの変更手順が決まっていて、製造工程中に変更とか無理だから。
その次は、大抵大きなプロジェクトでは、データベースをデータストアとしてしか使わないから。 >>286
> データとSQLを用意してトリガーを動かして実行前と実行後を比較する。
それマニュアルでやるの大変でしょ?
>>261みたいにテスト書いとけば、CI/CDにも組み込めるよ。
別にマニュアルでやるのは否定しないが、だからといって>>261を否定するのはおかしいよ。 >>286
それ、>>237と同じじゃんw
>>237を否定してたように見えたが、そうじゃないなら何と戦ってるの? クエリを発行する手段としてホストコードを使うよ、
単体テストレベルの話ならユニットテストツールも使えるよってだけなんだけど、
> 何かの言語と結合して
> コードって別の言語だし
というメンタリティの持ち主なので、話が全然噛み合わない >>290
あなたみたいにこういうのがテストだと思っているから話がおかしくなる。
単にデータベースを使いこなせないことをごまかすために言っているとしか思えない。 PostgreSQLは使われ方から細かいテストをする習慣のない人間が使っていることが多いから理解できないのもわかるよ。 >>291
手動じゃないなら、具体的にどうやってるの? 手動じゃないならなんらかの方法で結果を自動チェックしてるわけで、>>261と何が違うんだってことになる >>295
それだと結合テストの部類だろ。少なくともPostgresqlなんだからPostgresqlで完結しろよ。 もしかして手動でSQL実行してトリガが自動で動くから自動って言ってるの?w
まさかそんなわけないか >>298
自動テストの「自動」を誤解している。
よくいるのが有名自動テストツールを使用するのが自動テストで、それで確認できるテストだけがテストだと思ってる人間。
画面をポチポチやるのはたしかに手動だが、それ以外は昔からスクリプトでテストする。
あまり自動化しすぎるとテストにならなくなる。すでに完成しているシステムのリグレッションテストなら有効。
リファクタリングもそうだが特定のツールの機能を使うことを指している人間も多い。
話を戻すとここまでpsqlもPL/pgSQLも出てこない。PostgreSQLやMySQLは入門書で他の言語から使うことばかり書かれているから仕方ないとは思う。
データベースはデータの入れ物、SQLはあまりテストしない習慣の人間といくら話しても平行線をたどる。
LAMP環境だとエンタープライズの感覚がわからないひとは多い。 好意的に見れば全体的にさほどおかしな理解はしてないようだけど
一つのレスにあれもこれも詰め込みすぎて結局何を言いたいのかさっぱり分からない
知識をドヤりたいんだったらむしろ出し惜しみした方がいいよ >>301
だからいままでまともにレスしてないんだけど? >>301
あんたも知らないなら俺にかまうなよ。2chレスが気になって仕方ない病か? >>299
> よくいるのが有名自動テストツールを使用するのが自動テストで、それで確認できるテストだけがテストだと思ってる人間。
そんな奴はまれだろ
> リファクタリングもそうだが特定のツールの機能を使うことを指している人間も多い。
そんな奴はまれだろ
> SQLはあまりテストしない習慣の人間といくら話しても平行線をたどる。
自分が頓珍漢だから平行線になっている可能性
> LAMP環境だとエンタープライズの感覚がわからないひとは多い。
PostgreSQLスレでそんなこといわれてもね トリガーを発火させるためにコードを書いたら発狂する人がいるということはわかった w スクリプトってSQLとは別の言語じゃないんですかね >>308
あおりじゃなくて素直に聞きたいんですが、SQLスクリプトで>>261のようなテストはどう書くんですか? >>309
SELECT、INSERT、SELECTでいいでしょう。 >>310
それは、テストがOKだったかどうかは目視で行うってことですか? >>299
> 画面をポチポチやるのはたしかに手動だが、それ以外は昔からスクリプトでテストする。
その昔がいつのことかわからないけど、
DbUnitは2002年から http://dbunit.sourceforge.net/
SQLUnitは2003年から https://www.openhub.net/p/sqlunit
PlSqlUnitは2003年から http://wiki.c2.com/?PlSqlUnit
存在してるよ。 まさか、
----
select user_count from ...;
insert into users values (...);
select user_count from ...;
----
を実行しますってことじゃないよな? >>312
そういうのを使うのがテストかどうかは何をもってよしとするかだろ。
それも結局、単体テストになってねえし。 いい加減な外国人が作ったもの、やってることが正しいわけではない。青臭いのばかりわいてくるなw テストのやり方を知らないから、テスト嫌いなアメリカ人がテストのために作ったものを使うのがテストだと思ってるんだろうな。
テストは泥臭いのも大事。 >>318
カウントじゃなきゃいいだろってことの裏返しでいいんだろか >>318
> それカウントはおかしいだろw
どこがだよ?
いい加減、どうやってテストするのかちゃんと書けよ。
書けないのか? まぁ、PostgreSQLもMySQLもOracleもSQL Serverも外国人が作ったんですけどね。 マニュアルでテストしていたのをコードで書くと、テストではなくなってしまうという不思議 >>317
> テストは泥臭いのも大事。
スマートにできる所はスマートにやればいいだけのこと >>315
> そういうのを使うのがテストかどうかは何をもってよしとするかだろ。
いや、どう考えてもテストでしょ。
テストじゃなければ、何なんだ? ヘッドレスブラウザを使った、コードによるE2Eテストはテストではない IDENTIFICATION DIVISION.
なつかしいなw まさかこんなスレにまでコボラーが紛れ込んでいたとは
油断も隙もねえなゴキブリ野郎だなコボラーってやつは 若気のいたりだろうけど謙虚さがなさすぎだな。結局、教えてくれが本音なのに批判だけして正当化してるだけだろw >>330
お前のテストのやり方なんて、誰も知りたくないだろ >>330
ID:hwqbFp3vに対するコメント?
若気というよりじじい臭がすごいんだが >>331
いろいろ考えがあって正解はない。ただデータベースならデータ重視のテストをすべきで、特にデータ型はみてもらいたい。 >>333
だから、どうやってテストしてるのか、はよ書け >>332
ポスグレでテストは適当でいいはむしろ昔のWebサイトの感覚を引きずっているおっさんの考え方。せっかくポスグレが他のRDBMSに対向すべく機能を追加してるのにまともな使い方を広める人間がいないからシェアが落ちてしまった。 >>334
なぜデータベースの最初のテストを別のプログラミング言語でテストしてはいけない理由がいまだにわからないのか? >>336
そんなのいいから、お前のテスト方法はよ書け そろそろ小出しにするのやめてまるっとさらけ出しちゃえばいいのに
一斉に叩かれそうだけど賛同者が現われる可能性もないわけじゃないじゃんw ぽすとぐれすきゅーえる
ぽすとぐれすえすきゅーえる たぶんアメリカ人もポストグレスキューエルと言ってないよな。言いにくいだけ。 >>339
どうせ>>313みたいなクエリ実行して、目視で確認だろ >>346
エビデンスを目視で確認だろw
なんなのかさっぱりわからん。 >>347
エビデンスというのが>>313の出力結果だとしたら、それがテストOKなのかどうかが第三者にはわからない
まあ、別途テスト仕様書的なものを書けばいいけど
--
No: 123
ケース: ユーザを追加するとユーザ数がカウントアップされる
テスト方法:
1. 現在のユーザ数を取得する
select user_count from ...
2. ユーザを追加する
insert into users values (...)
3. 現在のユーザ数を取得し、1.で取得した数+1になっていることを確認する
select user_count from ...
-- 別人が断片的に言ってることを、批判したいために、自分で話を補完w >>350
いまどき上げるななんて意味もわからず、下げているんだろw このスレの最近の流れでは、ageてる奴はアホしかいない >>335
C0カバレッジ100%を目指せって話をしてるのに、なんで「テストは適当でいい」とかいう話にするのかわけわからん >>353
そのテスト基準をなぜDBにあてこもうとするのか? データ観点ではなくてロジックの網羅テストがなぜここで出てくるのか。 >>354
話の流れ的に、トリガーやファンクションをテストする場合の話な
C0カバレッジ100%は、実行するまでエラーチェックされないからだろ
まぁ別に結合テスト(どころか運用)まで未実行の行が残ってようが、俺には関係ないけどな >>356
C0ガバレッジ100%はテストの一部にすぎないから、これが適当なテストと指摘してるんだよ。 >>357
お前どんだけ話をループさせれば気が済むんだよ
>>237
> C0カバレッジで満足できるならそこでやめる。
> 確証が持てないなら、C1カバレッジになるようなテストを追加する。
それでも不安なら、与えるデータのバリエーションを増やすとかするだろ普通
まぁ>>313レベルのテストをやってる奴にはわからないだろうけどな
お前が上でageてたアホなら、いい加減お前のテスト方法を明示しろや >>358
それがデータベースの試験にならないとなぜわからない? データ型が間違ってることに気づくのは最初のテストくらい。 >>360
最初のテストてどういう意味やで?同じテストばかり2回も3回もするんか? そりゃテスト結果によって修正入れたらまた同じテストするべ 「データ型が間違ってる」というバグを作ったことないし見たことないんだが、具体的にどういうやつなんだ? >>366
どういう意味?
create tableが間違ってたってこと? >>366
なんかよくわからんけど、それがプログラム言語でテストすると検出できないバグという訳か。 うざいやつは大抵 仕事出来ない か現場では嫌われてる。 win10にこいつインストールすると
spotifyも一緒に入れられたりする?
いつのまにか入ってたんだけど。 こいつとはpostgresqlのこと。
こいつのテーブル見たりするのに
オススメのソフトある? >>373
pgAdmin3が定番じゃね?
日本語訳がいろいろ怪しいのと、テーブルに直接2バイト文字を入力するのがちょっと面倒なのがアレだけど pgAdmin4を使って、糞重たくてやってられなかったんだが、3は軽いのですか? >>375
逆に4は使ったことないけど、3で不自由感じたことないよ。不具合といえば、日本語関係と、テーブルの最後100行をシートビューで表示することができないくらい(最後の100行を選択しても最初の100行になる) >>376
> テーブルの最後100行をシートビューで表示することができないくらい(最後の100行を選択しても最初の100行になる)
そんなことやったことなかったけど、今やってみたらちゃんと最後の100行が表示されたよ
V1.22.2 >>377
今試したら直ってた(V1.20.0)
知らないうちにアップデートで直ってたのかも PgAdmin3は落ちまくるという問題がある
PgAdmin4はクソ重いので、代替案としてこれはどう?
https://www.workflowproducts.com/postage.html MySQL/MariaDBに切り替えて、MySQL Workbenchを使おう。 pgadminって日本語弱いんでしたっけ?
ポスタゲはよくわからないです。 1.4はひどかったけど、1.6でマシになった
パフォーマンスも全然違ってびっくりしたわ オブジェクトやタプルなんかに日本語使わなければ大丈夫なんでしょ。
あんまり使ってないのがバレバレだけどw 9.6.5のリリースノートにあるinformation_schemaの作り直しって
postgres, template0, template1についても必要? どなたかご存知の方がいたら教えてください。(スレ違いであれば教えてください。)
OracleからPostgreSQLへのマイグレーションをしています。
既存のWebシステムで、JDBCを利用してデータ登録などをしており、そのあたりもマイグレーションしています。
サーバ:Linux
PostgreSQL:9.2
開発環境:Windows10 or Windows8.1
Java:JDK7
Webシステムからtext型のカラムに改行コードを含むデータを登録しようとしています。
Insert時に、「ERROR: 符号化方式"UTF8"で無効なバイトシーケンスです: 0x00」が
出力され登録できません。
PostgreSQLの文字コードは、UTF-8でデータベースを作成しています。
また、Webシステム側の文字コードもUTF-8で作成しています。
JDBCで登録する際には、もともとOracleのnamedparameterを使用していたため、
springのnamedparameterjdbctemplateを使用するように変更しています。
standard_conforming_stringsをoffにしたり、接続URLにclient_encoding=UNICODEを
追加したりしましたが、解決しません。
エスケープするため、E''も試しましたが、namedparameterjdbctemplateの関係か
うまくいませんでした。
同様の事象を経験された方で、解決された方がいましたら、解決方法を教えていただけますでしょうか。
よろしくお願いします。 >>386
ERROR: invalid byte sequence for encoding “UTF8”: 0x00
で検索するといいよ
0x00(NULL文字)はダメだよってこと Webシステムで改行ってなに?
コードでいうと何にしているのかな? >>386
PostgreSQLにUTF-8で無効なバイト列0x00を追加しようとした。
Oracleに不正な文字列が格納されているか、もしくはOracleからPostgreSQLにデータ移行するために使用したツールなどに不具合がある。 ubuntuにpostgres入れたんですが
ロールを作るロールが無い状態です
最初はどうやってpostgresのシェルに入ればいいんですか? >>395
psqlコマンド使えるようになりました。
ありがとうございました >>397
ポスグレはそこが独特でユーザーとロールの概念が分かれていない。 明日 その辺の話が聞けるかな。
楽しみぃ。
会場で会いましょう@あーりん推し 複合型とか配列とかJSONデータ型とか、そういう標準じゃないっぽいデータ型は
色んな言語・環境用のドライバインタフェースではどれくらいサポートされているものなんでしょう? >>406
ありがとうございます。
ではデータベース上では便利そうでも実際の利用を考えると使いにくいことが多そうですね。 psqlのシェルで
db=# が
db-# になってるのはどういう意味ですか? なんにでも意味を求めるな、あるがままに受け入れるんだ >>408
適当に答えると、英語表示になっているんじゃないのか?
日本語キーボードの「=」は英語キーボードの「-」。 >>410
サンクス、解決しました
クエリの途中で改行したせいみたいです。;セミコロンでクエリを終わらすと=に戻りました。 ここで良いのか分かりませんが質問させてください。(スレ違いであればご指摘いただけますと幸いです。)
PostgreSQL案件がチラ見してくるので最近触り始めましたが、
oracleでいうパスワードポリシーのようなパスワードの強度を強制する機能は標準では無い認識ですが、
機能を実装する場合は現状では拡張モジュールのpasswordcheckを使う事になるのでしょうか。 >>412
どういう要件なのかわからないが、PostgreSQLのようなOSSの世界では、必要であれば追加するという考え方をする。
機能を使うのではなく、だれかが作ったものを使う、または自分が作る。
必要だったら拡張モジュールを追加し、不要だったら追加しない。
基本的にLinuxと同じ考え方。 >>413
有り難う御座います。
oracleから切り替えることを想定した場合に、ひとまず機能の網羅性を確認しておりました。
現状提供されているもので足りなそうな機能については新規開発も視野にいれてナレッジに致します。
工数が見合えば自分で作ってみたいですね!
>>414
有り難う御座います。
セキュリティ要件としてはkerberosで満たせるかどうかも踏まえて材料にしていこうかと思います。 >>413
それってoss特有なん?
必要なのに追加しないって考え方なんかあるのか?
テキトーに言ってんだろお前w >>415
ここで聞くより、PostgreSQLのコミュニティで聞いた方がいいよ。ここは他人の書き込みに文句ばかりつけるやつが多いから。 >>418
お前が間違ったこと言うから質問者のために正してやってんだよw バージョンアップしてアプリが動かなくなることってある?
例えば9.5.xのxの部分だけあげようと思ってるんだけど
何か気を付けることとかあるかな?
試しにテストサーバたててやってみたら何も問題なく動いてるんだけど
慎重にいきたいので何かデメリットがあるなら教えてほしい 慎重に行きたいならまず公式のドキュメントを読め。
それぞれのバージョンのリリースノートにちゃんと書いてあるから。 慎重にいくのなら、そのままにしとけば?
更新する意義があんの? 誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。
グーグル検索⇒『宮本のゴウリエセレレ』
PBKPMWLMUY ☆ 日本の、改憲をしましょう。現在、衆議員と参議院の両院で、
改憲議員が3分の2を超えております。『憲法改正国民投票法』、
でググってみてください。国会の発議はすでに可能です。
平和は勝ち取るものです。お願い致します。☆☆ pgadmin4のサーバー版ってどうやってインストールするの?
ubuntuでapt-get install pgadmin4したら何かインストールされたけど後何したらいいかわからん 公式ドキュメントのUPDATEの項の例に「アクメ社」ってのが出てきて、何となくナニワ金融道を思い出した ワーナーのアニメのウサギ、バッグスバニーが出てくるアニメで
コヨーテ御用達の通販会社かな publicスキーマにユーザ定義関数を置いている場合、
10.3にはおいそれとはアップグレードできんな……。
こんなことになるとは思ってもみなかった。 初めてVMware入れて
初めてsentOS入れて
初めてそこにpgadminでデータベース作った
作ったのはいいけどファイル名が数字の羅列なの変に感じるんだけどそんなもん?
SQLiteやmySQLだとデータベース名を例えばrennsyuuにしたらファイル名もrennsyuuの文字入ったけど
postgreだと入らない。
なんかバックアップとか難しそうだけど慣れるしかないの? >>432
学校に行って勉強しろよ。英語と算数と計算機科学。 List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
postgres | postgres | UTF8 | C | C |
template0 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
日本語db | postgres | UTF8 | C | C |
(4 rows) >>432
そんなセンスのないこと言ってるようじゃそもそもデータベースの設計すら出来ませんよ 「.db」形式のファイルはどのようにPostgresへリストアするのでしょうか? 自己解決
pg_restore -U "ユーザー名" -C -d "DB名" AAA.db .dbつってフォーマットを正解できるのはエスパーくらい text型について教えてくたさい。
制限なしの可変長、つまり、長さを気にせず入れられて、短い場合はそのサイズのみディスク容量を使う認識であってますか?
その前提で、普通データベースに入れるテキストって、どれくらいのサイズまでって一般的な指針なんてありますか?
とあるログ(20万文字程度?)を有するデータを月10000個ほど登録します。その際、text型で中身を登録するか、テキストファイルと保存し、そのファイル名を登録するのは、どちらがいいでしょうか? >>440
> 制限なしの可変長、つまり、長さを気にせず入れられて、短い場合はそのサイズのみディスク容量を使う認識であってますか?
概ねそう。制限無いといってもあるけどね。
まあギガ単位の話なのでそうそうないだろう。
> その前提で、普通データベースに入れるテキストって、どれくらいのサイズまでって一般的な指針なんてありますか?
DBによって違うだろう。
当たり前だけどpgの場合も長ければ長いほどオーバーヘッド高くなってパフォーマンス落ちるよ。可変長はTOASTされて細切れレコードで格納されるので。
> text型で中身を登録するか、テキストファイルと保存し、そのファイル名を登録するか
個人的には好きな方でやれば?レベル。
中身入れちゃった方が楽だよね。
でもその分DBが太るからバックアップとか、障害時とか運用よく考えて決めたら。 DBに入れる→なんかあったときDBAの責任
ファイルに出す→なんかあったときOSインフラの責任
Linuxだろうけど、i-node で耐えうるファイル数やサイズの検証値って意外と誰も持ってなかったりするから
全部自分でやらんといかん面倒やね 責任転嫁の話しか?
そんなの、システムを組んだヤツだわ
DBAやインフラの責任にすなやって思う そういや、どのぐらいの同時接続まで耐えられるかとか知りたいな
もし、何千接続、何万接続に耐えられるような時代になったら、バックエンドの構成もだいぶ変わるだろうし 昔、unixに比べてnfs弱くて使えないって言われてた nfs?
このスレと何の関係があるか知らんが、あんなもの元から使えない
こくに今の時代使いどころ間違えると終わる
お家で使うくらいに留めるべきもの >>444
今はクライアントが直接DBつつかないだろ
Webサーバー、アプリサーバー経由でつなぐんだから、どっちかというと接続数がクリティカルになるのはそっち 接続について教えてください。
私の作ったアプリが常時接続していると指摘されました。
ver9.5で、多分pgAdminのサーバー状態の活動のウィンドウだと思うのですが、クエリーがDISCARD ALLとなっています。
アプリはc#の2005でnpgsqlを使用しており、都度connectionはusingで破棄してるつもりです。
これだと接続はきれないのでしょうか?
DISCARD ALLとはどういう状態でしょうか? 日本だけだよPostgreSQLが使われてるのって へーそうなんだ
Coverity って言うその業界ではそこそこ有名なツールで使われてたけど日本製なのかな w >>454
あれ?
「日本だけ」じゃなかったの?
てか、こいつらは日本人なのにいちいち英語でやってるとでも? w
https://www.postgresql.org/community/ 日本医師会が医師から集めた会費から開発費を捻出して開発し、フリーソフトとして公開されている日医標準レセプトというソフトは
サーバー機能をUbuntuで動かしデーターベースとしてpostgesqlを採用している
そのユーザー数がおよそ15,000医療機関(医科の病院と診療所)ある 将来的には希望した医療機関は、日本医師会が用意したクラウド環境に順次移行することで院内サーバーが不要になる
https://www.orcamo.co.jp/products/orca/cloud.html 初歩的な質問ですが、教えてください。
postgresqlの事で調べてると、SQL文が出てきます。
例えばセッションの確認とかだと
select 〜 from pg_stat_activity とか。
こういうのは、どこで実行するのですか?
普段、pgAdminしか使わないので。
SQL Shell をデフォルトでログインして実行しても、プロンプトが=#から-#になって、helpすら表示されなくなります。 >>458
SQL分は文末にセミコロン「;」が必要だよ。
=# select * from pg_stat_activity;
とするか、
=# select *
-# from pg_stat_activity
-# ;
な感じで。 >>459
おお!ありがとうございます!!
これで色々試せそうです!!! pgadmin で遊ぶといろいろ勉強できるね。
psqlだけだと殺風景みたいな。 オラクルを今まで使ってたんですが、カーソルを複数返すときの推奨方法はなんでしょうか?
アウトパラメータで、カーソルを戻す
リターンカーソルで、リターンネクストで複数戻す
今はこれくらいしか、思いつきません Oracle使いがオラクルとカタカナで書くとは思えぬ。 そういや最近OracleのCMって見ないね
レニークラビッツの曲に合わせてオラコォー連呼してたのとか懐かしい な CMあったのか
週刊プロレスのCM見てないのと同じレベル pgadmin4って使い勝手良さそうなのかな?pgadmin3の使い勝手が良いので10に移行出来ないw >>474
4はあまり使われていないと思う。
PostgreSQLをGUIで操作しているひとが少ないせいでよくならない。 学びはじめの頃に3をちょっと使ってみた。
最近4を使ってみたが、なんかバグっぽい感じ?
どちらにしても今となっては必要性を感じないな オラコーは売れる数減ってきてるのに売上高維持しようとしてるから、毎年値上げしててその額が半端じゃないらしいな。 postgresとmariaにがんばっていただきましょう >>479
お金を取る方が健全。マイクロソフトなんてビジネスとしては崩壊しかかっている。 >>481
"マイクロソフトのビジネスは崩壊しかかっている"
無知すぎワロタ 売り切りソフトからAzureに軸足を移したことを知らんのね >>481
SQL-Serverもそれなりの対価頂いておりますが… https://youtu.be/COxAA8145vM
Microsoft AzureのAzureはカタカナでアズールと表記するのが現在では一般的となっている Microsoft、Azure売上高倍増で予測を上回る増収増益
Microsoftの1〜3月期決算は、Azureを含むクラウド事業が好調で売上高は16%増、純利益は35%増だった。
[佐藤由紀子,ITmedia] 2018年4月27日
http://www.itmedia.co.jp/news/spv/1804/27/news072.html
米Microsoftは4月26日(現地時間)、2018年第3四半期(2018年1〜3月期)の決算を発表した。「Azure」や「Office 365」などの商用クラウド事業が好調で、2桁台の増収増益だった。
売上高は前年同期比16%増の268億2000万ドル、純利益は35%増の74億2000万ドル(1株当たり0.95ドル)だった。売上高、1株当たりの純利益ともにアナリスト予測(売上高は258億ドル、純利益は0.85ドル)を上回った。
Intelligent Cloud部門が今期も好調で、Azure Computeの売上高が93%増だった。部門全体の売上高は17%増の79億ドルだった。
Intelligent Cloud部門
https://i.imgur.com/Wnlwc1L.jpg OfficeやLinkedIn、Dynamicsを扱うProductivity and Business Processes部門の売上高は17%増の90億1000万ドルだった。企業向けOffice 365の売上高が42%増と好調。
LinkedInの売上高も37%増と好調だった。企業向けOffice 365のMAUは1億3500万人、コンシューマー向けのMAUは3060万人。
Productivity and Business Processes部門
https://i.imgur.com/FxHA02l.jpg
Windows、ハードウェア、Xbox、検索のMore Personal Computing部門の売上高は、Windows、ゲーム、Surface、検索が好調で13%増の99億2000万ドルだった。検索は16%増、ゲームは18%増。ハードウェアではSurfaceの売上高が32%増だった。
More Personal Computing部門
https://i.imgur.com/EHknOcd.jpg >>451
嘘つきだな
こういうヤツに限ってMySQL使ってるとか?
MySQLとかオラクルが豹変したら死ぬぞ?w >>479
オラクルがJavaの次に狙ってるのはMySQLに何らかライセンス徴収ルール作る事
OSSだから、そんな事有り得ないとMySQLユーザーは言うがJavaも有り得ないと言われてた
でMariaDBに逃げたヤツが一番賢い、と言われる様になると思う MySQLに商用ライセンスが存在するのは元からやん。
Javaの話もなにか勘違いしてないかい? でも、MariaDBに逃げとくに越したこたないだろ。
MySQLの先行きが読めないことは間違いないし、そろそろそれぞれで違いが出てきてるみたいだし。 >>493
PostgreSQLって何がいいん?w なんでPostgreSQLのスレにMySQLやMariaの信者が居るんだ? PostgreSQL信者しか書き込んだらいけないらしい 自分が使っている、気に入っているものがやっぱり一番だと思いたいのが人間だし
それを否定されると自分が否定されていると思っちゃう人もいるわけだし
そのあたりの空気を読めることが望まれているのでしょう PostgreSQLに全く関係のない話題を書き込まれてもなぁ・・ AMDのスレによくIntel派の人がRyzen腐しにくる メインのスレに書き込める程知識が無い
もしくはスレ住人に相手にされてないor嫌われてる
↓
関係ないスレに書き込む
↓
スレ違いなのでそのスレの住人に怒られる
これを相手にされていると勘違いする ←今ここ
↓
関係ない話題でスレ常駐し始める
↓
徹底的にスルーされるので飽きて居なくなる
もしくはスレ住人に擬態する DB系のスレは最近、だいたい過疎ぎみだからな。
書き込みがあるだけマシなんでは。w 早くMySQLにライセンス徴収開始されんかなw
Javaと同じ運命にして欲しいわw >>509
この場合のライセンス徴収はGPL版にも商用版と同じライセンス適用の話ね >GPL版にも商用版と同じライセンス適用
意味不明すぎるw >>510はGPLなら常にタダだと思ってるバカ w >>513
"常に"なんてどこに買い込みしてる?
アホか >>504
そういう不完全な人の話は聞く耳持たんなw GPLでも徴収できることを知ってたら>>509みたいなアホレスはしないだろ
>>514は傷口広げて自爆するバカ w 失望しました! PostgreSQLに乗り替えます >>519
それはわざとだよ。MySQLを徐々に衰退させたいため。 >>520
そのポスグレさんは知っているひとが少なくて苦戦する。
しかもシェアが低いのでとにかく情報がなく、ソースコードまで読まなければならない。 まあOracle, MySQL, SQL-Serverの御三家に比べりゃ少ないけどそれ以下の有象無象の中ではトップだから情報が少ないとか言ってるのは単なる情弱 Oracleは早くMySQLユーザーをOracleに移行させたい
よってMySQLのサポートなんておざなりになるのは当然
MariaDB、PostgreSQLが元MySQLユーザーの受け皿になる 型チェックとか厳しく無いものから厳しいものへは移行せんだろうな WordPressなんかMySQL使用前提だがオラクルがMySQLのライセンス徴収厳密化したらユーザー発狂するだろうな >>MySQL系は大規模データベースを想定して作られていないせいで、管理は楽だが、物理ファイルと論理ストレージが一緒のため、データ量が多くなってくるとデータベースを止めずに何か変更することが難しくなる。
やっぱりPostgreSQLだな やらなくてもダメではないけど、しなくてもいいわけでもないらしいが?
どないやねん。 >>532
Autoをやってる。というかな?
勝手にやってくれているんだから、それでいいやって思うわ。 >>530がvacuumやってるのか?
って言うからvacuum自体は必要だよって言っただけ
設定が必要かどうかは状況による どのRDBMSでも自動ではやらないよな。そんなのされたら一時的に使えなくなる。 vacuumなんてするのは
うんこ収集車とポスグレぐらいだな >>537
他のDBMSは領域再利用するから基本不要
ただファイルシステムとかと同様に断片化してくるから再構成をすることもある
http://cosol.jp/tech/detail/d3_maintenance_table.shtml >>539
ども
その時にやるか後でやるかのトレードオフだね。 MySQLスレで質問したら、自分で試せ、で終わるらしい
こっちはOK PostgreSQLを業務利用してからOracleをやることになったんだけど、
それで分かったこと。
PostgreSQLはSQLも設計仕様も、とても綺麗。
Oracleはダメ。信じられないくらいのポンコツ。 Oracleで綺麗じゃないとか言ってるのか。MySQLなんか、とんでもなく汚いぞ。 僕は逆に10年以上前にOracleからPostgreSQLに変えたけど、特に困難なく移行できた。
仕様も変なクセがないし他のスタッフからも不満はまったくない。
それにまず社長が喜んだ(笑) 汚さで言えば
MySQL(MariaDB)>Oracle>PostgreSQL
キッチリ手順明確なのがPostgreSQL
どうにかやれば動いてしまうのがMySQL MySQLはべつに汚くないぞ。
ところどころがちょっといいかげんなだけ。 僕みたいな年寄りには、MySQLは、
・単なるサブセット(だから多少早くても当たり前)、
・マルチバイトが使い物にならない
っていう認識がこびりついてて使う気にならない そりゃ二十年近く昔だろ。w
そのころは、ふつうにお安く使えるのはMySQLくらいしかなかったがな。 選択肢増えた今はMySQLでなければ、と言うシーンが無い PostgreSQLのスレだから言うわけじゃないけど、
もうPostgreSQLしかねーだろ!
他はカス! >>554
そして、PostgreSQLでなければというシーンもない。
ま、ふつうの人にはどっちも同じ。 >>555 だよね!!
MariaDB、MySQL、FireBirdは触ったことはないが・・・。
OracleはSQLPlusで、操作したことはあるけど面倒。
SQLServerも面倒で触れたこともない。 Oracleは、簡単なことをするにもサブクエリー使わなきゃならないのよ。
なので3階層くらいのサブクエリーは普通になってしまう。
で、可読性が落ちてしまい、自分でも理解不能になる。
人によってはビューやストアドプロシージャで解決しようとして、これらを書きまくりメンテ不能に陥る。
PostgreSQLなら素直で簡潔なSQL書けるのに、と思うよ。 >>558
Oracle PL/SQLのメンテナンスはしんどい
人それぞれでロジックの組み方違う
ライセンス含めOracleはもう厳しい ここってpostgres派生のgreenplumについて聞いても大丈夫?
ライセンス価格わからなくて困ってる >>560
具体例はいちいち覚えていない・・・
そんなの覚えても役立つことなどないから覚えようという気がしないので。
ごめんね。
でもPostgreSQLでSQL書ける奴が業務でOracleに乗り換えれば、その不満はすぐに感じると思うぞ。 >>562
なるほど知ったか指摘されたら答えられないってことね
了解 >>558
それは手続きの隠蔽にすぎず、SQLの可読性が下がる。
一度、ソートしないと結果が得られないのに、一度のSELECTでできるかのように思わせる方が問題だ。
このあたりの独自格調のせいで、IT技術者であっても誤解が広まって、SQLはこう書くとこう処理されると言い始める。 なんで>>558と>>564は通じあっとるんやw
バカ同士の会話おそるべしw >>566
商用利用前提でコミュニティ版でパフォーマンス検証したいけど、そもそも高すぎたら却下されるから、知ってる人がいたら大まかでいいから価格感が知りたかったのですね 『PostgreSQL全機能バイブル』
鈴木 啓修 著
は良本だな。俺のバイブルになってる。 7のやつは評判よかったね。
10のはさすがにもう出ないか。 10から入門する自分としてはそれほしい…(´・ω・`) PostgreSQL完全機能リファレンス
なら 8.1 対応ですよ。
10 だってこの本(8.1用)で大丈夫だよ。 宣言的パーティショニングとか10でついた機能とかの説明もほしいの…(´・ω・`)
パーティショニングした列指向テーブル読んでもパラレルクエリにならんのを解決できるか調べたい SRA OSSやHPが毎年新機能評価報告出してくれるのはありがたい。 psycopg2の本ってあるの
なかったら誰か書いて、買うから… sqlはそこそこ書けるプログラマです
インフラ担当が居ない案件に派遣されてしまいました
開発から運用まで行うとしたらどんなことを勉強したらいいでしょうか それだけじゃなんも答えられんやろ。
一口にインフラといっても、OSのインストールやらネットワークの設定やら、そもそも物理設置やら、いろいろ。 インフラ技術者がいないのであれば、そこが重要だと思ってないし、自分の自由にできる可能性が高くてうらやましい。 勉強できるってのはいいね。
聞けない人がいないなら、会社持ちで外にリサーチに行けばいいし。 sqlはそこそこ書けるプログラマって言ってんだろ。
DB専任なんてどこに書いてあるんだよ。 開発から運用まで、何をしたらいいのか皆目見当もつかない(sqlはそこそこ書ける)プログラマ
でした 楽しんでやればいい。
そんなサイトがいっぱいある。 >>581
1.システム化したい業務の聞き取り
2.システム化したい業務の仕様書作成
3.実作業 Amazonプライムデーのサーバーダウン原因は「データベースをOracleからPostgreSQLに変えた」ため
https://hayabusa9.5ch.net/test/read.cgi/news/1540429567/ AmazonによるPostgreSQLへのなかなか貴重な貢献だ >>601
俺の第一印象も「Oracleすげー」より、「これでポスグレが一皮むけるな」だった >>600
Amazonプライムデーのサーバ障害、AmazonがOracleからAurora DBに乗り換えたのが原因ではない。Amazon CTOがCNBCの報道を否定
https://www.publickey1.jp/blog/18/amazonamazonoracleaurora_dbamazon_ctocnbc.html
なんかそのニュースがフェイクニュースだった可能性も出てきているな 記者が、自分で勝手にストーリーをつくってしまって、あわない理屈を排除するのは、どこの国でもおんなじか。。。
たしかに、セーブポイントの仕様が違うなら違って当然で、その仕様の通りにしてないアプリが完全に悪いわな。 無能なプログラマーが、トランザクションの中で無用なsavepointを連続して発行していたのが原因の模様。
アマゾンのシステム開発してる人の中にも、こういうレベルの人がいるんだな。 PostgreSQLの仕様分かって無いヤツがプログラム作った結果か
有り得る話だな トラブルはあったにせよ、Amazonほどの規模のとこでもPostgreSQLが使われるんだって思うと感慨深いなぁ AmazonにはAurora PostgresとAurora MySQLがある中で、Aurora Postgresを選んだというのもいいね。
徹底的に比較した上でPostgresを選んだんだろうから。 Oracleから移行ってことなら比較以前にMySQLは選択しにくいよね MySQLのほうが性能は高いかもだけど、機能は少ないからね。 単純に「MySQLのほうが(PostgreSQLよりも)『性能』が高い」っていうのはどうかな? MySQLはその内Javaの様にランタイムライセンス課されて終わるよ
Oracleの狙いはそこ
今現在、そこそこシェア取ってるから >>617
無償版をJava同様、6ケ月毎の更新にするって話
で、OpenJDKの様に無償版をOpenMySQLにして6ケ月毎にバージョンアップする
6ケ月毎にバージョンアップって現場ではやってられないので、MySQL→MariaDB移行にする中小企業が増える
MySQLが廃れる方向って話 >>625
勘違い
MySQLと比べてるのが滑稽なだけ
せめて比べるとしたらMariaDBだろっていうツッコミが>>612なのに
なぜかそれに過剰反応してる信者(>>613)が一人いるだけ MariaDBと比較と言っても実質MySQLの無償版と同じだからね 別に何と比べようが各人の自由だろ
滑稽とか言う方が滑稽だよ アマゾンがオラクルからDB移行した件で、Amazon AuroraのPostgresと同じくAuroraのMySQLの話題の流れで、アホが突然MariaDBガーとか言い出したからバカにされたんだろw >>632
ちょっと何が言いたいのかわかんないっすね AWSのAuroraがMariaDBをサポートしてたら、こんなに(?)バカにされなくてすんだのにね
可哀想だね(´;ω;`) ポスグレ入れてたサーバのjavaを削除した後にポスグレのサービスが起動しなくなったのですがポスグレはjavaに依存しないですよね? ダンプサイズって上限あるのか知りたい。。50GBとか100GBとかいけるもの? DBMS of the year 2018 受賞おめでとうございます 初めまして
9.3.5から9.3.22にアップデートしたいのですが
ググってもメジャーアップデートの方法しかヒットせず困っております。
マイナーアップデートの方法が丁寧に説明されている書籍やHPや
教えていただけるイケメンはいらっしゃらないでしょうか? >>642
OSはlinux レッドハットの6になります。 >>642
DB停止して上書きインストールするだけやで。
9.3.22のrhel6用のrpm用意して
yum localinstall rpm列挙
でよいかと。 >>647
ありがとうございます!
そのあたり調べてみます。
>>645
完全に外部から閉鎖している社内システムなんでマイナーアップデートすら必要ないんですが
外部監査で指摘されてスーパースーパーハッカーがキャッツアイみたいに侵入したら
だめだよね?って真顔でいわれてSEチームが全員じゃぁおれら辞めるわって言いだして
折衷案ですることになった非常にくだらない件でしてEOLは関係ないんです >>648
あほすぎ。w
たいへんやな。
そこまでいかれたら、DBなんかなんでもおんなじやのに。 >>648
言いたいことは分かるが草生える
そう言う話になってる時点で保守契約とかもしてなさそうなのでその時点でどうなの?って気はする 俺んとことなんて、内部監査で同じこと言われる。
しかも言う側はエンジニアではない素人だ。
何も知らないカスどもと思うけど誰も何も言えない。
折衷案まで漕ぎつけるだけ、まだいい。ウラヤマシ。 >>651
保守なんか関係あるか?
オレはこんふうに想像。w
1 上層部が適当に外部監査を依頼。
2 とくに問題なし。
3 監査側としてはなにか指摘しないといけない。
4 どうでもいいことをムリヤリ指摘。
5 上層部が真に受ける。 >>653
完全に内部専用のサーバを外部業者入れて監査する厳しさがあるなら、内部専用でも本番環境なら保守契約くらいやっていそうなものだ
書いてる内容的にそうでも無さそうだから、体制の矛盾を感じて不思議に思っただけ
自分的には、会社のポリシーでEOL製品の継続利用はNGってなってるだけじゃねーのと マイナーアップデートしたらキャッツアイに勝てるの? pgAdminでテーブルを作ろうとしているのですが、データ型で[ ]がついてるものとそうでないものの違いは何ですか?
データ型の横に別に長さを指定もできるようなので混乱しています。 クラスタリングするならpg pool 2が良いのでしょうか? >>666
だよね!
>>667
SQLServerと比較すると初回アクセスのみ結構遅い DB単体のスピードを追求する場面ってあるの?
大抵は回線とかクライアント側の端末がボトルネックになってる気が >>671
> DB単体のスピードを追求する場面ってあるの?
はっ?
> 大抵は回線とかクライアント側の端末がボトルネックになってる気が
でかいシステムだと何台のクライアントからアクセスあると思ってるんだよw 読み取りを分散させるとこまで出来ました
更新を分散させつつ整合性を保つ魔法はまだわかりません >>671
たいていDB上にデータとビジネスロジックを置くので、DB以外に速度を求められる場所がない >>669
初回アクセス速度を速くしたけりゃ、共有バッファを調整して、DB起動時に一度そのSQLを実行してテーブルをメモリに乗せときゃいいんじゃね? というSQLを起動時にやってるという話を聞いた事がある。 psqlのロールとシェルのユーザって同じ名前じゃなきゃログインできないの? 設定次第。pg_hba.confでidentになってるとそうなる。 hbaってふんふんってわかった気になるけど、SSLでやろうと思ったりすると
結構迷うよね。 >>680
mda5に直したらいけましたサンクス
新規のロールってグラントしてもらわないとログインすらできないの? 肥大化したテーブルから古いデータをバックアップテーブルに退避して、その後削除するようなクエリを書きたいのですが、そもそもこのような対応は一般的なのでしょうか?
他に一般的な手法があれば教えてください。 毎日決まった時間に指定のクエリを実行したいのですが、pgAdmin4でそのようなことは出来ますか? 住信SBIネット銀行、オンプレオラクルをAurora??PostgreSQLに移行。性能や可用性もPoC上、問題ないと判断。83%コスト削減。銀行の勘定系のクラウド化の時代なんだな。もはや、放送のシステムやマスターもクラウド化できる時代や 銀行はオンプレミスでないと流石に個人情報漏れが怖いわ
クラウドってIntel のCPU積んでるだろうから、毎月追加更新される脆弱性報告見てると不安が増すばかり
自社はしっかりシステム作ってても、同じサーバで稼働してる別会社のシステムが杜撰だったとして
セキュリティ突破されようものなら、煽りを食って連座して突破されてしまうわけだし
逆に言うと、銀行系のシステムを狙ってわざとセキュリティの甘いシステムを、
銀行が使用してるクラウドサーバと同じサーバで稼働させてクラックしてそこをつたって銀行の情報抜き取るとか
そういう新型の犯罪が成立しそうだし
銀行や政府は漫然とクラウドを利用するべきではない >>696
> 逆に言うと、銀行系のシステムを狙ってわざとセキュリティの甘いシステムを、
> 銀行が使用してるクラウドサーバと同じサーバで稼働させてクラックしてそこをつたって銀行の情報抜き取るとか
自分が稼働させたサーバーを自分でクラックするのかw
アホすぎる… >>697
今の仮想環境を知らんのか。
アホすぎる。 >>698
へー、今の仮想環境だと自分で設置したサーバーをわざわざクラックする必要あるんだw
ちょっと詳しく説明してくれるかな 授業料を払うつもりがあるんなら、説明したることを考えたってもええで?
タダというんはムシがよすぎるやろ。w admintool4の使い勝手が良い
Windows10にもdebian9にもpostgreSQLを入れている。 admintool4ってググってもこのスレしか出てこないけどpgAdmin4のこと? >>709
そんな難しい用語ださなくていいから、もっと単純にいこうぜ 同じメモリー8GB
内部ストレージ500GB(HDD)Windows10
内部ストレージ240GB(SSD)debianGNULinux strech9
Windows10のpgAdmin4が初期起動スピードでLinuxに1分以上の差をつけられて
負けたわ糞 >>710
『市民権を獲た○○』はいくらなんでも市民権を獲たイディオムだろう…… >>713
初回起動だけは我慢するしかない
2回目以降は同等に早い postgreSQLを勉強するついでに資格取りたいんだけど、OSS-DBしかない感じ?
参考書が古い・・・ 複数の外部キーを複合主キーとして使うテーブルを作りたいんですが、以下のケースの場合はどうすればよいでしょうか?
---------------------------
クラス番号(主キー) | クラス名 |
1 | A組 |
---------------------------
---------------------------------------------
クラス番号(外部キー) | 出席番号(非ユニーク) | 氏名 |
1 | 10 | Cさん|
---------------------------------------------
※クラス番号と出席番号の組み合わせで複合主キー
上記テーブルがある状態で、以下のテーブルを作りたいのですが、
出席番号が非ユニークな為、外部キーに出来ません。
サロゲートキーを使わずに、クラス番号と出席番号の組み合わせで複合主キーにしたいのですが、どうすればよいでしょうか。
------------------------------------------------
クラス番号(外部キー) | 出席番号(非ユニーク) | 情報 |
------------------------------------------------ こうかな?
CREATE TABLE class (
id int NOT NULL PRIMARY KEY,
name text NOT NULL
);
INSERT INTO class(id,name) VALUES (1,'A組');
INSERT INTO class(id,name) VALUES (2,'B組');
CREATE TABLE person (
id int NOT NULL REFERENCES class(id),
number int NOT NULL,
name text NOT NULL,
PRIMARY KEY (id, number)
);
INSERT INTO person(id,number,name) VALUES (1,10,'Cさん');
INSERT INTO person(id,number,name) VALUES (2,10,'Dくん');
INSERT INTO person(id,number,name) VALUES (2,11,'Eくん');
CREATE TABLE info (
id int NOT NULL,
number int NOT NULL,
info text NOT NULL,
FOREIGN KEY (id, number) REFERENCES person (id, number)
);
INSERT INTO info(id,number,info) VALUES (1,10,'Cさんの情報1');
INSERT INTO info(id,number,info) VALUES (1,10,'Cさんの情報2');
INSERT INTO info(id,number,info) VALUES (2,10,'Dくんの情報1');
INSERT INTO info(id,number,info) VALUES (2,11,'Eくんの情報1');
/* INSERT INTO info(id,number,info) VALUES (1,11,'外部キー制約でエラー'); */ >>718
神様ありがとうございます!
以下の1行をプラスして、完全に想定通りに動きました!
>>PRIMARY KEY (id, number)
CREATE TABLE info (
id int NOT NULL,
number int NOT NULL,
info text NOT NULL,
FOREIGN KEY (id, number) REFERENCES person (id, number),
PRIMARY KEY (id, number)
); すみません。動いたと思ったら微妙に違っていました。
以下の制約を付けて、正常に動きました!
ALTER TABLE info ADD CONSTRAINT info_fkey FOREIGN KEY(id, number) REFERENCES person (id, number) createuser -P -E ロール名
でパスワードを設定しても
そのパスワードを要求される場面がない。
CREATE ROLE ロール名 WITH PASSWORD '****';
でもそう。
なんのためのパスワードなんだろう?
localhostだけで使うなら無用なのかな。 pg_hba.confでtrustになってるとか? pg_hba.confの設定はいじっておらず、
md5かpeerのいずれかです。
trustは一つもありません。 peerで認証されてるんだろう
LinuxのアカウントとPgのロール名が同じで >>724
そうかもしれません。異常な挙動でなくて安心しました。
助言くださってありがとうございました。 pg_hba.confという設定ファイルの中の
local all all peer
を
local all all md5
に変更することでパスワードを指定して作成したロールから
localhostのPostgreSQLサーバに接続するときにパスワードを
要求されるようになりました。 datdbaseをCREATEする権限をグラントするコマンドを教えてちょうだい windowsなのですがまずdvdrental.tarをインポートするやり方からわからないです
教えてください >>731
ttps://dev.classmethod.jp/etc/postgresql-create-sample-database/ そのまま丸写しではできなかったですがあちこちにに書いてあることを総合したらなんとかできました
どうも pgadmin4でクエリエディタの内容をコピペする方法ないの?どうするのこれ? 職業訓練でポスグレやってるんですが、自宅でインストールして使おうとしたらコレが出たんですがどうすれば使えるようになりますか?
https://i.imgur.com/xDqFtox.jpg >>738
管理者としてインストールしました
何回か再インストールしてもダメなんです >>739
Windowsでの話?
環境何も書いてないのはエスパー求むってことか? >>741
Windowsです
サーバーソフトはtomcatを使ってます 一応聞くけどポスグレのインストールはデフォルトでエンター連打でインストールしたって理解でいいか? >サーバーソフトはtomcatを使ってます
唐突に謎すぎるw
もしかしてデータベースサーバーというものを知らない? tomcatはjavaサーバーで今の問題には
特に関係ないからいいとして、
1.postgresqlをloalhostにインストールしているか?
2.postgresqlをport5432でインストールしているか?
3.windows上のサービスとして起動しているか?
この辺教えて それ以前にこれまでしてきたことと、その結果を時系列で書いてもらわんと
誰も何も分からないと思う。 >>746
それを答えられるヤツは、あんな質問をしないやろ。w 職業訓練でそんな授業あるんか
ええな
俺も行きたいわ >>750
15年ぐらい前だけど職業訓練の一環でうちの会社に訓練生が現場実習として2週間ぐらい来たことあったのでそう言う奴かも 初心者的な事聞いていいっすか?
テーブルに時間として格納された整数値を現時刻と加算したいんだけどどうするの?
定数としては+ n hourで出来たけど、項目だとできなくて >>753
手元に環境ないから試してないけど
select CURRENT_TIME + make_interval(hours := xxx)
ではどうかな >>753
時刻を数値で扱っている時点で初心者ではない。 UNIX TIMEだろ?
それくらい誰でもするやろ。 象
オウム教が象被ってたから、日本ユーザ会が元々postgres95で使ってた亀を使ったという話。 CREATE USERとCREATE TABLEとINSERTとUPDATEとSELECTぐらいしか使わない俺が来ましたよ!
ポスグレ触りだして10年以上たってるのに・・・ DELETE使わないって全データ論理削除っすか?
と釣り針にかかってみる。 dropdb -h all -p all -d all -U all 書き込みが無いのは「何も困ることが無い程良いDB」という認識で良いか? Oracleを仕方なく仕事で使い始めたが、PostgreSQLと比べてOracleのダメさが
使えば使うほど感じるようになり、このスレには何も書けない状態。 Oracleはドライバーの更新が遅すぎて世の中の流れに全くついていけてないからなあ 高い金出せば楽できるDBMSならわかるけどOracleは金も手間もかかるからな
ライセンスのマージンが美味しいと思ってるアホなSI以外は使う理由がない なのになんで大規模なとこOracle使うんでしょうね >>773
いつの時代の話だよw
大規模ほどOracleなんて使わない >>772
>>Oracleは金も手間もかかるからな
MySQLやPostgreSQLへOracleから移行する例が少ないね
何でだろう >>775
「自分が知らない/調べられない== 少ない」と思い込みたいのかな?
ググればいくらでも出てくるし
シェアの変遷を見ればどこに移行してるかなんて明らか >>776
PostgreSQLへ移行してるって話かね
世界的にはMySQLだけど 結局RACだろ。RACがいらないならOracle使う意味はない。 ちょいと教えて欲しい。
psqlで
テーブル存在しない状態で
DROP TABLE IF EXISTS aaa;
をやると
NOTICE: table "aaa" does not exist, skipping
と表示されるけど、これを抑制するオプションとか無いかな?(´・ω・`) interval 型の列を分や秒の値にした結果をselect文で得るにはどうすればよいですか。
列1: name text型
列2: term interval型
select name, term, ??? from table1
得たい結果
期間1, 00:32:00, 32
期間2, 02:05:00, 125 EXTRACT(EPOCH FROM INTERVAL term)で秒になる 同一サーバ(PC)で、
データベース - スキーマ - テーブル
となっています。
別のデータベースのテーブルを直接参照する事は
できますか? PostgreSQLの初心者です。
バージョン11をLinuxディストロに入れました。
サーバーの起動方法がいくつかあることを知りました。
どれが正しいやり方なのか、あるいは異なる意味を持つ起動方法なのか
わかりません。
PostgreSQLをインストールしたときには
pg_ctlcluster 11 main start
という起動方法を指示されました。
PostgreSQL11のドキュメントにしたがってデータベースクラスタなるものを作成したときには、
pg_ctl -D /usr/local/pgsql/data -l <ログファイル> start
という起動方法を指示されました。
Linuxでサービスを管理をする方法として
systemctl start postgresql
service postgresql start
といったものもあります。
これらはそれぞれ違う用途による起動方法でしょうか?
それとも好きな起動方法を選択できるんでしょうか?
pg_ctlclusterがpostgresユーザー権限で操作できることは知っています。 >>790
むしろ、Linuxの初心者でもあるな?
OSも書かんと。CentOS8? >>791
返事くださってありがとうございます。Debian10です。
どの起動方法も可能ですが、
異なる起動方法によって何か挙動が異なるのか迷って
経験のある方に助言をいただきたくて。 >>792
やみくもにネットの情報を頼りにするより、ちゃんとまとまった古本でも買った方がいい。
何がなんだか自分でもわからなくなるぞ。PostgreSQLの世界はこれが普通というのがないんだから。 >>793-794
大変ありがたい助言。参考にさせていただきます。 >>792
Linuxがsystemd系ならsystemctlコマンドを使うべきだと思う。
挙動が違うかどうかは設定による。
そのへんが気になるなら、他人に聞くのではなく、自分で自分のマシンを確認するべき。
man systemd.serviceとかから?
https://qiita.com/JhonnyBravo/items/a28074c20fa9adf02be3 >>796 ありがとうございます。
その後、さらにいろいろ調べつつ試した結果、
PostgreSQLには同じ操作をするのにいくつかの異なる方法(ラッパー)が用意されていて
複雑であることが分かりました。
Linuxディストリビューションのパッケージを利用した場合、
そのディストロの流儀に第一に従うべきかもしれません。
とすると、root権限でもってsystemctlかserviceコマンドでPostgreSQLサーバを起動することになりそうですが、
PostgreSQL11のドキュメントには次のように書かれてありました。
https://www.postgresql.jp/document/11/html/server-start.html
{何を実行するにしても、サーバはPostgreSQLユーザアカウントで起動させなければなりません。
rootであってはいけませんし、他のユーザでもいけません。}
このドキュメントに従う場合、systemctlやserviceは使えなさそうです。
しかしpostgresになってpg_ctlclusterで起動したとき、
Warning: the cluster will not be running as a systemd service. Consider using systemctl
という警告メッセージが表示されるのでsystemctlを使うべきことを示唆しているように思えます。
ちなみに、pg_ctlclusterを使って起動した場合、
systemctl status postgresqlでは停止中と表示されてしまいます。
今のところ分かったのはこんなところです。
何かお気づきの点があったら助言いただけるとありがたいです。 pg_ctlclusterを使って起動した場合systemctlには反映されず、
systemctlを使って起動した場合pg_ctlclusterに反映されます。 >>797
ためしにrootでsystemctl startしてから、起動されたプロセスのユーザーをpsでちゃんと確認してみろ。
rootで実行したからって、プロセスがrootとは限らん。
サービスの多くは専用ユーザーを割り当てるのがあたりまえ。ドキュメントにあるのはその念押しみたいなもん。
詳しくは、マシンにたぶんあるサービスのユニットファイル(サービス名.service?)を探して読め。
なかったら、init.dの起動スクリプトかな?
どうやって起動するかが書いてあるから。ユーザーとかオプションとか。 >>799
おっしゃるとおりでした。ps axuで調べたらUSERがpostgresでした。 ポスグレはOSと密接だからrootユーザーが基本。
SQL Serverは管理者権限のあるローカルユーザー
Oracle DatabaseはOracle Database専用ユーザーを作って使用する 自分の知っている世界だけでものをいうやつは必ずいる。
必ずこうと言っているわけではないので、その人の主観ではおかしいことになるのは理解できる。 ポスグレに関してはrootユーザー以外なら、ポスグレ専用ユーザーを作って使う。ポスグレがOSSだと知っていれば、いろんな権限がないと不都合なので、自身があれば自由にしてくれ。 まあ、ユーザーをそんなに意識することはないけどな。
サービスが起動されるときに自動的に使用されるもんだし、ログインして使うもんではないし。 どのOSユーザーで動いているのか意識しないなんてありえないだろ いちいち意識なんかしねえわ。
最初にきっちり設定しとけよ。 >>809 みたいなのがいるから、rootユーザーを使うことになったりする。 OSSなのに他人にお膳立てしてもらうが当たり前というのはおかしすぎる。 Webプログラム上にrootという名前とパスワードを書き込んでおくのは常識 なぜマルチユーザーにしないといけないのかわかってないやつは、結局、何もかもできる便利な管理者ユーザーでやってしまう。 学習していて、継続的アーカイブとポイントインタイムリカバリがよく分からないのですが・・・・
https://www.postgresql.jp/document/12/html/continuous-archiving.html
https://youtu.be/MCgWUyKQ6YM?t=2744
リストア時に消してしまうWAL(動画でいうWAL1~3)は、なぜ消してしまって復元できるのですか?
ドキュメントの方には、
>少なくともバックアップの開始時点まで遡る、連続した一連のアーカイブ済みWALファイルが必要です。
と買いてあるにもかかわらず、WAL1~3が抜けてしまって戻せる理由のが不思議でたまりません >>819
それ資料と説明の仕方が悪いと思う。
WAL1〜3はアーカイブ(バックアップ)されているから大丈夫という意味だけど、メトロの女講師の説明がおかしくてわかりにくくなっている。
この講師の説明だとわかっている人間でないとわからないと思う。 勝手にぽすぐれって読んでたんですが、みなさんぽすとぐれすって読んでるんですか? >>820
アーカイブされたWALはどこかにあるのが前提なんですね
ありがとうございます >>821
ポスグレと呼ぶのは日本の通称
ポストグレスは英語圏の通称
ポストグレエスキューエルは、最近では無難な言い方。
ポストグレスキューエルは英語圏のださいオナニー表現で、あまり言われない。
技術者同士ならポスグレ、外国人がいる場合はポストグレス、一般人がいる場合はポストグレエスキューエル。
もともとはPostgresが製品名だから、グローバルではポストグレス。 >>824
アーカイブファイルに同じ番号をつけて説明しているから、あの動画はわかりにくい。
あの動画のメトロの女の知識があやしい。本当に理解してないのに台本を読んでいるから、あんな体たらくになっている。 >>825
ポスグレって読んでたのが自分だけかと思ったのですが、日本の通称ならまあ間違いではなかったということですね
それなら今後もポスグレでいきます ポスト+イングレスが語源なんだから、やっぱポストグレスがかっこいいでしょ! 英語ではpost-gresで2音節だけど
日本語でポストグレスというと6音節と長く
さらに「ト → グ」が発音しにくいので
ポスグレという呼びやすい略称が定着 フルマネージドで外部から使えるサービスで、一番安いのってどこですか?
素人管理はやっぱ危ない気がしてきたぜ >>830
AWSのRDS serverlessはどう?
要件わからんけど運用の手間はほとんどかからないイメージだけど。 インフラもアプリも手間がかからないように開発しないと手詰まりになる ロジカルレプリケーションで質問
pgadmin上からCREATE PUBLISHは出来たのにCREATE SUBSCRIPTIONがクエリ処理中のまま帰ってこない…これは何故?
wal_levelはパブリッシュ側、サブスク側共にlogicalにしてる
他になんか設定抜けてる?
アクセス設定は
all all 0.0.0.0/0
とかにはしてあるんだけど… 自己解決
というかアクセス設定をmd5からtrustにしないとダメなの?
んー、なんか納得いかないんだけど… 連投で申し訳ない
パブリッシュ、サブスクそれぞれの現在の状態ってどうやれば取れるの?
とあるホストで動いてるパブリッシュの一覧とか
サブスク側のサブスク一覧とか
エラーで止まってるとか、動いてるとかそういうの pg_stat_replication
pg_stat_subscription
かな。
状態確認するのならまず統計情報ビューを確認。
一覧だけならpsqlのメタコマンドにもあるみたい。 あああああ
どこ見ても関数の引数がNULLだったときの動作が書いてない
なんかNullになるっぽいことが質問サイトとかかいてあるが
確実なことがなんもわからん
ただのTO_CHAR
公式ドキュメントから
SQL標準
はてはOracleまで似た情報内科みたのに
めちゃくちゃよく起こることじゃん
なんで?どうなってんのこれ?! >>842
元々Oracle使ってた?
Oracleのnullの扱いが特殊で、nullに甘いと言うか…
気をつけた方がいいよ
特に文字列項目はnull非許容にした方が良い PGMiner 対策セキュリティとして、信頼できないユーザから pg_execute_server_program 特権を剥奪する手順を教えてください PGMinerって初耳でした。難しいことやっているんですね。
でもそもそも信頼できないユーザからは実行出来なければいいんじゃないですかね?
とはいってもそんなことは百も承知だとは思うので、もしよかったらなんでユーザ制御のみではいけないのか教えてもらえませんか?
どういうシステムか興味があるので。 pg_execute_server_programって明示的に与えない限り付与されないんだから、
管理者権限の管理と監査しかないんじゃないの。 >>841です
色んな状態をPgAdminのクエリから取得出来るのは分かったけどロジカルレプリケーション自体を管理するソフトみたいなのはないのね…
ロジカルレプリケーション管理ソフトのオススメあったら教えて
出来ればGUIでグラフィカルにこのマシンのこのDBをPUBLICATIONに設定
別のマシンのこのDBをドラッグ&ドロップでSUBSCRIPTIONに設定みたいなソフトあると嬉しい
無いなら管理ソフト作るつもりだけど…面倒なので既にあるならそっち使いたい… JDBCがExceptionでもエラーログ吐かないとかあたまおかしくないですか JDBCドライバがログ吐くの、それめっちゃウザいのでは…
それくらいアプリ側で捕捉して、アプリ側が思うようにログ吐こうぜ Windows10でグループポリシーのスタート/シャットダウンスクリプトで他PCにSQLコマンド送信しようとすると止まってしまうけやり方が悪いんかな >>851
NetCOBOLでプログラムソース引き継ぎリコンパイルか
大変だな Windowsでログを日本語にしている場合、基本Shift-JISだけどたまにUTF-8で書かれて文字化けするのどうすばなおるの?
例えばこれはUTF-8で書かれてしまう "自動VACUUM: 孤立した一時テーブル"postgres.pg_temp_3.fetchchunks"を削除します" shift-jisでログを吐くように設定すれば良いのは? japanese_japan.932に設定しててほとんどはそれで書き込まれるけどごく一部だけ文字化けしてる。試しにUTF-8で開いたらその文字化けしてた行だけは読めた pgAdmin3ってPosgreのバージョンいくつまで対応してるの?
pgAdmin4はブラウザアプリになっちゃって使い悪すぎる・・・ >>858
4が9.2からだから、その前までじゃね?
あと、PostgreSQLね PostgreSQL 13のCOPYコマンドでCSVファイルをテーブルへインポートするとき、
CSVファイルの一行あたりの値の数とテーブルの列数が同じときは
テーブルの列名を指定しないでもインポートできるじゃないですが
これなんですが、CSVファイルは1行にデータが500個あって、テーブルが501列ある、なんて場合、
列名を指定しないと「missing data for column 〇〇」なんて出てしまいますが、エラーを出させず、
テーブルの先頭500列にだけ値を入れたいって場合って、
やっぱりCOPYするときに列名を指定しないとダメですかね
同じようなことをしたいテーブルが沢山あるのですが、列数が200とか300とかそんなのばかりで
どうにか手間をかけずにできないか方法探してます COPYコマンドだけで対処する方法はないんじゃないか?
csvkitみたいの使ってCOPY FROM PROGRAMするか
カラム指定付きのCOPYコマンドを生成する簡単なスクリプトを書くかかな csvの全ての行の最後にカンマ入れればいいんじゃない? 回答どうもです
>>861
そうですか…
COPYコマンド作成スクリプト、かなぁ
>>862
たしかにそれもよさそうですね
やり方考えてみます Pgadmin4 で外部プログラムを呼び出したり
プラグインを追加したりってどうやったらできますでしょうか。 すいません。教えてください。
Win10にPostgresqlを何度かインストールしているのですが、psqlに”そのパスワードしらね”って言われてしまいます。
此方を参考にしてみたんですが、pgpass.confが見つかりませんでした。
他に何かインストール時に気を付ける事は有りますか?? PostgreSQL 10 で判らないことあるんだけど、教えてクレメンス・・・m(_ _)m
バージョン10.16(Ubuntu18.04 LTSの aptコマンドで入れられる最新?)でDBの操作は全部phppgadmin入れてブラウザからやってる.
で、phppgadminで「SQL」ってリンクがあってそれを使ってSQL実行するとエラーになる。
phppgadmin使うのが悪いのか、phppgadminで書いてるSQLが悪いのか、ほかに理由があるのか、素人なのでわからんのです。
tagIndexっていうテーブルを作って、booleanでoutputflag ってのを定義しておいて、
UPDATE public."tagIndex" SET outputflag='f
で「tagIndexっていうテーブルがない」(relation "public.tagIndex" dose not exist)って怒られる。
C#のNpgSQLつかってupdate文でそのテーブルの更新はできてる。
phppgadminで中身弄ろうとしてうまくいかない。
エラーになってるSQLが、SET句でエラーになるなら 'f' じゃなくて false と書けばいいんじゃね?とか想像つくけどテーブルが無いといわれるとお手上げっす・・・orz 自己解決。
update "public"."tagIndex" SET outputflag=true;
で行けた。
public."テーブル名” と "public"."テーブル名" っていう、スキーマも "" でくくってるかどうかの違いだけ・・・?
83.とか9.2の頃はこんなことやらなくてもよかったような覚えがあるから「面倒になったなー」ってのが正直な感想でした・・・ > UPDATE public."tagIndex" SET outputflag='f';
PostgreSQL 11.10でも別にエラーにならないみたいよ
ttps://extendsclass.com/postgresql/4f05be9 PostgreSQLでのテーブルの列数の上限は1,600列までですが、
私のデータでは5,000列のテーブルが必要です。
先ほどCREATE TABLEをしようとしたらエラーが出ました。
列数が3列のときは正常にテーブルが作成できます。
多分、1,000列ずつに分割して、あとで結合するのだと思いますが、
その参考となるサイトをご存じないでしょうか?
検索してもまったく見つかりません。 >>871
共通のPrimary Key + 他の列で分割すればいいだけ
まあ5,000列はRDBで扱うのに適さないから
リファクタリングするか目的に適した別の仕組みを使ったほうがいいぞ >>872
ありがとうございます。
そのサイトは質問前に読んでいましたが、具体的にイメージできなかったです。
一人目の回答者の勧めるソースコードの変更は、
不具合が出るリスクがある上に、会社の他の人たちにも使ってもらうので難しいです。
二人目の回答者は、複数のテーブルに保存し、Viewを使ってデータを提供する方法を勧めているようです。
ただ、Viewもテーブルと同様の列数の制限がある、と書いてあるので
「結局、できるの?できないの?どっちなの?」という感じです・・・。
ちなみに、ユーザーはGUIで操作するだけで、クエリーはそれに基づいてプログラム内で生成するので、
ややこしいクエリーになっても対応できます。
三人目の回答者は、
1. 1,600列無くてもいいように再設計する
→できるならそうしたいですが、方法が分かりません
2. 超過した列にはJSON/JSONBフィールドを使う
→JSONは分かりますが、どんな技なのか分かりません
3. スプレッドシートのようなテーブルにする
→これは、spreadsheet_tableが親でspreadsheet_cellが子みたいになっていて、
spreadsheet_cell一つにつき一つのデータが入るようになっていますか?
(行、列)を(1, 1), (1, 2), (1, 3), …と変えていくことでセルの位置を指定できるみたいですね。
ただ、検索などは非常に遅そうですね…。 >>873
ありがとうございます。
> 共通のPrimary Key + 他の列で分割すればいいだけ
具体的にはどうなりますか?
私の場合を説明しますと、
データ列が始まるまでに5列ほど属性がありまして
そのうちの最初の2列がPrimary Keyです。
一枚岩だとこんな感じです:
Lot (PK), Number (PK), X, Y, Z, Data0001, Data0002, ... Data5000
これを
Lot (PK), Number (PK), X, Y, Z, Data0001, Data0002, ... Data5000
Lot (PK), Number (PK), X, Y, Z, Data1001, Data1002, ... Data2000
Lot (PK), Number (PK), X, Y, Z, Data2001, Data2002, ... Data3000
Lot (PK), Number (PK), X, Y, Z, Data3001, Data3002, ... Data4000
Lot (PK), Number (PK), X, Y, Z, Data4001, Data4002, ... Data5000
…に分ける感じですか?
ただ、これだとX, Y, Zが無駄に被るので正規化して
Lot (PK), Number (PK), X, Y, Z
だけのテーブルを作り、
Lot (PK), Number (PK), Data0001, Data0002, ... Data5000
Lot (PK), Number (PK), Data1001, Data1002, ... Data2000
Lot (PK), Number (PK), Data2001, Data2002, ... Data3000
Lot (PK), Number (PK), Data3001, Data3002, ... Data4000
Lot (PK), Number (PK), Data4001, Data4002, ... Data5000
…にする感じでしょうか? >>875
それよほど特殊な事情がない限りRDB的には列持ちじゃなく行持ちにするケースだと思う
親テーブル: Lot (PK), Number (PK), X, Y, Z
子テーブル: Lot (PK), Number (PK), Data_No (PK), Data
この形だと親テーブルのレコード1件に対し子テーブルのレコードが5000件
特殊事情があるなら
そういう同じ種類のデータの繰り返しはArray Type使う
https://www.postgresql.org/docs/13/arrays.html >>871
これは余計なお世話だけど、どの設計がよいかを単体で検証すると思うんだが、
将来的にデータ量や参照量や更新量が増えた場合の速度低下(レスポンス)や、
データ構造(列数とかデータ型)が変わったときの保守に要する時間(ダウンタイム)も考慮して
比較したほうがいいぞ。大量の実データがなくてもダミーデータを生成して。 >>877
>将来的にデータ量や参照量や更新量が増えた場合
そういう用途だとは思えないけどな >>876
ありがとうございます。
>親テーブル: Lot (PK), Number (PK), X, Y, Z
>子テーブル: Lot (PK), Number (PK), Data_No (PK), Data
>
>この形だと親テーブルのレコード1件に対し子テーブルのレコードが5000件
はい、エラーが回避できるならその形式でもいいです。
ただ、行も10万件/1製品ぐらいあります。
この場合、1製品分の全データだと
親テーブルのレコードが100,000件
子テーブルのレコードが5,000件*100,000件=500,000,000件 (5億件)
…になります。
しかも、こういうデータが数十製品あります。
これは特殊な事情に該当しますでしょうか?
ちなみに、データ部分は同じ種類のデータの繰り返し(すべてfloat)ではあります。
上記を踏まえますと、Array Typeの方が近道そうでしょうか?
すみません、DBはド素人ですので…。 >>877
ありがとうございます。
仰る通り、実行速度や保守性も考慮したいです。
5,000列というのは平均値で、増える傾向にありますが、今後も10,000列は超えないと予想されています。
データ自体は一度読み込んだら更新は必要ありませんが、計算結果はDBに残したいです。
新規製品のテーブル追加は大量に発生します。
大量の実データは既にあります。 >>878
きっと、私の実力的に無理という話ですよね。
DBはド素人で、このデータ量でどのぐらいの速度で動作するのか不明なので、
まずは動作するものを実装したいです。 >>879
そういう用途に該当するかどうか、軽く説明しておきます。
1製品のデータ量は
100,000行
10,000列
が上限とします。
しかし、そんなデータが数十製品×数十ロットあります。
参照量はユーザー数が増えると増えますが、
ユーザー数は多くて300人程度、
同時に使用するのは多くて10〜20人程度と考えます。
(計算結果をDBに残さずに、Excel形式で残す方式であれば)
更新量をゼロにできます。 それだけの規模は、まったくの初心者がやるもんでもなさそうな。
失敗上等な状況ならええけど。
ほかに頼んだほうがええんちゃうかなー。。。 >>880
どういう構造にするのがいいかはデータ量やデータ型以外にそのデータをどう利用するのかに強く依存してる
特殊事情ってのは行持ちだとどうしても困る、求められる要件を実現できないという事情
その判断自体が難しいようなら
性能面の検証も含めてDB設計してくれるところに依頼するか
自分で色んなやり方を試して検証してみるかになるよ 読み取り専用で特定のデータ列だけ欲しいとか
特定のデータ列がある範囲にあるものが欲しいとかそういうクエリがなくて
データ列は常に全部一括で取得して計算処理する前提なら列持ち(横持ち)を軸に考えてもいいと思うよ
その場合は自分ならまずArrayを試す
(RDB前提でかつPostgres前提の場合に限るけど) 時系列の生の実測データだとは思ってたけど
それ300人で使うってなんかすごいね
サマったデータだけ使えればいいような気がするんだけど
300人が違う角度で生データから統計処理とかしたい感じなのかな? >>884-885
お二人ともありがとうございます。
そうですね、まったくの初心者にしては規模が大きいですよね。
お陰様で、いくつか選択肢が見えてきたので、まずは自分で試してみます。
Array Typeが条件(同じ種類のデータの繰り返し)に合ってそうなので、まずはそれを実装してみます。
行持ちも出来るならやってみて実行速度などを比較できるといいですね。 >>886
ありがとうございます。
はい、全部一括で計算処理する前提です。
すみません、列持ち(横持ち)というのは、私が>>875で書いた、
Lot (PK), Number (PK), X, Y, Z
だけのテーブルを作り、
Lot (PK), Number (PK), Data0001, Data0002, ... Data5000
Lot (PK), Number (PK), Data1001, Data1002, ... Data2000
Lot (PK), Number (PK), Data2001, Data2002, ... Data3000
Lot (PK), Number (PK), Data3001, Data3002, ... Data4000
Lot (PK), Number (PK), Data4001, Data4002, ... Data5000
…のような感じでしょうか?
Arrayが良さそうなんですね。
環境は RDB かつ Postgres ですのでOKです。
では、やはりまずはArrayから試してみます。 >>887
はい、その通りです。
基本の統計情報は全部一括ですが、
測定項目同士の相関などは各人が個別に見る感じです。 Lot,Number毎に扱うのであれば、
Lot (PK), Number (PK), X, Y, Z, data
ってテーブルにして、データをJSONとか扱いやすいテキストにしてdataカラムにぶちこんでおくってのも楽かもよ 列の変更があったらALTER TABLEなん?
死にそう。w 1つのテーブルがそんなに大きいなんて、やりたいことは単純かもしれないけど、運用は上級じゃない?
300人もいるなら他に誰か適任者いないの? 悲惨な未来しか見えない。。
そもそも新人だって言うなら、クリティカルな業務ではないのだろうけど。 Azureでデータベース間通信するには
Azureサービスに対してアクセス全開放しないとできないと言われとても困ってる
Awsも同じなんだろうか
同じデータベースに違うソースのまぜるってやりたくないな PG-Stromって実際お幾ら万円なんですか?
何万円なのか、何十万円なのか、何百万円なのか、オーダーだけでも知りたい pdadmin自体は関係ないけど
server modeで使っててweb serverでlog4j使ってるなら対策必要 >>897
PostgreSQL無関係
基本的にJavaのセキュリティホール ワイ、ブラウザ(chrome)使ってpgadminいじってるって事は、Apache使ってるんじゃ?とか思ったんだが、そーでもないのか。 pgAdminそのものの内部はWebブラウザだけどな。 初心者です。
hinemos の環境移行をしようと、DBのdump で過去Data移行できないか試しています。
DB のdump は下記コマンドで吸い出しました。
./pg_dump -h localhost -U hinemos -p 24001 > /tmp/hinemos.sql
リストアコマンドが判りません、そうすれば入りますか?
./psql -h localhost -p 24001 -U hinemos -f /tmp/hinemos.sql
これだと、「ERROR:」がいっぱい出ます。 >これだと、「ERROR:」がいっぱい出ます。
多分既にテーブルがある状態でリストアしようとしてエラーがでていると予想
もしそうなら↓のどっちかで対応できると思う
・dbを空に(一度dropして再度作成)してリストアを実行
・ダンプ時に-cをつける(バージョンによっては--if-existsもつける)
pg_dump -h localhost -U hinemos -p 24001 --if-exists -c > /tmp/hinemos.sql function内からprocedure呼び出せる? 質問なのですが
インデックスがある一時テーブルにselectかけるとき
ヒント区index scanを指定しても
いくらやっても適用されず
実行計画を見てもbitmap index scanになってしまいます。
どなたかこの問題に心当たりのある方いらっしゃいませんか?
posgre側がこっちの方が早いからと判断してやってるのかかと思ったのですが、bitmapの方が遅いんですよね… >>909
まずはEXPLAIN ANALYZE <query> でestimated rowsとactual rowsの差を確認
次にANALYZE <table>を実行してからEXPLAIN ANALYZEして差が出るかどうかを確認 >>910
確認してからまた対応が違うってことかな?
もうちょい噛み砕いてけろぉ、おじさんsql詳しくナインだよ >>911
SQL関係ない。
実行計画を判断する元になる情報が実態とあってるかを確認しろって909は言ってる。
一時テーブルはautovacuum 対象外だからそのセッション内でanalyzeする必要あるはず。 ロールの権限について学習したいので教えてください
https://www.postgresql.jp/document/13/html/sql-grant.html
データベースオブジェクト間で包含関係にあるものの権限や、デフォルトの権限についてよくわかりません
あるロールにデータベースに権限を与えた場合、中のテーブル等にも権限を与えたことにはなるのですか?
逆に、テーブルのみに権限を与えた場合、データベースのアクセス権限は自動的に与えられるのですか? >>913
データベース単位の権限なんてまず使わないと思うぞ。アクセスできるかできないかくらいの制御程度しかできない。
そんな粒度では意味がないし。
テーブル単位の権限付与が面倒だから、特定の権限をまとめたロールを作って、ロールで権限を付与する。 win10 pro postgresql11について質問させてください。
postgresqlのサービスを止めることなく、w10標準のバックアップツールで\dataをフォルダごとnasにバックアップして問題ないでしょうか? 例えば↓みたいになったとしたら
バックアップツールがファイルAをコピー
バックアップツールがファイルBをコピー
DBがファイルAとCにデータを書き込む
バックアップツールがファイルCをコピー
コピー先のファイルAはDBがデータを書き込む前の内容で、ファイルCはDBがデータを書き込んだ後の内容になるので困ると思う
25.2. ファイルシステムレベルのバックアップ
https://www.postgresql.jp/document/11/html/backup-file.html ありがとうございます。サービスを止めてからバックアップすることにします。 https://www.postgresql.jp/document/11/html/app-pgdump.html
> pg_dumpはPostgreSQLデータベースをバックアップするユーティリティです。 データベースを使用中であっても一貫性のあるバックアップを作成することができます。 pg_dumpは他のユーザによるデータベースへのアクセス(読み書き)をブロックしません。 pg_basebackup使えば稼働中でもデータディレクトリまるごとバックアップできる。
ただし対象サーバーがレプリケーションのマスターとして動作できるように設定しておく必要あり。 教えてください。
ECPGからPostgresqlのストアドを呼び出し、結果をchar型の配列で受け取りたいのですがうまくいかなくて…
そもそも出来るのでしょうか? >>924
PRO*CのPostgresql版みたいな奴です。 そもそもストアドで配列で値返せるのか?
ファンクションになるんじゃ無いの? Cとの型変換が必要かどうかで違いがあるんじゃないの?
charじゃなく”char”ならOKとか Postgresの文字列型はtext型とみなす仕様が根底にある。
同じ文字データ型でもキャストがうまくいかないのがはまるところ。 >>931
ありがとうございます!
今まで色々やってみてまだ出来ていないです…
明日やってみます! >>932、933、934、935
ありがとうございます!
明日も色々やってみます。 やっぱりECPGの実行体起動すると以下で落ちちゃいますね…
[malformed array literal: "" on line 53][-400] zip版ダウンロードしたら、pgAdmin4のフォルダ名が長すぎて解凍失敗するわ。
こないだまで解凍出来たのに。
インストーラー使ってインストールしたらアンインストール中にエラーになるわ。
255文字制限解除しないと使えないのが普通だっけ? >>939
プラットフォーム名が書かれていないし、「255文字制限解除」が何か分からないので外すかもしれんが、
インストール先のファイルシステムはサポートされているもの?
仮にWindowsとした場合、FATやFAT32はサポートされていない。
それから、これは未確認だけど、もし新しいZIP64フォーマットが採用されてるなら、対応するアーカイバを使うとか。
パーミッション、あるいは空き容量が不足していて伸長が正しくできない可能性は? zip解凍できないのはpostgre以前にOSの問題だね。 問題ではなく、仕様やろ。
C:¥ルートにでも展開すりゃええんちゃうの? 少しお聞きしたいのですが
現在社内にある旧商品管理鯖(引退済み)のマシンを引っ張り出してきたのですが
PostgreSQLのVerが7.3.10でした。
この状態からpg_dumpallでデータを取り出すことは出来たのですが、
別のサーバにPostgreSQLのVer12をインストールして、
イカのコマンドを打ったところ、
psql -U postgres -f /backup.db > update.log
画像の様な状態になってどうしたものかと考えております。
エラーでキーが重複してることや、
multiple primary keys for table are not allowedのように
複数の主キーは許可されていませんと出てきているのですが、
これは、SQLのバージョンを一気に上げすぎているからなのでしょうか?
それとも、データベース自体が壊れている可能性があるのでしょうか?
(過去に鯖の半クラッシュが何度かあった模様)
よろしくお願いします。
https://i.imgur.com/daRuFqr.jpg
https://i.imgur.com/pCXROZr.jpg 自分なら、その方法がサポートされているか(バージョン間、手順)を調べて、
サポートされているようならログを見て起こっている問題・原因を把握したうえで対策を考える。 duplicate key value violates unique constraintとかあるようだけど、DBに既にテーブルがあったりしない? 初心者ですみません。既存TBLにカラム追加してレングス変わると影響大きいですか?当初TBL設計時にFILLER積んだほうが良いのでしょうか? 仕事で使ってるけど必要になったらカラムどんどん追加してるよ そんなのプログラムの作りによるんじゃないの
DBに依存しまくってると苦労する >>946
メインフレームのファイルのようなものじゃなくて、データファイルの内部は頻繁にデータの位置を変えている。
そんな古風な仕組みではない。 外部キー制約を一時的に変更するにはどうすればいいでしょうか?
通常は、ON UPDATE RESTRICT で、一時的に ON UPDATE CASCADE にしてクエリ実行後に RESTRICT に戻すにはどうすればいいのでしょうか?
ADD CONSTRAINT と DROP CONSTRAINT の方法は分かるのですが・・・ ALTER TABLEのALTER CONSTRAINTではできないのでDROP/ADDする
ALTER TABLE <table_name>
DROP CONSTRAINT <fk_name>,
ADD CONSTRAINT <fk_name> FOREGIN KEY … ON UPDATE CASCADE; 物理外部キーを作るくらいなら、論理外部キーとしておいた方が楽。
ガチガチにしておいても、エラーハンドリングの実装がなければ意味がない。 update on conflictを使いまくってるとシーケンス値が上がりまくって、primary keyのidの値が飛びまくるんだけど
気にしたら負けかな。
もちろん綺麗に1 2 3とならない事は認識してるけど、1 1235 5493 29849 みたいに膨大な数飛びまくると…。
99%がupdateの場合なんだけど、update returningして件だったらinsertにした方がいいのかな
その場合ロックとか考えなきゃいけないのが大変なんだけど、もう避けられないのかな insert on conflict do update(いわゆるupsert)のことだよね?
conflictの条件をprimary keyにできないならPKのシーケンスが飛びまくるのはしょうがないと思う
ただ99%がupdateならupdateしてからinsertのほうが性能は良くなるような気がする
ロックを考えなきゃいけないというのはよくわからない
今も同じじゃない? 言いたいのはロックじゃなくてトランザクションじゃないかな >>957-958
ありがとうございます。
on conflict do updateであれば、トランザクション貼らずともコマンドを実行するだけで確実にinsertかupdateが確定で成功するけど
update → insertだと両方updateが0件になって両方insertしようとして片方がエラー という事が起きるかなと認識していました update → insert on conflict do updateをトランザクションでくくれば今と同じなんじゃないかな
ただREAD COMMITEDならlost updateが発生してるだろうから
本当にそれが望ましいのかよく考えたほうがいいと思う insert into 〜 on conflict do updateでシーケンス値が増えるのが我慢できなくて
insert into 〜 on conflict do update相当の処理をトランザクションで書いているのですが
これって最終的にテーブルに対してACCESS exclusiveロック(selectすら妨害する最強ロック)をかける事が必須だったりしますか?
上記のクエリと同じ処理を行いたい場合、以下の処理を行う必要があると思います
・select文で該当の行が既にあるかをチェック
・select文の結果を見て、該当の行があればupdate
・select文の結果を見て、該当の行が無ければinsert
トランザクション1と2が両方同じタイミングでselect文を発行して、どっちもresultが0だった場合、どっちもinsertをしようとしてしまう。
だからどちらか片方のselect文は、他のinsertが終わるまで待ってから行って、result 1を取得する必要がある。
最初は行ロックでいいかな?と思ったのですが、最初にselectをした段階で対象の行は「存在しない」ので行ロックがかけれません。
となると、対象のテーブルに一番強い権限のACCESS exclusiveロックをかける必要がある?と思います。
ですが、それだとdo updateとは無関係のただのselect文に対してもロックがかかってしまいます。
この一連のdo update〜の処理でだけ排他ロックをかけたいのですが、そんな事出来るのでしょうか? 違った。
SHARE UPDATE exclusiveモードを使えばよかったのか
失礼しました 同じ話題を引っ張り続けて申し訳ないけど、自分でinsert〜on conflict do update(upsert)相当の事をするのが面倒すぎて、趣味ですら面倒で手が止まる。
仕事じゃ絶対提案出来ないな(ダルすぎて)
自分の場合は実際には1000件単位のデータをupsertしてるんだけど、この数だと1件づつselect→(update or insert)は遅すぎる。
select文で1000件のデータのユニークキーに対して長いwhere 文を作る。
( SELECT id,key FROM tbl WHERE key in ( $1 , $2 , $3 .... , $1000) )
select文の結果を入れたい1000件単位のデータと比較して、1件づつinsertするかupdateするかを判定する
insert、updateも1件づつやるとトランザクションしても遅いから1リクエストで済むように動的にクエリ文を作る。
( INSERT INTO tbl (key) VALUES ($1),($2)... )
( UPDATE tbl SET key=c.key FROM( VALUES ( ($1,$2),($3,$4),...) AS c(id,key) WHERE tbl.id=c.id )
そしてupsertから加えた機能で、含まれてないデータをDELETEもするようにしてるからさらにクエリ文が増える。
SQL文の文字列をプログラムから動的に作るんじゃなくて、
O/Rマッパーというのを使ってもっと構造的に出来るようにするべきなんだろうか…。
ちなみにnode.jsです。 その1000件とかの入力データに同じユニークキーを対象としたデータがあった場合にどうしたいの?
何か累積値や合計値を計算してて必ずカウントアップしていかないといけないとか
入力データ内の順序で後のデータを正として先のデータは捨てられてもいいとか
>>962
>SHARE UPDATE exclusiveモードを使えばよかったのか
これだとテーブルロックになるので1つのトランザクションが終了するまで次のトランザクションは待つことになる
これで十分なユースケースならそもそも同じキーに対して同時にinsertが実行される心配しなくてもいいよね?分離レベルをSerializableにすれば該当キーがロックされるだけで済むはず ごめんなさい、SQLクエリについてはSHARE UPDATE exclusiveのロックを取得する。で何の問題もありません。
自分が今悩んでいるのは、SQL文が動的になって書くのが大変という事です。
1000件あるデータ以下のような1回のinsert文で全ての値を登録するなどの事をしています。
insert into tbl (key1,key2,key3) values(1,2,3),(4,5,6),(7,8,9);
nodejsの場合、プログラムの中からSQLを実行する時は以下のような書き方をするのですが
query(`insert into tbl(key)values($1)`,[1]);
これが可変になると、以下のような書き方になってものすごく読みにくく感じます。実際はパラメーター複数あってさらに複雑ですし。
query(`insert into tbl(key)values ${insertDatas.map((v,i)=>`($${i+1})`).join(",")}`,insertDatas);
もちろんプログラムとしては全く難しくないのですが、素直に言ってダルい。$が連続しているのも読みにくさが増す理由になってる。
なので、こういう場合はO/Rマッパーというものを使えば
文字列操作ではなく見やすい書き方になったり
1回頑張って作れば他のテーブルに横展開出来るから楽なのかな?という趣旨でした。
言語化するとposgresqlのスレで言う事じゃない気もして、申し訳ない。 ORMじゃなくてもbulk insert用のSQLを生成/フォーマットする機能のあるライブラリを選べばいいよ
>query(`insert into tbl(key)values ${insertDatas.map((v,i)=>`($${i+1})`).join(",")}`,insertDatas);
string interpolationに入れた場合に適切にエスケープしてくれるのかどうかちょっと怪しくない? ストアドファンクションでINSERTしたレコードを取得するにはどうすればいいでしょうか?
INSERTは下記のクエリで行っています。
RETURNS VOID になっている所を、RETURNS TABLEにしてレコードを取得したいのですが、具体的なソースコードが思いつきません。
https://ideone.com/5JPpQ4 >>968
解決した方法も書いておけよ。そうすることでQ&Aが成り立つし、次に困ったときに返信があることが期待できるようになるんだぞ。 RETURNINGやろ
それ以外で自決してたら知らん 解決した方法は下記です。
RETURNS TABLE - RETURN QUERY です。
https://ideone.com/kgQo96
もっといい方法もあると思いますが、自分では思い付きませんでした。 初心者はわかっている値を再度、SELECTしたりするよな。 すみません。
どこが悪いのでしょうか。
RETURN QUERY SELECT については、
使用時はプログラムで INSERTINCIDENT() に引数(incident_name, full_text, registered_by) を与えて呼び出し、
プログラムで与えた引数の値と、INSERT された値が一致するかどうかを比較する必要があるので、意図して SELECT しています。 ネタじゃなければ、確認することをくっつけて実行するのは素人だと思ってください。
そもそもincident_nameとfull_textが引数になってないでしょうに。 '件名',
'本文本文本文',
公表しているコードだとリテラル値を使っているだけなので、いきなり脳内情報を書き込まれてもわかりません。 >公表しているコードだとリテラル値を使っているだけなので、いきなり脳内情報を書き込まれてもわかりません。
すみません。引数をつけて書き直しました。
https://ideone.com/6Ufeev
>ネタじゃなければ、確認することをくっつけて実行するのは素人だと思ってください。
この件が、ソースコードのどの部分にあたるのか理解出来ていません。
おかしな理解のまま進みたくないので、教えて頂けないでしょうか。 グルグル回ってるな。
INSERTしたレコードの列値がすべてわかっているのに、そのレコードをSELECTするのはPostgreSQLを信用していないということなのか? idがストアドの中で採番されるからそれを取りたいんだろ。タイムスタンプなんかも。 SELECT文のFROM句にINSERTしてSELECTするファンクションを置きたい理由がわからない。
手続きをファンクションとして隠蔽したいんだろう。
idの最大値の求め方も同時実行の考慮なしだし、INSERTが想定通りだったか、自分で確認するらしいし、もはや目的がわからない。 >>984
>idの最大値の求め方も同時実行の考慮なしだし
SERIALIZABLEかもしれないよ INSERTが想定通りだったかSELECTで確認する
さらにそのSELECTが想定通りだったか・・・・詰み INSERT 時に採番される ID とタイムスタンプを取得したいので、ストアドプロシージャではなくストアドファンクションにしました。
ファンクションではトランザクションが使えないので、 serializable にする事で妥協しました。
全てのクエリが、ファンクションを呼び出すプログラム側 ( Npgsql ) の NpgsqlTransaction を使用するので、
プログラム側で IsolationLevel に Serializable を設定しています。
・ファンクションでトランザクションを使う方法
・ストアドプロシージャで戻り値を戻す方法
のいずれかが分かれば serializable 以外に出来るのですが、どうするべきなのかがよく分かりませんでした。 >>988
ネタじゃなく、知識がない状態で突貫でやらざるを得ない状態になっているのです・・・。 ストアドプロシージャにはOUTパラメータというものがあるんだよ Windowsの15.3をインストールしたけどpgadminが動かないね
海外の掲示板では15.2に戻せって言ってるっぽい
原因がPython側にあって修正する時間がないって回答きてるっぽいからしばらくバージョンアップ無理かな
やっぱネイティブじゃないとこんな事になっちゃうね どんな製品でも最新バージョンは様子見しておくもんなんだよ PostgreSQLは最新の15.3をインストール
添付のpgAdmin7.4はインストールしない
別途古いpgAdmin7.3をインストール
これでいけた Pgadmin4自体のデバッグログを出すにはどうしたら良いのでしょうか?
ググると「DBにxxの拡張を入れて〜」とかあるけど、そうじゃなくてpgadmin4のプログラム自体のログが見たいです。
AWSのrdsにssm経由で繋ごうとして、
psqlコマンドではpgpass.conf ファイルに設定したパスワードも読み込んで何も問題なく接続出来るんだけど、
psql -h localhost -p 57851 -U postgres -d postgres
pgadmin4ではconnection timeout expiredしか表示されなくて何も手がかりがなくて困ってます。
素のpsqlで繋がらないなら、DB側の設定やAWSのセキュリティグループを見るとかやりようはあるのでしょうが、pgadminだけで繋がらない状態です >>995
ありがとうございます。まさにここでした。
そしてログレベルを上げても接続エラーの詳細なログは出なくて
結局バックエンドのpythonにログを追加してデバッグして
最終的に接続できない理由はlocalhostと書いてあるからで127.0.0.1と書いたら繋がりました。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 2658日 17時間 26分 57秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。