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

PostgreSQLは、Linux、UNIX、Windows、OS Xを含むすべての主要なプラットフォームで利用できるオープンソースのオブジェクトリレーショナルデータベース管理システム(ORDBMS)です。質問する場合は、Postgresの正確なバージョンをお知らせください。管理または高度な機能に関する質問は、dba.stackexchange.comに直接送信してください。

12
SQLデータベースからの単純ランダムサンプル
SQLで効率的な単純ランダムサンプルを取得するにはどうすればよいですか?問題のデータベースはMySQLを実行しています。私のテーブルは少なくとも200,000行であり、約10,000の単純なランダムサンプルが必要です。 「明白な」答えは次のとおりです。 SELECT * FROM table ORDER BY RAND() LIMIT 10000 大きなテーブルの場合、これは遅すぎます。RAND()すべての行を呼び出し(すでにO(n)に配置されています)、それらを並べ替えて、せいぜいO(n lg n)にします。O(n)よりも速くこれを行う方法はありますか? 注:Andrew Maoがコメントで指摘しているように、SQL Serverでこのアプローチを使用している場合はNEWID()、RAND()がすべての行に同じ値を返す可能性があるため、T-SQL関数を使用する必要があります。 編集:5年後 私はより大きなテーブルでこの問題に再び遭遇し、2つの調整を加えた@ignorantのソリューションのバージョンを使用することになりました: 行を希望のサンプルサイズの2〜5倍にサンプリングし、安価に ORDER BY RAND() RAND()挿入/更新のたびに、の結果をインデックス付きの列に保存します。(データセットの更新がそれほど多くない場合は、この列を最新の状態に保つための別の方法を見つける必要がある場合があります。) テーブルの1000アイテムのサンプルを取得するために、行をカウントし、frozen_rand列を使用して結果を平均10,000行までサンプリングします。 SELECT COUNT(*) FROM table; -- Use this to determine rand_low and rand_high SELECT * FROM table WHERE frozen_rand BETWEEN %(rand_low)s AND %(rand_high)s ORDER BY RAND() …


9
ONCONFLICT句で複数のconflict_targetを使用する
テーブルcol1に2つの列がありcol2、どちらも一意のインデックスが付けられています(col1は一意であり、col2も一意です)。 このテーブルに挿入し、ON CONFLICT構文を使用して他の列を更新する必要がありますが、両方の列をconflict_target句で使用することはできません。 できます: INSERT INTO table ... ON CONFLICT ( col1 ) DO UPDATE SET -- update needed columns here しかし、次のようないくつかの列に対してこれを行う方法: ... ON CONFLICT ( col1, col2 ) DO UPDATE SET ....

16
重複するエントリを削除する方法は?
既存のテーブルに一意制約を追加する必要があります。これは問題ありません。ただし、テーブルにはすでに数百万の行があり、行の多くは追加する必要がある一意の制約に違反しています。 問題の行を削除する最も速い方法は何ですか?重複を見つけて削除するSQLステートメントがありますが、実行に時間がかかります。この問題を解決する別の方法はありますか?たぶんテーブルをバックアップしてから、制約が追加された後に復元しますか?

