タグ付けされた質問 「postgresql-9.1」

PostgreSQLバージョン9.1

2
検索文字列が長くなると、トライグラム検索が非常に遅くなります
Postgres 9.1データベースには、table1約150万行と1列のテーブルがありますlabel(この質問のために簡略化された名前)。 機能的なtrigram-indexがありますlower(unaccent(label))(インデックスでunaccent()使用できるように不変にされています)。 次のクエリは非常に高速です。 SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword%'))); count ------- 1 (1 row) Time: 394,295 ms ただし、次のクエリは遅くなります。 SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword and some more%'))); count ------- 1 (1 row) Time: 1405,749 ms また、検索がより厳密であっても、単語の追加はさらに遅くなります。 私は最初の単語のサブクエリを実行し、次に完全な検索文字列でクエリを実行する簡単なトリックを試しましたが、クエリプランナは(悲しいことに)私の陰謀を見ました: EXPLAIN ANALYZE SELECT * FROM ( SELECT id, …

1
Postgresデータベースの復元:pg_restore -vs-ちょうどpsqlを使用して
pg_dump(プレーンテキスト形式)を使用してPostgresデータベースをダンプし、psql(-fオプション付き)を使用して単純に復元します。 どちらが質問を請います:pg_restoreを使用しないことで何かが欠けているのpsqlですか? pg_dumpパラメーターを使用して、トリガーの無効化などのオプションを制御できます。それでは、何のpg_restoreために使われますか?非プレーンテキストダンプフォーマット?

5
PostgreSQLのバックアップ用に読み取り専用ユーザーを作成するにはどうすればよいですか?
PostgreSQLで読み取り専用のバックアップユーザーを作成することは不可能ですか? IRCチャンネルで、所有権のないバックアップのみのユーザーを作成することはできないとアドバイスを受けました。私はそれが非常に奇妙だと思うので、何かを見逃していないことを確認したいと思います。 以下は私が試したものですが、探している結果が得られません。私がpg_dump与えられたテーブルで行うとき、私は得ていPermission denied for relation...ます: GRANT SELECT ON ALL TABLES IN SCHEMA public TO backup; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO backup; GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO backup; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, USAGE ON SEQUENCES …

1
PostgreSQLでaes-encryptionを使用する方法は?
次のステートメントを使用してaes暗号化を試みました。 SELECT encrypt('test', 'key', 'aes'); うまくいきましたが、値を解読できません。それをデータ型byteaのフィールドに挿入しましたが、それが正しい方法であったかどうかはわかりません。 SELECT decrypt(pw, 'key', 'aes') FROM table WHERE ID = 1; 私にエラーを与えます エラー:関数decrypt(bytea、unknown、unknown)は存在しません LINE 1:SELECT decrypt(pw、 'key'、 'aes')FROM tabelle WHERE ID = 7; ^ ヒント:指定された名前と引数のタイプに一致する関数はありません。明示的な型キャストを追加する必要がある場合があります。 つまり、encrypt()は既存の関数であり、decrypt()ではないということですか?aesで暗号化された値を他にどのように取得できますか?

1
log_min_duration_statement設定は無視されます
Postgresql 9.1Ubuntuで実行しています。正確なPostgresqlバージョンは9.1+129ubuntu1、パッケージマネージャーが示すとおりです。 アクティブに使用されている2つのデータベースがあり、それらはリモートサーバーから使用されます。 実行時間が長いクエリを記録したい。だから私は/etc/postgresql/9.1/main/postgresql.confファイルに次のパラメータを設定します log_min_duration_statement = 10000 log_statement = 'mod' そのため、Postgresqlは10秒以上かかるクエリをログに記録します。 しかし、私reloadがpostgres構成を行うと、Postgresqlはlog_statement値に適合するすべてのクエリのログを記録し始めます。確実に持続時間を100秒に設定したこと log_min_duration_statement = 100000 しかし、Postgresqlはlog_statement、値に関係なく、log_min_duration_statement値に適合するすべてのクエリのログを記録し続けます。 ロギングを停止log_statementするnoneように設定する。 構成に関して私が見逃したものはありますか?

2
VACUUM FULLとCLUSTERのPostgreSQLの違い
200 GBのサイズがデータで占められ、180 GBのサイズが6つのインデックスで占められているテーブルがあります。それは30%肥大化していますので、それによって占有されている不要なスペースを回収したいと思います。job_id_idxインデックスでクラスター化されます。 スペースを再利用するには、clusterコマンドまたはvacuum fullコマンドを使用する必要がありますか? この2つのコマンドの違いは何ですか? vacuum fullある列の順序はclusterコマンドと同じですか? 両方のコマンドでインデックスが再作成されますか? 私の場合、どちらが速くなりますか? PostgreSQLデータベースのバージョンは9.1です

3
pg_restore:[archiver]はファイルヘッダーにマジックストリングを見つけられませんでした
私はPostgreSQL 9.1を使用していて、pg_dump次のコマンドで生成されたバックアップファイルを復元したい: sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name このコマンドは、既存のデータベースオブジェクトの削除で始まる有効なsqlファイルを生成し、次にすべてのテーブルを生成し、インジタイズ、シーケンスなどを行い、最後にデータを挿入します。 生成されたバックアップファイルを復元しようとすると、次のようになります(表示目的でのみ改行が追加されます)。 sudo pg_restore -d database_name -h 127.0.0.1 -U postgres --format=c --clean --create out.sql 失敗して出力します: pg_restore: [archiver] did not find magic string in file header その理由は何ですか?

2
PostgreSQL:ディレクトリを/ rootに変更できません
テーブルplanet_osm_polygonをあるデータベースosmから別のデータベースにコピーしようとしていますtest。私su postgresと実行しましたpg_dump。 問題:ただし、エラーが発生could not change directory to "/root"し、Password:プロンプトが2回表示されます。pg_dumpとしてログインしたときにを実行する方法はありますrootか? root@lalaland:~# su postgres postgres@lalaland:/root$ pg_dump -h localhost "osm" --table "public.planet_osm_polygon" | psql -h localhost "test" --table "staging.planet_osm_polygon" could not change directory to "/root" could not change directory to "/root" Password: Password: 更新 問題#2:publicフラグを渡したにもかかわらず、テーブルがスキーマにコピーされているようです--table="staging.planet_osm_polygon"。なぜスキーマにコピーされないのstagingですか?

3
インデックスの最大行サイズエラー
array列に上限はありますか? 配列フィールドに挿入すると、このエラーが発生します- PG::Error: ERROR: index row size 3480 exceeds maximum 2712 for index "ix_data" これが私のテーブル定義です- create table test_array(id varchar(50), data text[]); ALTER TABLE test_array ADD PRIMARY KEY (id); CREATE INDEX ix_data ON test_array USING GIN (data); 配列フィールドを検索しているので、配列フィールドにインデックスが必要です。

2
最長の接頭辞を見つけるアルゴリズム
テーブルが2つあります。 最初のものは接頭辞を持つテーブルです code name price 343 ek1 10 3435 nt 4 3432 ek2 2 2つ目は、電話番号を含む通話記録です number time 834353212 10 834321242 20 834312345 30 各レコードのプレフィックスから最長のプレフィックスを見つけるスクリプトを作成し、このすべてのデータを次のように3番目のテーブルに書き込む必要があります。 number code .... 834353212 3435 834321242 3432 834312345 343 番号834353212の場合、「8」をトリミングしてから、プレフィックステーブルから最長のコードである3435 を見つける必要があります。常に最初に「8」を削除し、プレフィックスを先頭に置く必要があります。 私は非常に悪い方法でずっと前にこの課題を解決しました。これは、各レコードに対して多くのクエリを実行する恐ろしいperlスクリプトでした。このスクリプト: 呼び出しテーブルから数値を取得し、ループ内でlength(number)から1 => $ prefixまでの部分文字列を実行します クエリを実行します: '$ prefix'のようなコードのプレフィックスからcount(*)を選択します count> 0の場合、最初のプレフィックスを取得してテーブルに書き込みます 最初の問題はクエリ数です- call_records * length(number)です。第二の問題はLIKE表現です。遅いと思います。 私は2番目の問題を解決しようとしました: …

1
nullable列をテーブルに追加すると10分以上かかる
テーブルに新しい列を追加するのに問題があります。 数回実行しようとしましたが、10分以上実行した後、ロック時間のためクエリをキャンセルすることにしました。 ALTER TABLE mytable ADD mycolumn VARCHAR(50); 有用な情報: PostgreSQLバージョン:9.1 行数:〜250K 列の数:38 null許容列の数:32 制約の数:5(1 PK、3 FK、1 UNIQUE) インデックスの数:1 OSタイプ:Debian Squeeze 64 (HeapTupleHeaderを介して)PostgreSQLがnull許容列を管理する方法に関する興味深い情報を見つけました。 私の最初の推測は、このテーブルには既に8ビットの32個のnull許容列があるためMAXALIGN、HeapTupleHeaderは4バイトの長さです(検証されていません。その方法がわかりません)。 したがって、新しいnull可能列を追加するには、新しい8ビットを追加するために、すべての行でHeapTupleHeaderを更新する必要があり、MAXALIGNパフォーマンスの問題を引き起こす可能性があります。 そこで、null許容列の数を31に減らすために、null許容列の1つ(実際には実際にはnull許容ではありません)を変更して、私の推測が正しいかどうかを確認しようとしました。 ALTER TABLE mytable ALTER myothercolumn SET NOT NULL; 残念ながら、この変更には5分以上の非常に長い時間がかかるため、中止しました。 このパフォーマンスコストが発生する原因は何か考えていますか?

3
PostgreSQLはインデックスにnullを使用できますか?
私はそれを言っているこの本を読んでいます データベースは、Indexed_Col IS NOT NULLがカバーする範囲が大きすぎて役に立たないと想定しているため、データベースはこの状態からインデックスに移動しません。 この本は10年以上前のものであると認識していますが、すでに非常に有用であることが証明されています。 さらに、クエリを実行EXPLAIN ANALYZEしSELECTているときに、自分のインデックスがまったく使用されていないことがわかりました。 したがって、私の質問は: 列が "NOT NULL"を含む列を持つテーブルがあり、この列をカバーするインデックスが存在する場合、このインデックスは、列がクエリの一部であるテーブルのクエリで使用されますか? お気に入り: CREATE TABLE my_table( a varchar NOT NULL ); CREATE INDEX ix_my_table ON my_table(a); SELECT a from my_table;

2
行の見積もりが大幅に不正確であるため、フルテキスト検索が遅い
このデータベースに対するフルテキストクエリ(RT(リクエストトラッカー)チケットを格納する)は、実行に非常に長い時間がかかるようです。添付ファイルテーブル(フルテキストデータを含む)は約15GBです。 データベーススキーマは次のとおりで、約200万行です。 rt4 =#\ d +添付ファイル テーブル "public.attachments" コラム| タイプ| 修飾子| ストレージ| 説明文 ----------------- + ----------------------------- +- -------------------------------------------------- ------ + ---------- + ------------- id | 整数| nullではないデフォルトのnextval( 'attachments_id_seq' :: regclass)| プレーン| transactionid | 整数| nullではない| プレーン| 親| 整数| nullではないデフォルト0 | プレーン| メッセージID | キャラクター変化(160)| | 拡張| 件名| 文字の変化(255)| | 拡張| …

3
テーブルに数式を保存し、関数でその数式を使用する
PostgreSQL 9.1データベースがあり、その一部がエージェントの手数料を処理しています。各エージェントには、彼らが得る手数料の計算式があります。エージェントごとのコミッションを生成する機能を持っていますが、エージェント数が増えると使えなくなります。非常に長いケースステートメントと繰り返しコードを実行することを余儀なくされたため、私の機能が非常に大きくなりました。 すべての数式には定数変数があります: d ..その月に働いた日数 r ..獲得した新しいノード l ..ロイヤルティスコア s ..サブエージェント手数料 b ..基本レート i ..獲得した収益 式は次のようになります。 d*b+(l*4+r)+(i/d)+s 各エージェントは、HR部門と支払い式を交渉します。では、式をエージェントテーブルに保存して、テーブルから式を取得して値で変換し、金額を計算するだけの小さな関数のようにできますか?

3
レプリケーションが失敗しました。もう一度始める方法?
UbuntuでPostgres 9.1.6を実行していますが、マスターとスレーブの間でストリーミングレプリケーションをセットアップしています。データベースがクラッシュし、両方のボックスを再起動するまで、すべてがスムーズに実行されていました。 これで、レプリケーションが停止し、両方のボックスのログを確認すると、次のメッセージが表示されます。 CDT FATAL:要求されたWALセグメント0000000100000224000000FAはすでに削除されています それは何度も同じセグメントです。私のグーグルから、レプリケーションサーバーがマスターからこのセグメントを取得しようとしているように見えますが、それはもうありません。わかりましたが、これを回避する方法は?新しいバックアップを作成し、それをスレーブにrsyncする必要がありますか?スレーブを同期させる簡単な方法はありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.