X



トップページDB@2ch掲示板
1002コメント295KB
PostgreSQL Part.11©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001NAME IS NULL 転載ダメ©2ch.net
垢版 |
2016/05/03(火) 15:42:33.27ID:???
PostgreSQL (ぽすとぐれすきゅーえる, ぽすとぐれす) について語るスレです。

●関連サイト
PostgreSQL 本家
http://www.postgresql.org/
日本PostgreSQLユーザ会
http://www.postgresql.jp/
ドキュメント
http://www.postgresql.jp/document/current/html/
ダウンロード
http://www.postgresql.jp/PostgreSQL
Let's Postgres (ポータルサイト)
http://lets.postgresql.jp/
pgFoundry
http://pgfoundry.org/

●前スレ
PostgreSQL Part.10
http://echo.2ch.net/test/read.cgi/db/1393353314/
0783NAME IS NULL
垢版 |
2020/05/22(金) 22:11:07.19ID:wpCETL3Y
>>782
ありがとう愛してる(´・ω・`)
0784NAME IS NULL
垢版 |
2020/06/03(水) 22:04:55.17ID:???
interval 型の列を分や秒の値にした結果をselect文で得るにはどうすればよいですか。
列1: name text型
列2: term interval型
select name, term, ??? from table1
得たい結果
期間1, 00:32:00, 32
期間2, 02:05:00, 125
0785NAME IS NULL
垢版 |
2020/06/03(水) 22:33:07.02ID:???
EXTRACT(EPOCH FROM INTERVAL term)で秒になる
0786NAME IS NULL
垢版 |
2020/06/04(木) 01:20:56.02ID:???
ありがとうございます!
明日試してみます!
0787NAME IS NULL
垢版 |
2020/08/27(木) 10:19:05.33ID:BWndbaWN
同一サーバ(PC)で、
データベース - スキーマ - テーブル
となっています。
別のデータベースのテーブルを直接参照する事は
できますか?
0789NAME IS NULL
垢版 |
2020/08/27(木) 16:41:53.26ID:BWndbaWN
ありがとうございます。
頑張ってしらべてみます!
0790NAME IS NULL
垢版 |
2020/09/07(月) 16:06:23.68ID:???
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ユーザー権限で操作できることは知っています。
0791NAME IS NULL
垢版 |
2020/09/07(月) 17:27:41.79ID:???
>>790
むしろ、Linuxの初心者でもあるな?
OSも書かんと。CentOS8?
0792790
垢版 |
2020/09/07(月) 18:20:21.39ID:???
>>791
返事くださってありがとうございます。Debian10です。
どの起動方法も可能ですが、
異なる起動方法によって何か挙動が異なるのか迷って
経験のある方に助言をいただきたくて。
0794NAME IS NULL
垢版 |
2020/09/07(月) 20:00:31.66ID:VUeEFudZ
>>792
やみくもにネットの情報を頼りにするより、ちゃんとまとまった古本でも買った方がいい。

何がなんだか自分でもわからなくなるぞ。PostgreSQLの世界はこれが普通というのがないんだから。
0795790
垢版 |
2020/09/07(月) 20:41:28.81ID:???
>>793-794
大変ありがたい助言。参考にさせていただきます。
0796NAME IS NULL
垢版 |
2020/09/07(月) 20:58:30.91ID:???
>>792
Linuxがsystemd系ならsystemctlコマンドを使うべきだと思う。
挙動が違うかどうかは設定による。

そのへんが気になるなら、他人に聞くのではなく、自分で自分のマシンを確認するべき。
man systemd.serviceとかから?

https://qiita.com/JhonnyBravo/items/a28074c20fa9adf02be3
0797790
垢版 |
2020/09/09(水) 16:37:03.51ID:???
>>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では停止中と表示されてしまいます。

今のところ分かったのはこんなところです。
何かお気づきの点があったら助言いただけるとありがたいです。
0798790
垢版 |
2020/09/09(水) 17:20:50.29ID:???
pg_ctlclusterを使って起動した場合systemctlには反映されず、
systemctlを使って起動した場合pg_ctlclusterに反映されます。
0799NAME IS NULL
垢版 |
2020/09/09(水) 18:30:21.78ID:???
>>797
ためしにrootでsystemctl startしてから、起動されたプロセスのユーザーをpsでちゃんと確認してみろ。
rootで実行したからって、プロセスがrootとは限らん。
サービスの多くは専用ユーザーを割り当てるのがあたりまえ。ドキュメントにあるのはその念押しみたいなもん。

詳しくは、マシンにたぶんあるサービスのユニットファイル(サービス名.service?)を探して読め。
なかったら、init.dの起動スクリプトかな?
どうやって起動するかが書いてあるから。ユーザーとかオプションとか。
0800790
垢版 |
2020/09/09(水) 18:48:03.12ID:???
>>799
おっしゃるとおりでした。ps axuで調べたらUSERがpostgresでした。
0801NAME IS NULL
垢版 |
2020/09/09(水) 19:01:08.97ID:VZtlwKPH
ポスグレはOSと密接だからrootユーザーが基本。

SQL Serverは管理者権限のあるローカルユーザー

Oracle DatabaseはOracle Database専用ユーザーを作って使用する
0803NAME IS NULL
垢版 |
2020/09/09(水) 22:26:31.64ID:YAfXARE7
自分の知っている世界だけでものをいうやつは必ずいる。

必ずこうと言っているわけではないので、その人の主観ではおかしいことになるのは理解できる。
0804NAME IS NULL
垢版 |
2020/09/09(水) 22:29:22.49ID:YAfXARE7
ポスグレに関してはrootユーザー以外なら、ポスグレ専用ユーザーを作って使う。ポスグレがOSSだと知っていれば、いろんな権限がないと不都合なので、自身があれば自由にしてくれ。
0805NAME IS NULL
垢版 |
2020/09/10(木) 09:41:30.72ID:???
基本postgresで起動してます。
0806NAME IS NULL
垢版 |
2020/09/10(木) 10:54:47.51ID:???
まあ、ユーザーをそんなに意識することはないけどな。
サービスが起動されるときに自動的に使用されるもんだし、ログインして使うもんではないし。
0807NAME IS NULL
垢版 |
2020/09/10(木) 13:55:02.68ID:OD4PsCxP
>>806
はあ?
0808NAME IS NULL
垢版 |
2020/09/10(木) 13:56:08.44ID:OD4PsCxP
どのOSユーザーで動いているのか意識しないなんてありえないだろ
0809NAME IS NULL
垢版 |
2020/09/10(木) 15:16:28.78ID:???
いちいち意識なんかしねえわ。
最初にきっちり設定しとけよ。
0810NAME IS NULL
垢版 |
2020/09/10(木) 16:10:55.82ID:wACcj8kK
はあ?
0811NAME IS NULL
垢版 |
2020/09/10(木) 17:39:36.71ID:wACcj8kK
>>809 みたいなのがいるから、rootユーザーを使うことになったりする。
0813NAME IS NULL
垢版 |
2020/09/10(木) 21:58:14.13ID:OD4PsCxP
OSSなのに他人にお膳立てしてもらうが当たり前というのはおかしすぎる。
0814NAME IS NULL
垢版 |
2020/09/11(金) 18:24:10.01ID:???
てかrootでは動かさないでしょ。
0815NAME IS NULL
垢版 |
2020/09/11(金) 21:07:36.13ID:gHndXZTs
それはそれなりの知識があるひと
0816NAME IS NULL
垢版 |
2020/09/13(日) 15:02:23.76ID:???
Webプログラム上にrootという名前とパスワードを書き込んでおくのは常識
0817NAME IS NULL
垢版 |
2020/09/14(月) 00:56:50.02ID:ix9Okpm5
なぜマルチユーザーにしないといけないのかわかってないやつは、結局、何もかもできる便利な管理者ユーザーでやってしまう。
0819NAME IS NULL
垢版 |
2020/09/29(火) 01:09:03.01ID:???
学習していて、継続的アーカイブとポイントインタイムリカバリがよく分からないのですが・・・・
https://www.postgresql.jp/document/12/html/continuous-archiving.html
https://youtu.be/MCgWUyKQ6YM?t=2744
リストア時に消してしまうWAL(動画でいうWAL1~3)は、なぜ消してしまって復元できるのですか?
ドキュメントの方には、
>少なくともバックアップの開始時点まで遡る、連続した一連のアーカイブ済みWALファイルが必要です。
と買いてあるにもかかわらず、WAL1~3が抜けてしまって戻せる理由のが不思議でたまりません
0820NAME IS NULL
垢版 |
2020/09/29(火) 02:07:57.19ID:wMnFSP7q
>>819
それ資料と説明の仕方が悪いと思う。
WAL1〜3はアーカイブ(バックアップ)されているから大丈夫という意味だけど、メトロの女講師の説明がおかしくてわかりにくくなっている。

この講師の説明だとわかっている人間でないとわからないと思う。
0821NAME IS NULL
垢版 |
2020/09/29(火) 16:56:32.04ID:???
勝手にぽすぐれって読んでたんですが、みなさんぽすとぐれすって読んでるんですか?
0822NAME IS NULL
垢版 |
2020/09/29(火) 17:22:07.67ID:???
「ぽすとぐれすきゅーえる」
0824NAME IS NULL
垢版 |
2020/09/30(水) 00:42:01.27ID:w9Daxpvz
>>820
アーカイブされたWALはどこかにあるのが前提なんですね
ありがとうございます
0825NAME IS NULL
垢版 |
2020/10/01(木) 02:02:26.43ID:WR+ww7MA
>>821
ポスグレと呼ぶのは日本の通称

ポストグレスは英語圏の通称

ポストグレエスキューエルは、最近では無難な言い方。

ポストグレスキューエルは英語圏のださいオナニー表現で、あまり言われない。

技術者同士ならポスグレ、外国人がいる場合はポストグレス、一般人がいる場合はポストグレエスキューエル。

もともとはPostgresが製品名だから、グローバルではポストグレス。
0826NAME IS NULL
垢版 |
2020/10/01(木) 02:05:54.15ID:WR+ww7MA
>>824
アーカイブファイルに同じ番号をつけて説明しているから、あの動画はわかりにくい。

あの動画のメトロの女の知識があやしい。本当に理解してないのに台本を読んでいるから、あんな体たらくになっている。
0827NAME IS NULL
垢版 |
2020/10/01(木) 08:54:10.41ID:???
>>825
ポスグレって読んでたのが自分だけかと思ったのですが、日本の通称ならまあ間違いではなかったということですね
それなら今後もポスグレでいきます
0828NAME IS NULL
垢版 |
2020/10/01(木) 10:58:47.09ID:???
ポスト+イングレスが語源なんだから、やっぱポストグレスがかっこいいでしょ!
0829NAME IS NULL
垢版 |
2020/10/01(木) 11:47:46.04ID:???
英語ではpost-gresで2音節だけど
日本語でポストグレスというと6音節と長く
さらに「ト → グ」が発音しにくいので
ポスグレという呼びやすい略称が定着
0830NAME IS NULL
垢版 |
2020/10/01(木) 14:45:35.94ID:???
フルマネージドで外部から使えるサービスで、一番安いのってどこですか?
素人管理はやっぱ危ない気がしてきたぜ
0831NAME IS NULL
垢版 |
2020/10/02(金) 02:31:25.84ID:yhrmxStj
0832NAME IS NULL
垢版 |
2020/10/07(水) 00:15:45.67ID:5apiOPUy
>>830
AWSのRDS serverlessはどう?
要件わからんけど運用の手間はほとんどかからないイメージだけど。
0834NAME IS NULL
垢版 |
2020/10/07(水) 01:08:35.95ID:???
インフラもアプリも手間がかからないように開発しないと手詰まりになる
0835NAME IS NULL
垢版 |
2020/10/08(木) 17:51:39.15ID:???
Herokuのが比較的安いんじゃないの?
0836NAME IS NULL
垢版 |
2020/12/15(火) 20:25:47.29ID:???
13.1でレプリケーションできない……
0837NAME IS NULL
垢版 |
2020/12/23(水) 13:19:29.30ID:???
ロジカルレプリケーションで質問
pgadmin上からCREATE PUBLISHは出来たのにCREATE SUBSCRIPTIONがクエリ処理中のまま帰ってこない…これは何故?
wal_levelはパブリッシュ側、サブスク側共にlogicalにしてる
他になんか設定抜けてる?
アクセス設定は
all all 0.0.0.0/0
とかにはしてあるんだけど…
0838NAME IS NULL
垢版 |
2020/12/23(水) 14:56:50.38ID:???
自己解決
というかアクセス設定をmd5からtrustにしないとダメなの?
んー、なんか納得いかないんだけど…
0839NAME IS NULL
垢版 |
2020/12/23(水) 16:05:08.25ID:???
連投で申し訳ない
パブリッシュ、サブスクそれぞれの現在の状態ってどうやれば取れるの?
とあるホストで動いてるパブリッシュの一覧とか
サブスク側のサブスク一覧とか
エラーで止まってるとか、動いてるとかそういうの
0840NAME IS NULL
垢版 |
2020/12/23(水) 23:11:00.97ID:???
pg_stat_replication
pg_stat_subscription
かな。
状態確認するのならまず統計情報ビューを確認。
一覧だけならpsqlのメタコマンドにもあるみたい。
0842NAME IS NULL
垢版 |
2021/02/02(火) 20:47:00.35ID:???
あああああ
どこ見ても関数の引数がNULLだったときの動作が書いてない
なんかNullになるっぽいことが質問サイトとかかいてあるが
確実なことがなんもわからん

ただのTO_CHAR
公式ドキュメントから
SQL標準
はてはOracleまで似た情報内科みたのに

めちゃくちゃよく起こることじゃん
なんで?どうなってんのこれ?!
0843NAME IS NULL
垢版 |
2021/02/02(火) 21:57:46.85ID:???
SQL標準じゃなかったなんだこれ
有料って
0844NAME IS NULL
垢版 |
2021/02/03(水) 07:40:50.28ID:???
>>842
元々Oracle使ってた?
Oracleのnullの扱いが特殊で、nullに甘いと言うか…
気をつけた方がいいよ
特に文字列項目はnull非許容にした方が良い
0845NAME IS NULL
垢版 |
2021/02/09(火) 16:21:00.20
PGMiner 対策セキュリティとして、信頼できないユーザから pg_execute_server_program 特権を剥奪する手順を教えてください
0846NAME IS NULL
垢版 |
2021/02/17(水) 12:01:52.89ID:Cviyj/uB
PGMinerって初耳でした。難しいことやっているんですね。
でもそもそも信頼できないユーザからは実行出来なければいいんじゃないですかね?
とはいってもそんなことは百も承知だとは思うので、もしよかったらなんでユーザ制御のみではいけないのか教えてもらえませんか?
どういうシステムか興味があるので。
0847NAME IS NULL
垢版 |
2021/02/26(金) 00:22:50.28ID:???
pg_execute_server_programって明示的に与えない限り付与されないんだから、
管理者権限の管理と監査しかないんじゃないの。
0848NAME IS NULL
垢版 |
2021/03/30(火) 20:11:49.15ID:???
>>841です
色んな状態をPgAdminのクエリから取得出来るのは分かったけどロジカルレプリケーション自体を管理するソフトみたいなのはないのね…
ロジカルレプリケーション管理ソフトのオススメあったら教えて
出来ればGUIでグラフィカルにこのマシンのこのDBをPUBLICATIONに設定
別のマシンのこのDBをドラッグ&ドロップでSUBSCRIPTIONに設定みたいなソフトあると嬉しい
無いなら管理ソフト作るつもりだけど…面倒なので既にあるならそっち使いたい…
0849NAME IS NULL
垢版 |
2021/04/17(土) 07:20:29.92ID:???
JDBCがExceptionでもエラーログ吐かないとかあたまおかしくないですか
0850NAME IS NULL
垢版 |
2021/04/19(月) 23:40:19.66ID:???
JDBCドライバがログ吐くの、それめっちゃウザいのでは…
それくらいアプリ側で捕捉して、アプリ側が思うようにログ吐こうぜ
0852NAME IS NULL
垢版 |
2021/04/23(金) 10:12:55.83ID:???
Windows10でグループポリシーのスタート/シャットダウンスクリプトで他PCにSQLコマンド送信しようとすると止まってしまうけやり方が悪いんかな
0853NAME IS NULL
垢版 |
2021/04/24(土) 13:43:32.69ID:???
>>851
NetCOBOLでプログラムソース引き継ぎリコンパイルか
大変だな
0854NAME IS NULL
垢版 |
2021/04/27(火) 23:48:06.73ID:???
Windowsでログを日本語にしている場合、基本Shift-JISだけどたまにUTF-8で書かれて文字化けするのどうすばなおるの?
例えばこれはUTF-8で書かれてしまう "自動VACUUM: 孤立した一時テーブル"postgres.pg_temp_3.fetchchunks"を削除します"
0855NAME IS NULL
垢版 |
2021/04/28(水) 15:09:49.51ID:???
shift-jisでログを吐くように設定すれば良いのは?
0856NAME IS NULL
垢版 |
2021/04/29(木) 00:13:03.06ID:???
japanese_japan.932に設定しててほとんどはそれで書き込まれるけどごく一部だけ文字化けしてる。試しにUTF-8で開いたらその文字化けしてた行だけは読めた
0857NAME IS NULL
垢版 |
2021/05/02(日) 19:46:23.65ID:wsYqUZcK
いまどきSJISにこだわる方がめずらしい
0858NAME IS NULL
垢版 |
2021/05/25(火) 22:01:00.99ID:RGVH5/nc
pgAdmin3ってPosgreのバージョンいくつまで対応してるの?
pgAdmin4はブラウザアプリになっちゃって使い悪すぎる・・・
0859NAME IS NULL
垢版 |
2021/05/26(水) 12:21:57.19ID:???
>>858
4が9.2からだから、その前までじゃね?
あと、PostgreSQLね
0860NAME IS NULL
垢版 |
2021/05/28(金) 01:23:41.94ID:???
PostgreSQL 13のCOPYコマンドでCSVファイルをテーブルへインポートするとき、
CSVファイルの一行あたりの値の数とテーブルの列数が同じときは
テーブルの列名を指定しないでもインポートできるじゃないですが

これなんですが、CSVファイルは1行にデータが500個あって、テーブルが501列ある、なんて場合、
列名を指定しないと「missing data for column 〇〇」なんて出てしまいますが、エラーを出させず、
テーブルの先頭500列にだけ値を入れたいって場合って、
やっぱりCOPYするときに列名を指定しないとダメですかね

同じようなことをしたいテーブルが沢山あるのですが、列数が200とか300とかそんなのばかりで
どうにか手間をかけずにできないか方法探してます
0861NAME IS NULL
垢版 |
2021/05/28(金) 10:12:09.01ID:???
COPYコマンドだけで対処する方法はないんじゃないか?

csvkitみたいの使ってCOPY FROM PROGRAMするか
カラム指定付きのCOPYコマンドを生成する簡単なスクリプトを書くかかな
0862NAME IS NULL
垢版 |
2021/05/28(金) 15:35:39.72ID:+xuXkEOK
csvの全ての行の最後にカンマ入れればいいんじゃない?
0863NAME IS NULL
垢版 |
2021/05/29(土) 13:46:07.10ID:???
回答どうもです

>>861
そうですか…
COPYコマンド作成スクリプト、かなぁ

>>862
たしかにそれもよさそうですね


やり方考えてみます
0864NAME IS NULL
垢版 |
2021/06/09(水) 17:17:07.70ID:AdD21f7d
Pgadmin4 で外部プログラムを呼び出したり
プラグインを追加したりってどうやったらできますでしょうか。
0865NAME IS NULL
垢版 |
2021/06/12(土) 17:46:40.22ID:???
すいません。教えてください。

Win10にPostgresqlを何度かインストールしているのですが、psqlに”そのパスワードしらね”って言われてしまいます。

此方を参考にしてみたんですが、pgpass.confが見つかりませんでした。
他に何かインストール時に気を付ける事は有りますか??
0866865
垢版 |
2021/06/12(土) 19:38:34.99ID:???
解決しました。どうもすいません。
0868NAME IS NULL
垢版 |
2021/06/20(日) 17:27:25.64ID:SzsdKFeb
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
0869NAME IS NULL
垢版 |
2021/06/20(日) 17:51:48.33ID:???
自己解決。
update "public"."tagIndex" SET outputflag=true;
で行けた。
public."テーブル名” と "public"."テーブル名" っていう、スキーマも "" でくくってるかどうかの違いだけ・・・?
83.とか9.2の頃はこんなことやらなくてもよかったような覚えがあるから「面倒になったなー」ってのが正直な感想でした・・・
0870NAME IS NULL
垢版 |
2021/06/21(月) 08:26:27.75ID:???
> UPDATE public."tagIndex" SET outputflag='f';
PostgreSQL 11.10でも別にエラーにならないみたいよ
ttps://extendsclass.com/postgresql/4f05be9
0871NAME IS NULL
垢版 |
2021/07/29(木) 19:18:55.63ID:???
PostgreSQLでのテーブルの列数の上限は1,600列までですが、
私のデータでは5,000列のテーブルが必要です。
先ほどCREATE TABLEをしようとしたらエラーが出ました。
列数が3列のときは正常にテーブルが作成できます。

多分、1,000列ずつに分割して、あとで結合するのだと思いますが、
その参考となるサイトをご存じないでしょうか?
検索してもまったく見つかりません。
0873NAME IS NULL
垢版 |
2021/07/29(木) 20:21:10.97ID:???
>>871
共通のPrimary Key + 他の列で分割すればいいだけ

まあ5,000列はRDBで扱うのに適さないから
リファクタリングするか目的に適した別の仕組みを使ったほうがいいぞ
0874NAME IS NULL
垢版 |
2021/07/29(木) 22:51:58.63ID:???
>>872
ありがとうございます。
そのサイトは質問前に読んでいましたが、具体的にイメージできなかったです。

一人目の回答者の勧めるソースコードの変更は、
不具合が出るリスクがある上に、会社の他の人たちにも使ってもらうので難しいです。

二人目の回答者は、複数のテーブルに保存し、Viewを使ってデータを提供する方法を勧めているようです。
ただ、Viewもテーブルと同様の列数の制限がある、と書いてあるので
「結局、できるの?できないの?どっちなの?」という感じです・・・。
ちなみに、ユーザーはGUIで操作するだけで、クエリーはそれに基づいてプログラム内で生成するので、
ややこしいクエリーになっても対応できます。

三人目の回答者は、
1. 1,600列無くてもいいように再設計する
→できるならそうしたいですが、方法が分かりません

2. 超過した列にはJSON/JSONBフィールドを使う
→JSONは分かりますが、どんな技なのか分かりません

3. スプレッドシートのようなテーブルにする
→これは、spreadsheet_tableが親でspreadsheet_cellが子みたいになっていて、
spreadsheet_cell一つにつき一つのデータが入るようになっていますか?
(行、列)を(1, 1), (1, 2), (1, 3), …と変えていくことでセルの位置を指定できるみたいですね。
ただ、検索などは非常に遅そうですね…。
0875NAME IS NULL
垢版 |
2021/07/29(木) 23:11:16.18ID:???
>>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
…にする感じでしょうか?
0876NAME IS NULL
垢版 |
2021/07/30(金) 05:02:43.72ID:???
>>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
0877NAME IS NULL
垢版 |
2021/07/30(金) 09:29:15.13ID:???
>>871
これは余計なお世話だけど、どの設計がよいかを単体で検証すると思うんだが、
将来的にデータ量や参照量や更新量が増えた場合の速度低下(レスポンス)や、
データ構造(列数とかデータ型)が変わったときの保守に要する時間(ダウンタイム)も考慮して
比較したほうがいいぞ。大量の実データがなくてもダミーデータを生成して。
0879NAME IS NULL
垢版 |
2021/07/30(金) 13:20:59.93ID:???
>>877
>将来的にデータ量や参照量や更新量が増えた場合

そういう用途だとは思えないけどな
0880NAME IS NULL
垢版 |
2021/07/30(金) 15:12:00.47ID:???
>>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はド素人ですので…。
0881NAME IS NULL
垢版 |
2021/07/30(金) 15:25:46.09ID:???
>>877
ありがとうございます。

仰る通り、実行速度や保守性も考慮したいです。
5,000列というのは平均値で、増える傾向にありますが、今後も10,000列は超えないと予想されています。

データ自体は一度読み込んだら更新は必要ありませんが、計算結果はDBに残したいです。
新規製品のテーブル追加は大量に発生します。

大量の実データは既にあります。
0882NAME IS NULL
垢版 |
2021/07/30(金) 15:38:23.12ID:???
>>878
きっと、私の実力的に無理という話ですよね。
DBはド素人で、このデータ量でどのぐらいの速度で動作するのか不明なので、
まずは動作するものを実装したいです。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況