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

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

7
Postgresqlクエリで連続した複数の範囲の開始と終了を効率的に選択する
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 名前と整数が1〜288の範囲のテーブルには、約10億行のデータがあります。指定されたnameに対して、すべてのintは一意であり、範囲内のすべての可能な整数が存在するわけではないため、ギャップがあります。 このクエリは、サンプルケースを生成します。 --what I have: SELECT * FROM ( VALUES ('foo', 2), ('foo', 3), ('foo', 4), ('foo', 10), ('foo', 11), ('foo', 13), ('bar', 1), ('bar', 2), ('bar', 3) ) AS baz ("name", "int") 名前と連続した整数のシーケンスごとに行を持つルックアップテーブルを生成したいと思います。そのような各行には以下が含まれます。 名前 -値の名前の列 開始 連続シーケンス内の最初の整数- エンド -連続するシーケンスの最後の値 スパン - エンド-スタート+ 1 このクエリは、上記の例の出力例を生成します。 …
19 query  postgresql 


3
Postgresqlはレプリケーション接続を受け入れません
昔ながらのストリーミングレプリケーション。PostgreSQL:9.2.7 Windows 8.1 64ビット プライマリクラスタとセカンダリクラスタは同じ Windowsマシン上にあります。pg_start_backup()とすべてをすでに実行しているため、両方のノードにまったく同じデータがあります。 現在、レプリケーションの問題は、スレーブサーバーからプライマリサーバーに接続しない「レプリケーション接続」ですが、psqlシェルを使用して同じパラメーターを使用して接続できます。私が犯人だと思うのは、スレーブのrecovery.confの接続文字列です。 primary_conninfo = 'host = 127.0.0.1 port = 5432 user = postgres password = postgres' localhost、0.0.0.0、lan IPをすべて試しましたが、pgログには次のように書かれています: FATAL: could not connect to the primary server: FATAL: no pg_hba.conf entry for replication connection from host "127.0.0.1", user "postgres", SSL off マスターのpg_hba.confを見てください: host all all 0.0.0.0/0 …

3
count()を使用してパーセンテージを決定するPostgreSQL(キャストの問題)
次のクエリを実行してpatients、refinst列の値を持つテーブル内の行の%を提供しようとしています。結果が0のままになります。 select (count (refinst) / (select count(*) from patients) * 100) as "Formula" from patients; テーブルには15556行あり、そのうち1446行が列にselect count(refinst) from patients値を持っていることがわかりrefinstます。クエリから取得したい応答は30.62(1446/15556*100=30.62XXXXX小数点以下2桁に丸められます)になります。 カウント結果のデータ型(私が想定している整数)と関係があると確信しています。整数を整数で除算し、結果が0未満の場合、0に切り捨てられますか?その場合、カウントの結果を小数点以下2桁の数値としてキャストして、結果も小数点以下2桁に丸める方法を教えてもらえますか? このコードを書くには、複数のcountステートメントよりも良い方法があると確信しています。特にこのクエリを書くための、よりプロセッサ効率の良い方法を探しています。
19 postgresql  count  cast 

2
1つの列に特定の値がある場合にのみ適用されるカスタムの一意の列制約
次のようにカスタムの一意の列制約を持つことは可能ですか?2つのcol subsetとtype、両方の文字列があると仮定します(データ型はおそらく重要ではありませんが)。 Ifはtype「真」である、私はの組み合わせをしたいtypeとsubset一意です。それ以外の場合、制約はありません。DebianでPostgreSQL 8.4を使用しています。

1
エラー:データベース「dbname」は存在しません
ドキュメントによると、データベースに接続していない限り、以下を使用してコンソールでデータベースを削除できます。 DROP DATABASE dbname; または、ラッパーツールを使用してドロップできますdropdb。 どちらもデータベースが存在しないというエラーを表示しますが、コンソールでコマンドを入力すると、\l削除したいものを含むデータベースのリストが表示されます。 List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges ---------------------------+-----------+----------+-------------+-------------+----------------------- Blog_development | myusername | UTF8 | en_US.UTF-8 | en_US.UTF-8 | Blog_test | myusername | UTF8 | en_US.UTF-8 | en_US.UTF-8 | データベース名はBlog_development(およびその下の名前)です。私はレールで遊んでいて、オンラインドキュメントから学ぼうとしていました。最初からやり直して、すべてを削除したかった。 ただし、削除しようとすると、存在しないと表示されます。私はPostgreSQLを初めて使用するため、少し迷子になりました。このエラーに関するドキュメントには、存在しない場合にポップアップするもの以外は何もありません。もちろん存在しますが、まさにそこにあります。
19 postgresql 

2
plpgsqlで記述された関数呼び出しのPostgresクエリプラン
使用するとき、それは可能ですpgadminかplsql内部で実行されるSQL文のクエリプランのホールドを取得するために、U SER D efined F慰め(UDF)を使用しますEXPLAIN。それでは、UDFの特定の呼び出しに対するクエリプランを取得するにはどうすればよいですか?F()pgadminでUDFが抽象化されて単一の操作になっています。 ドキュメントを見てきましたが、何も見つかりませんでした。 現在、ステートメントを引き出して手動で実行しています。しかし、これは大規模なクエリに対しては削減されません。 たとえば、以下のUDFを検討してください。このUDFは、クエリ文字列を出力できますが、ローカルに作成された一時テーブルがあり、貼り付けて実行すると存在しないため、コピーと貼り付けでは機能しません。 CREATE OR REPLACE FUNCTION get_paginated_search_results( forum_id_ INTEGER, query_ CHARACTER VARYING, from_date_ TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL, to_date_ TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL, in_categories_ INTEGER[] DEFAULT '{}') RETURNS SETOF post_result_entry AS $$ DECLARE join_string CHARACTER VARYING := ' '; from_where_date CHARACTER …

