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

PostgreSQLのすべてのバージョン。そのコンテキストが重要な場合は、postgresql-11などのバージョン固有のタグを追加します。

3
PLPGSQLを使用して現在のsearch_pathにテーブルが存在するかどうかを確認するにはどうすればよいですか?
別のアプリケーションのアドオンであるアプリケーションのセットアップスクリプトを作成しているので、他のアプリケーションのテーブルが存在するかどうかを確認したいと思います。そうでない場合は、ユーザーに有用なエラーを提供します。ただし、テーブルを保持するスキーマがわかりません。 DO LANGUAGE plpgsql $$ BEGIN PERFORM 1 FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = current_setting('search_path') AND c.relname = 'foo' AND c.relkind = 'r'; -- not sure if I actually need this or not... IF NOT FOUND THEN RAISE 'This application depends on tables …

3
billions-rows-tableでの遅いクエリ//使用されたインデックス
私は若い開発者であり、データベース(PostgreSQL 9.3)の使用にあまり熟練していないので、本当に助けが必要なプロジェクトでいくつかの問題に遭遇しました。 私のプロジェクトは、デバイス(最大1000台以上のデバイス)からデータを収集することです。この場合、すべてのデバイスが毎秒1つのデータブロックを送信し、1時間あたり約300万行になります。 現在、すべてのデバイスの受信データを格納する1つの大きなテーブルがあります。 CREATE TABLE data_block( id bigserial timestamp timestamp mac bigint ) データブロックに含めることができる(またはできない)データにはいくつかの種類があるため、テーブルを参照する他のテーブルがありdata_blockます。 CREATE TABLE dataA( data_block_id bigserial data CONSTRAINT fkey FOREIGN KEY (data_block_id) REFERENCES data_block(id); ); CREATE TABLE dataB(...); CREATE TABLE dataC(...); CREATE INDEX index_dataA_block_id ON dataA (data_block_id DESC); ... 1つのdata_blockに3x dataA、1x dataBがあるが、dataCがない可能性があります。 データは数週間保持されるため、このテーブルには約50億行を格納します。現時点では、テーブルに6億行まであり、クエリには非常に長い時間がかかります。私のselectステートメントは常にクエリを実行し、多くの場合はtime + macもクエリを実行するため、私はtimestampandとmacでインデックスを作成することにしました。 CREATE …

1
PostgreSQL:ビューから列を削除
VIEW進化スクリプトを作成しようとしている場所があるので、それに列を追加できます。その部分は問題なく動作します。列は問題なく追加されました。ただし、その逆は機能しません。最後に追加された列を削除すると、ERROR: cannot drop columns from viewメッセージが表示されて失敗します。問題は、この特定のビューにはfromとtoの両方に多くの参照があるため、私はまったくDROP CASCADE気の毒なことはできないということです。 新しく追加された列を指定されたものから削除できない理由はありVIEWますか?次に、このタスクを実行するにはどうすればよいですか? (注:ここに示すのは状況ですが、他の多くの場合でも、ビューから列を削除するなど、同じような状況がよくわかります。)

2
「psycopg2」を介したPostgreSQLのトランザクションは、カーソルごとまたは接続ごとですか?
psycopg2データベースAPI を使用してPostgreSQL 9.3で作業しています。 DB APIを最小分離レベル(「自動コミット」モード)に設定していて、SQLを介して直接自分のトランザクションを管理しています。例: cur = self.conn.cursor() cur.execute("BEGIN;") cur.execute("SELECT dbId, downloadPath, fileName, tags FROM {tableName} WHERE dlState=%s".format(tableName=self.tableName), (2, )) ret = cur.fetchall() cur.execute("COMMIT;") 基本的に、トランザクションはcur.execute("BEGIN;")そのカーソルだけに限定されていますか、それとも接続全体に対するものself.conn.cursor()ですか()? 私が行っているより複雑なことのいくつかは、論理的に機能に分解する複数の個別のデータベース操作を含みます。これはすべて、接続をメンバーとして持つクラス内にあるため、各関数内にカーソルを作成する方がはるかに便利です。ただし、トランザクション内でカーソルを作成する方法がわかりません。 基本的に、トランザクションが接続ごとの場合、トランザクション内で多数のカーソルをオンザフライで作成できます。カーソルごとの場合は、カーソルをあちこちに移動する必要があります。どっち? あなたが呼び出すことができるという事実はかかわらドキュメントは、これに触れていないconnection.commit()私が作る、かなりのトランザクション制御を接続ごとで自信を持って。
10 postgresql 

