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

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


3
データベースで「少なくとも1つ」または「正確に1つ」を強制する制約
ユーザーがいて、各ユーザーが複数のメールアドレスを持つことができるとします CREATE TABLE emails ( user_id integer, email_address text, is_active boolean ) いくつかのサンプル行 user_id | email_address | is_active 1 | foo@bar.com | t 1 | baz@bar.com | f 1 | bar@foo.com | f 2 | ccc@ddd.com | t すべてのユーザーがアクティブなアドレスを1つだけ持つという制約を施行したい。Postgresでこれを行うにはどうすればよいですか?私はこれを行うことができました: CREATE UNIQUE INDEX "user_email" ON emails(user_id) WHERE is_active=true; これは、複数のアクティブなアドレスを持つユーザーを保護しますが、すべてのアドレスがfalseに設定されることは保護しません。 可能であれば、トリガーまたはpl / …

2
大きなPostgresSQLテーブルでCOUNT / GROUP-BYのパフォーマンスを改善しますか?
PostgresSQL 9.2を実行していますが、約6,700,000行の12列の関係があります。これには3D空間にノードが含まれ、各ノードはユーザー(作成者)を参照します。どのユーザーがいくつのノードを作成したかを照会するには、次のことを行います(詳細を追加explain analyze)。 EXPLAIN ANALYZE SELECT user_id, count(user_id) FROM treenode WHERE project_id=1 GROUP BY user_id; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------- HashAggregate (cost=253668.70..253669.07 rows=37 width=8) (actual time=1747.620..1747.623 rows=38 loops=1) -> Seq Scan on treenode (cost=0.00..220278.79 rows=6677983 width=8) (actual time=0.019..886.803 rows=6677983 loops=1) Filter: (project_id = 1) Total runtime: 1747.653 ms ご覧のとおり、これには約1.7秒かかります。これは、データの量を考えるとそれほど悪くはありませんが、これを改善できるかどうかは疑問です。ユーザー列にBTreeインデックスを追加しようとしましたが、これは何の助けにもなりませんでした。 代替案はありますか? 完全を期すために、これはすべてのインデックスを備えた完全なテーブル定義です(外部キーの制約、参照、トリガーはありません)。 Column …

4
row_to_jsonを使用してJSONを作成するときに属性に名前を設定します
一部の列に対してのみ関数をf1, f2, f3...使用する場合、デフォルト名を変更できrow_to_jsonますか? できます row_to_json(customers) 帰る {"id_customer":2,"first_name":"bla","last_name":"second_bla"} しかし、名前なしid_customerでのみが必要な場合は、使用する必要があります row_to_json(row(first_name, last_name)) そして、私は得る {"f1":"bla","f2":"second_bla"} そして、デフォルトの列名または独自の列名でこの結果を取得したいと思います。独自の複合型を作成して使用できることを知っています row_to_json(row(first_name, last_name))::my_custom_type しかし、そのタイプを作成せずにクエリ内で直接行うことはできませんか?
24 postgresql 

6
ライブ本番データベースのテーブルを変更する
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 ほとんどの「人気のある」(MySQL、Postgres ...)データベースシステムは、稼働中の本番データベース上のテーブルの変更(列のタイプの追加、削除、変更など)をどのように処理しますか? 私が知って正しい方法は、バックアップのすべてのスケジュールのダウンタイムにあり、その後、変更を行うのですか。 しかし... ...現在のデータベースシステムは、これらのことを何も停止することなく「オンライン」で行うことをサポートしていますか (変更または削除されたばかりの列を参照するクエリを遅らせるだけの場合があります) そしてALTER TABLE...、ライブ実行中のデータベースで実行するとどうなりますか?これが発生すると、すべてが停止しますか?データが破損することはありますか?等 繰り返しますが、これらは私が遭遇するものであるため、私は主にPostgresまたはMySQLに言及しています。 (そして、はい、「正しい方法」を行う前にこれをしなければならなかったときはいつでも、物事をバックアップし、ダウンタインをスケジュールします。ダーティ」または「クイック、ライブ、ダーティ」スキーマ変更を実際にサポートしているDBシステムがある場合) 誰かがFacebookスクリプトからMySQLのオンラインスキーマ変更を提案しました(ここにチュートリアルとソースがあります)...それを行うための「ハッキング」方法のセットを自動化する良い方法のようです...誰もがそれを使用したことがあります生産に似た何か?

2
pgAdminが要求するメンテナンスDBとは何ですか?
新しいデータベース接続を追加するためのpgAdminダイアログは、「Maintenance DB」を要求します。 接続できるように、接続するデータベースに設定します(また、接続する権限もあります)。 それでは、なぜ「DB」や「データベース」ではなく「メンテナンスDB」という名前になっているのでしょうか?

1
PostgreSQLにコミットされていないトランザクションがある[アイドル接続がある]かどうかを判断する方法は?
PostgreSQL 9.2のアイドル接続について尋ねたこの質問に対するコメントによると、いくつかのコミットされていないトランザクション(これらのアイドル接続の一部に関連している可能性があります)はパフォーマンスの問題を引き起こす可能性があります。 コミットされていないトランザクションがあるかどうかを判断する良い方法は何ですか(接続している接続がアイドル状態かどうかを知る方法がある場合のボーナスポイント)。 どうもありがとう!


