PostgreSQL Part.11©2ch.net
レス数が950を超えています。1000を超えると書き込みができなくなります。
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
メインフレームのファイルのようなものじゃなくて、データファイルの内部は頻繁にデータの位置を変えている。
そんな古風な仕組みではない。 レス数が950を超えています。1000を超えると書き込みができなくなります。