2
PostgreSQLはNULL以外のDEFAULTを含む列の追加を最適化しますか?
値をNOT NULL持つ列を追加するDEFAULT場合-PostgreSQLはこの操作を最適化しますか? テーブルにn行がある場合、最適化されていないalter-table-add-columnは、デフォルト値のn回の書き込みを生成します。最適化により、DBは即座に新しい列を作成し、適切なインデックスデータ構造でその列の非デフォルト値が見つからない場合に返されるデフォルト値のコピーを1つだけ保存します。 たとえば、Oracle 11gにはそのような最適化があります。

1
「2つのテーブルから離れた」制約の適用
SQLで電気回路図をモデリングするときに問題が発生しました。キャプチャしたい構造は part ←────────── pin ↑ ↑ part_inst ←───── pin_inst ここで、「inst」は「instance」の略です。 例えば、私のように持っているかもしれないpartとのLM358オペアンプpinの1OUT、1IN-、1IN +、GND、2IN +、2IN-、2OUT、およびV CC。次に、このパーツを回路図に配置して、a part_instと8を 作成しpin_instます。 データフィールドを無視して、スキーマでの最初の試みは create table parts ( part_id bigserial primary key ); create table pins ( pin_id bigserial primary key, part_id bigint not null references parts ); create table part_insts ( part_inst_id bigserial primary key, part_id …

3
コマンドラインを使用したPostgreSQLポートの変更
私のPostgreSQLのデフォルトポートは5432ですが、コマンドラインを使用してデフォルトのポートを変更したいと思います(Windows 7の場合)。 私は以前にこの解決策を見ました:https : //stackoverflow.com/questions/187438/want-to-change-pgsql-port 次のコマンドを実行しようとしましたが、失敗しました: postgres --p 5431 コマンドラインを使用してポートを変更する方法を誰かに教えてもらえますか?

1
pg_dumpとエラー:トースト値のチャンク番号0がありません
PostgreSQL 8.4.15を使用しています。pg_dumpデータベースのバックアップを実行しているときに、次のエラーが発生しました。 pg_dump: SQL command failed pg_dump: Error message from server: ERROR: missing chunk number 0 for toast value 123456789 in pg_toast_987654321 pg_dump: The command was: COPY public.my_table (id, .... all the columns ...) このエラーメッセージを検索したところ、テーブルのインデックスを再作成することを提案する参照(hereおよびhere)がいくつか見つかりました。(これらの議論ではpg_class、正しいpg_toast_XXXXXX値を見つけるためにテーブルをクエリすることへの言及がありましたが、それはエラーメッセージに表示されなかったためであると思われました。エラーメッセージに値が表示されたため、この部分をスキップしました。それ以降のバージョンのPostgreSQLが原因で便利になると思います。) 私は以下を実行しました: REINDEX table pg_toast.pg_toast_987654321; VACUUM ANALYZE my_table; pg_dumpエラーなしで使用できるようになりました。 pg_toastこれらのコマンドは実際に何をして何をしたのですか?これらは単に単純なクリーンアップに関するものですか、それともそのテーブルの一部の行を削除できたのでしょうか?そもそも何が問題の原因でしたか? このテーブルには約300000行ありますが、前回の正常なバックアップ以降、約250行しかないと予想されます(このテーブルはINSERT / SELECTにのみ使用され、UPDATEには使用されません)。
10 postgresql 

4
テーブルデータのサブセットを製品データベースからローカルのテストデータベースにエクスポートするにはどうすればよいですか?
比較的大きな量のpostgresベースのデータベースがあります:〜20GB。PostgreSQLデータベースはherokuでホストされています。 テーブルデータの小さなサブセットをローカルデータベースにコピーして、本番環境で作業することなく、それらに対していくつかのテストを実行したいと考えています。 自分でサンプルデータを生成するのではなく、本番環境にすでに存在するデータを使用します。 データベースの各テーブルから最大100行で十分です。これを達成する簡単な方法はありますか?

1
HDDクラッシュ後にPostgreSQLサーバーを起動するとFAILED STATEになります
で使用Fedora 15していPostgreSQL 9.1.4ます。Fedoraは最近クラッシュしました: PostgreSQLサーバーを起動する試み: service postgresql-9.1 start 与える Starting postgresql-9.1 (via systemctl): Job failed. See system logs and 'systemctl status' for details. [FAILED] ただし、システムの再起動後に初めてサーバーを起動すると、サーバーは正常に起動します。 しかし、使用しようとするとpsqlこのエラーが発生します: psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"? .s.PGSQL.5432ファイルはシステムのどこにも存在しません。Aはlocate …
10 linux  postgresql 

1
巨大なテーブルにシリアル列を追加する最も効率的な方法
BIGSERIAL列を巨大なテーブルに追加する最も速い方法は何ですか(〜3 Bil。行、〜174Gb)? 編集: 列を既存の行の増分値にしたい(NOT NULL)。 フィルファクターを設定しませんでした(振り返ってみると、これは悪い決定のように見えます)。 ディスク容量に問題はありません。できるだけ高速にしてください。


6
引数をpsqlに渡す
Postgres 8.3でplpgsqlスクリプトを実行しています-psqlを介してこのスクリプトに引数を渡したいのですが。私は現在次のようなスクリプトを実行しています: psql -d database -u user -f update_file.sql PGOPTIONS環境変数を説明するこのリンクに出くわしましたが、「カスタム」引数に対しては機能しません。つまり、設定がpostgres.confファイルにリストされていないため、エラーが表示されます。 -bash-3.2$ export PGOPTIONS='--pretend=true' -bash-3.2$ psql -d my_db -f update_database.sql psql: FATAL: unrecognized configuration parameter "pretend" 他のアイデアは?理想的には環境変数を避けたい...
10 postgresql  psql 


2
「トランザクションIDの折り返し」について
今、私は「トランザクションIDの折り返し」についてのドキュメントを読みましたが、本当に理解できないことがあり、ドキュメントは次のURLです http://www.postgresql.org/docs/9.0/static/routine-vacuuming .html#VACUUM-FOR-WRAPAROUND 23.1.4。トランザクションIDの折り返しエラーの防止 PostgreSQLのMVCCトランザクションセマンティクスは、トランザクションID(XID)番号を比較できるかどうかに依存します。現在のトランザクションのXIDより大きい挿入XIDを持つ行バージョンは「将来」であり、現在のトランザクションからは見えません。ただし、トランザクションIDのサイズは制限されている(32ビット)ため、長時間実行されるクラスター(40億を超えるトランザクション)はトランザクションIDのラップアラウンドに悩まされます。XIDカウンターがゼロに戻り、すべての突然のトランザクションが過去は未来にあるように見えます—つまり、彼らの出力は見えなくなります。つまり、壊滅的なデータ損失です。(実際にはデータはまだ残っていますが、それが得られない場合は非常に快適です。)これを回避するには、20億トランザクションごとに少なくとも1回、すべてのデータベースのすべてのテーブルをバキュームする必要があります。 「トランザクションIDのラップアラウンドが発生します。XIDカウンターがゼロに折り返され、過去にあった突然のトランザクションはすべて未来にあるように見えます。つまり、出力が見えなくなります」というステートメントを理解できません。 誰かがこれを説明できますか?データベースでトランザクションIDのラップアラウンドが発生した後、過去にあったトランザクションが未来にあるように見えるのはなぜですか?要するに、トランザクションIDがautovacuumでラップアラウンドした後に、PostgreSQLが「データ損失」の状態になるかどうかを知りたいのです。 私の個人的な見解では、出力が64ビットで循環されないtxid_current()関数を使用して現在のトランザクションIDを取得できます。 txid_current()関数によって。ただし、PostgreSQLサーバーのシャットダウン後にpg_resetxlogリセットリセットトランザクションIDを使用します。私は正しいですか?ありがとう
10 postgresql 

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