6
ユーザーがメンバーになっているすべてのロール(継承されたロールを含む)を取得する方法は?
2つのPostgresqlデータベースグループ、「authors」と「editors」、および2人のユーザー、「maxwell」と「ernest」があるとします。 create role authors; create role editors; create user maxwell; create user ernest; grant authors to editors; --editors can do what authors can do grant editors to maxwell; --maxwell is an editor grant authors to ernest; --ernest is an author maxwellが属するロール(できればそれらのoid)のリストを返すパフォーマント関数を作成したいと思います。次のようなものです。 create or replace function get_all_roles() returns oid[] ... maxwell、authors、editorのoidを返す必要があります(ただし、ernestではありません)。 …

1
CTE(クエリ付き)の最適化フェンスの動作は、SQL:2008標準で指定されていますか?もしそうなら、どこで?
WITHクエリ(共通テーブル式、またはCTE)への頻繁な参照が最適化フェンスとして機能し、サーバーがフィルターをCTEクエリにプッシュダウンしたり、共通式をCTEから取り出したりすることを許可されていないことがよくあります。 SQL標準で要求される動作であるため。 CTEは間違いなくPostgreSQLの最適化フェンスです...しかし、これは標準で必要なのですか、実際には実装の詳細だけですか? たとえば、これらのメーリングリストの投稿は、それが標準であると主張または示唆しています。 http://www.digipedia.pl/usenet/thread/11566/101385/ コメントでそれを言及した後、私はそれがどこに指定されているのか尋ねられました-そしてSQL:2008の唯一のドラフトを見た後、私はそれを見つける運があまりありません。 私はまだ標準を徹底的に研究していないので、次のような人からの提案を期待しています。もしそうなら、それはどこに指定されていますか?または、Pgメーリングリストのステートメントにエラーがありますか? ToDoリストのスレッドCTE最適化フェンスも参照してください。。

3
PostgreSQL 8.4にpgcryptoをインストールするにはどうすればよいですか?
Ubuntu Server 10.10を使用しています。PostgreSQL8.4をインストールしましたapt-get install postgresql。組み込みsha1()関数を使用したいのですが、pgcrypto最初にインストールする必要があるようです。しかし、私はそれをインストールする方法を知りません。 何もありませんpgcrypto、私は使用してそれをインストールしようとした場合apt-get install pgcrypto、私はで始まるすべてのファイルを見つけることができませんpgcrypto(私が試した私のシステムではfind / -name "pgcrypto*")。 digest('word-to-hash','sha1')データベースクエリで関数を使用できるようにpgcryptoをインストールするにはどうすればよいですか? 更新: pgcryptoを別のUbuntuマシンにインストールするのに苦労しています。使用してパッケージをインストールした後sudo apt-get install postgresql-contrib-8.4、私は私の現在のPostgreSQLデータベースにそれをインストールするにはどうすればよいの?

2
Postgresの複数の列をjsonに
私はpostgresql 9.3.4を実行しています。3つのフィールドを持つテーブルがあります。 id name addr --- ---- ---- 1 n1 ad1 2 n2 ad2 ... 次のようなフィールドを持つ新しいテーブルにデータを移動する必要があります。 id data --- ---- 1 {'name': 'n1', 'addr': 'ad1'} 2 {'name': 'n2', 'addr': 'ad2'} ... row_to_json結果にSELECT t.id, row_to_json(t) as data FROM (select id, name, addr from myt) t追加idされるので、私にとっては解決策ではありません。データフィールドで必要なフィールド(名前とアドレス)を選択する方法はありますか?
23 postgresql  json  row 

3
Postgresのマテリアライズドビューを置き換える
マテリアライズドビューがあり、Postgres 9.3新しい列で更新したい。ただし、他のマテリアライズドビューもこのビューに依存しており、エラーメッセージは、他のオブジェクトがそれに依存している場合、ビューの削除が不可能であることを示しています。 エラー:他のオブジェクトに依存しているため、マテリアライズドビューlatest_chargesを削除できません また、ドキュメントから、REPLACEキーワードはマテリアライズドビューに対して有効ではないようです。すべての依存オブジェクトを削除し、各オブジェクトを再構築する以外にショートカットはありますか?

2
postgresから行を一括削除する最も効率的な方法
私はPostgreSQLから大量の行を削除する最も効率的な方法は何だろうと思っています。このプロセスは、テーブルにデータ(挿入と削除のデルタ)を一括インポートするための毎日の定期的なタスクの一部になります。削除する行は数千、場合によっては数百万になる可能性があります。 1行に1つの主キーのファイルがあります。私が考えていた2つの選択肢は以下のようなものでしたが、PostgreSQLの内部について十分な知識がなく、十分な情報を得た上で最善の判断を下すことができません。 主キーを使用DELETEして、ファイル内の各行に対してクエリを実行しますWHERE(またはn、IN()句を使用してバッチで削除をグループ化します)。 COPYコマンドを使用して主キーを一時テーブルにインポートし、結合を使用してメインテーブルから削除する どんな提案でも大歓迎です!

2
時系列データを保存する方法
一連の関連する値を持つ時系列データセット(間違っている場合は修正してください)と思われるものがあります。 例としては、旅行中に車をモデル化し、そのさまざまな属性を追跡します。例えば: タイムスタンプ| スピード| 走行距離| 温度| 等 Webアプリケーションがフィールドを効率的に照会して、最大、最小、および各データセットを経時的にプロットできるように、このデータを保存する最良の方法は何でしょうか? データダンプを解析し、結果をキャッシュして、保存する必要がないようにする単純なアプローチを開始しました。ただし、少し試してみたところ、このソリューションはメモリの制約のために長期的に拡張できず、キャッシュをクリアする場合は、すべてのデータを再解析および再キャッシュする必要があります。 また、データが10時間以上のデータセットというまれな可能性で毎秒追跡されると仮定すると、N秒ごとにサンプリングしてデータセットを切り捨てることが一般的に推奨されますか?

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