4
Postgresがすでに使用されているPK値を生成するのはなぜですか?
私はDjangoを使用していますが、時々このエラーが発生します: IntegrityError:重複キー値が一意の制約 "myapp_mymodel_pkey"に違反しています 詳細:キー(id)=(1)は既に存在します。 実際、私のPostgresデータベースには、主キーが1のmyapp_mymodelオブジェクトがあります。 Postgresが再びその主キーを使用しようとするのはなぜですか?または、これはおそらくアプリケーション(またはDjangoのORM)がこれを引き起こしているのでしょうか? この問題は、ちょうど3回続けて発生しました。私が見つけたのは、それが発生した場合、特定のテーブルの行で1回以上発生し、その後は発生しないことです。これは、数日間完全に停止する前にすべてのテーブルで発生し、発生したテーブルごとに少なくとも1分程度発生し、断続的にのみ発生するようです(すぐにすべてのテーブルが発生するわけではありません)。 このエラーが非常に断続的である(2週間で3回程度しか発生しなかった-DBに他の負荷がなく、アプリケーションをテストしているだけである)ため、低レベルの問題に非常に警戒しています。


2
postgresで既存のテーブルをパーティション分割する方法は?
日付範囲ごとに100万行以上のテーブルをパーティション分割したいと思います。これは、多くのダウンタイムを必要とせずに、またはデータを失うリスクを負うことなく、通常どのように行われますか?ここに私が検討している戦略がありますが、提案があります: 既存のテーブルがマスターであり、子はそれを継承します。時間が経つにつれて、マスターから子にデータが移動しますが、データの一部がマスター表にあり、一部が子にある期間があります。 新しいマスターテーブルと子テーブルを作成します。子テーブルの既存のテーブルにデータのコピーを作成します(したがって、データは2つの場所に存在します)。子テーブルが最新のデータを取得したら、今後すべての挿入を変更して新しいマスターテーブルを指し、既存のテーブルを削除します。


1
特別なデータベース「postgres」とは何ですか?
複数のデータベースが実行されているPostgreSQLサーバーがあります。データベースの1つはと呼ばpostgresれ、最初から存在していました。私は内部にテーブルを見ることができず、明示的に使用したことはありませんでしたが、すべてのユーザーがデータベース内にテーブルを作成することを許可されていることに気付きました(これは私が望むものではありません-管理者以外のユーザーに作成を望まない任意のテーブル)。 サーバーの通常の操作に必要なのは何らかの特殊なデータベースであると感じていますが、その目的は何ですか?どのようなデータが内部に格納されますか(または格納される可能性がありますか)?他のデータベースに関するメタデータを保持していinformation_schemaますか(例:?)。connectこのデータベースへの特権を公開から取り消すと、厄介なことが起こりますか?それとも私がそれを落とすなら? 私は30分間グーグルでpostgres検索postgresしましたが、単語はユーザーとDBMS自体にも使用されているため、常に完全に無関係なものを取得しました。
18 postgresql 

2
upsertで競合する行のIDを取得する方法は?
tag2つの列を持つテーブルがあります:id(uuid)とname(text)。テーブルに新しいタグを挿入したいのですが、タグが既に存在する場合idは、既存のレコードを取得するだけです。 私はちょうどON CONFLICT DO NOTHINGと組み合わせて使用できると仮定しましたRETURNING "id": INSERT INTO "tag" ("name") VALUES( 'foo' ) ON CONFLICT DO NOTHING RETURNING "id"; ただし、「foo」という名前のタグがすでに存在する場合、これは空の結果セットを返します。 次に、noop DO UPDATE句を使用するようにクエリを変更しました。 INSERT INTO "tag" ("name") VALUES( 'foo' ) ON CONFLICT ("name") DO UPDATE SET "name" = 'foo' RETURNING "id"; これは意図したとおりに機能しますが、名前を既存の値に設定しているだけなので、やや混乱します。 これはこの問題を解決する方法ですか、それとも私が見逃しているより簡単なアプローチがありますか?

3
PostgreSQLをバージョン8.4から9.4にアップグレードする方法は?
PostgreSQLをバージョン8.4から9.4にアップグレードします。 ドキュメントは、私にとって非常に明確ではありません。 アップグレードすると古いデータベースは失われますか? アップグレード後に古いデータベースを紛失した場合、どうすれば古いデータベースをバックアップできますか? psqlをアップグレードするにはどうすればよいですか? PostgreSQLはCentOS 6.6サーバーで実行されています。

1
EXPLAIN ANALYZEはplpgsql関数内のクエリの詳細を表示しません
PostgreSQL 9.3でPL / pgSQL関数を使用し、いくつかの複雑なクエリを内部で使用しています。 create function f1() returns integer as $$ declare event tablename%ROWTYPE; .... .... begin FOR event IN SELECT * FROM tablename WHERE condition LOOP EXECUTE 'SELECT f2(event.columnname)' INTO dummy_return; END LOOP; ... INSERT INTO ... FROM a LEFT JOIN b ... LEFT JOIN c WHERE ... UPDATE …

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