5
すでに存在するRailsの自動割り当てID
次のように新しいレコードを作成します。 truck = Truck.create(:name=>name, :user_id=>2) 私のデータベースには現在トラック用に数千のエンティティがありますが、いくつかのIDを利用できるように、それらのいくつかにIDを割り当てました。つまり、railsはid = 150のアイテムを作成し、正常に機能しています。しかし、それからアイテムを作成してid = 151を割り当てようとしますが、そのidはすでに存在している可能性があるため、次のエラーが表示されます。 ActiveRecord::RecordNotUnique (PG::Error: ERROR: duplicate key value violates unique constraint "companies_pkey" DETAIL: Key (id)=(151) already exists. そして、次にアクションを実行するとき、ID 152が割り当てられます。これは、その値がまだ取得されていない場合に正常に機能します。IDを割り当てる前に、IDがすでに存在するかどうかをレールで確認するにはどうすればよいですか? ありがとう! 編集する トラックIDは複製されるものです。ユーザーは既に存在し、この場合は定数です。これは、私が対処しなければならないレガシー問題です。1つのオプションとして、今回はすべてのIDをレールが自動割り当てできるようにテーブルを再作成します。他にもいくつか問題があるため、これが最良の選択であると考え始めていますが、トラックは他の多くのテーブルの外部キーであるため、これを行うための移行は非常に複雑になります。自動割り当てされたIDを使用して既存のすべての関係を維持しながら、Trailにすでに保存されている同じデータを使用してRailsが新しいテーブルを作成する簡単な方法はありますか?


7
postgresのテーブルのクエリ許可
postgresのオブジェクトに付与されたすべてのGRANTSを照会するにはどうすればよいですか? たとえば、「mytable」というテーブルがあります。 GRANT SELECT, INSERT ON mytable TO user1 GRANT UPDATE ON mytable TO user2 私に与える何かが必要です: user1: SELECT, INSERT user2: UPDATE
92 sql  postgresql  grant 

5
PostgreSQL:コマンドラインからパラメーターを渡す方法は?
?プレースホルダーを使用するスクリプトにやや詳細なクエリがあります。この同じクエリをpsqlコマンドライン(スクリプトの外部)から直接テストしたかったのです。入力してすべて?を実際の値で置き換えるのを避けたいのですが、クエリの後に引数を渡したいのです。 例: SELECT * FROM foobar WHERE foo = ? AND bar = ? OR baz = ? ; 次のようなものを探します: %> {select * from foobar where foo=? and bar=? or baz=? , 'foo','bar','baz' };

9
Createuser:データベースに接続できませんでしたpostgres:致命的:ロール「tom」が存在しません
初めてPostgresをセットアップしようとしていますが、データベースの読み取りと作成の権限を持つユーザーを作成する必要があります。ただし、使用する場合: createuser username ターミナルで次のメッセージが表示されます。 createuser:データベースに接続できませんでしたpostgres:致命的:ロール "tom"が存在しません トムは私が今ログインしているUbuntuユーザーアカウントです。「postgres」というユーザー名を作成しようとしています。psql -U psql template1データベースを作成して、Railsアプリの所有者をデータベースに割り当てることができます。

6
pgAdminを使用してテーブルダンプ(.sql)をエクスポートおよびインポートします
pgAdminバージョンを持っています 1.16.1 だから、テーブルダムをエクスポートするために私はします: テーブルを右クリックし、メニューでをクリックしbackup、次にFormat選択Plainしてファイルを名前を付けて保存しますsome_name.sql 次に、テーブルを削除します。 では、テーブルのバックアップsome_name.sqlをデータベースにインポートする必要があります。 これを行う方法?.sqlpgAdminを使用してテーブルのダンプをデータベースにインポートする方法が見つかりません。 手伝ってくれませんか。

4
PostgreSQLで2つの日付間の時系列を生成する
このようなクエリがあり、2つの指定された日付の間の一連の日付を適切に生成します。 select date '2004-03-07' + j - i as AllDate from generate_series(0, extract(doy from date '2004-03-07')::int - 1) as i, generate_series(0, extract(doy from date '2004-08-16')::int - 1) as j との間2004-03-07で162の日付が生成され2004-08-16、これが必要です。このコードの問題は、二つの日付が異なる年からあるとき、私はしようとすると、それは例えば、正しい答えを与えていないだろうということです2007-02-01と2008-04-01。 より良い解決策はありますか?

5
テーブルにデータを入力する前、またはデータを配置した後にインデックスを作成する方がよいでしょうか。
インデックスを追加して変更するためにコピーする約1億行のテーブルがあります。新しいテーブルの作成にかかる時間はそれほど気になりませんが、データを挿入する前にテーブルを変更するか、最初にデータを挿入してからインデックスを追加すると、作成されたインデックスの効率が向上しますか?

9
「エラー:ロールのメンバーである必要があります」PostgreSQLでスキーマを作成する場合
スーパーユーザーアカウントでログインしています。これが私が行っているプロセスです。 1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd' 2-> CREATE SCHEMA AUTHORIZATION test ロールは正しく作成されていますが、スキーマを作成しようとすると次のエラーが発生します。 ERROR: must be member of role "test" 前もって感謝します!
92 postgresql  roles 

2
移行のためのPostgreSQL外部キーチェックを無効にする
PostgreSQL9.4で外部キーを持つ多くの移行を作成しています。 テーブルはすべて、移行時に外部キーが期待する正確な順序である必要があるため、これは頭痛の種です。新しい移行が外部キーのために依存している他のパッケージから移行を実行する必要がある場合は、さらに厄介になります。 MySQLではSET FOREIGN_KEY_CHECKS = 0;、移行ファイルの先頭に追加するだけでこれを簡略化できます。移行コードの長さだけPostgresSQLでこれを一時的に行うにはどうすればよいですか? ところで、これにはLaravelスキーマビルダーを使用します。
92 postgresql 

3
Postgresの既存の列に「シリアル」を追加する
Postgres 9.0データベースに小さなテーブル(〜30行)があり、整数IDフィールド(主キー)が現在1から始まる一意の連続した整数が含まれていますが、 'serial'キーワードを使用して作成されていません。 今後、このテーブルに挿入すると、このフィールドがタイプとして「シリアル」を使用して作成されたかのように動作するように、このテーブルを変更するにはどうすればよいですか?
91 postgresql 

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