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

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


2
インポートしようとしているファイルで許可が拒否されました
\ipsql.exeフォルダーにないファイルで使用しようとすると、それは言いC:: permission deniedます。たとえば、私は、SQLコマンドを使用してファイルに持っているC:\Users\Work\Desktop\School Work\load_database.sqlと私は入力し\i "C:\Users\Work\Desktop\School Work\load_database.sql"、それは言うがC:: permission denied。どうすれば修正できますか? 私の周りの仕事見つけ、ここ psql.exeがでているとあなたは同じフォルダに.sqlファイルをコピーします。 ところで、\ iはインポートの略ですか?


2
postgresqlでデータベースを複製する方法は?
スキーマと構造を含む既存のデータベースを別の新しいデータベースに複製する必要があります。これはpgadminではなくシェルコマンド環境で必要です。親切に私を助けてください。 nohup pg_dump exampledb > example-01.sql createdb -O postgres exampledbclone_01 私のユーザーは「postgres」です nohup psql exampledbclone_01 < example-01.sql $ pg_dump mydb > db.sql $ psql -d newdb -f db.sql
16 postgresql 

1
複数の値に対するPostgreSQL JSONクエリ配列
jsonb顧客IDの配列に対応するグループが見つかるというPostgresのタイプに対するクエリを作成します。 この例の表を考えます: CREATE TABLE grp(d JSONB NOT NULL); INSERT INTO grp VALUES ('{"name":"First","arr":["foo"], "customers":[{"id":"1", "name":"one"},{"id":"2", "name":"two"}]}') , ('{"name":"Second","arr":["foo","bar"], "customers":[{"id":"3", "name":"three"},{"id":"4", "name":"four"}]}') , ('{"name":"Third","arr":["bar","baz"], "customers":[{"id":"5", "name":"five"},{"id":"6", "name":"seven"}]}'); 私は同様の質問(複数の値に対するPostgreSql JSONB SELECT)を見つけ、このクエリを使用して単純な配列で必要なものを達成することができました: SELECT d FROM grp WHERE d->'arr' ?| ARRAY['foo', 'bar']; ただし、配列にJSON オブジェクトが含まれている場合は動作しません: SELECT d FROM grp WHERE d->'customers' ?| ARRAY['{"id":"1"}', '{"id":"5"}']; クエリに期待することは次のとおりです。 …

1
サブクエリを使用する場合のPostgresエラー[GROUP BY句に表示するか、集計関数で使用する必要があります]
2つのテーブルemployeeとがありphonesます。従業員は0〜n個の電話番号を持つことができます。従業員の名前と電話番号をリストしたいと思います。私はうまく動作する以下のクエリを使用しています。 SELECT empname,array_agg(phonenumber) AS phonenumbers FROM employee LEFT OUTER JOIN phones ON employee.empid = phones.empid GROUP BY employee.empid 従業員表には多数の行が含まれる場合があります。一度に数人の従業員のみを取得します。たとえば、電話番号で3人の従業員を取得します。このクエリを実行しようとしています。 SELECT empname,array_agg(phonenumber) AS phonenumbers FROM (SELECT * FROM employee ORDER BY empname LIMIT 3 OFFSET 0) AS employee LEFT OUTER JOIN phones ON employee.empid = phones.empid GROUP BY employee.empid しかし、私はこのエラーを受け取ります。ERROR: column …

1
pg_restore.exeを使用する前に制約を無効にします
pg_restore.exeデータベースからダンプファイルを実行しようとすると、同じように何十ものエラーがスローされます。 ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName" これは、データベースをダンプファイル(このファイルは運用データベースから取得)から復元する前に空にしたという事実によるものです。 ... を呼び出す前に、すべてのテーブルの制約とすべての外部キーを無効にし、pg_restore.exeその後、制約と外部キーを再度有効にする方法はありますか。 SOで何か面白いものを見つけました。制約チェックをコミット時間まで延期します。しかし、制約を延期した後にpg_restore.exe内部から呼び出すことはできないと思いpsql.exeます。 また、10年前のこの投稿もあり、制約を削除してから再度追加することを提案しています。または、pg_class reltriggersの値を0に変更すると、制約に対しても可能になります...しかし、それは良い習慣よりもハッキングされているのではないかと思います... この場合のベストプラクティスは何ですか?フラグを使用pg_dump.exe して-clean使用すると、データベースを復元するときに制約チェックをバイパスするダンプが作成されますか?

1
要素をテーブルにアップサートするときに「列参照があいまいです」
データベースとしてPostgreSQLを使用しています。そして、データベースにエントリを作成する必要があります。それが既に存在する場合は、そのフィールドを更新するだけですが、フィールドの1つは、設定されていない場合にのみ更新する必要があります。 私はこの質問の情報を使用しました:https : //stackoverflow.com/questions/13305878/dont-update-column-if-update-value-is-null、それは私が持っているものとかなり関連しています。 このクエリを使用しようとしましたが、実行すると次のエラーが発生しColumn reference 'affiliate_code' is ambiguousます。 INSERT INTO accounts (id, token, affiliate_code) VALUES (value1, value2, value3) ON CONFLICT (id) DO UPDATE SET token = value2, affiliate_code = COALESCE(affiliate_code, value3); (もちろん、実際の値は置き換えられます)。 で置き換えるaffiliate_code = COALESCE(affiliate_code, value3)とaffiliate_code = value3、すべてが機能しますが、希望どおりには機能しません。 どうすればこれを機能させることができますか? これが私のテーブルの定義方法です: CREATE TABLE accounts ( id VARCHAR NOT NULL UNIQUE, …

3
pgAdmin設定のバイナリパス
PostgreSQLをインストールしたの.backupは、別のプラットフォームにアップロードするために受け取った大きなファイルを復元する必要があるためです(3800万行で、他の方法でエクスポートするには大きすぎるようです)。pgAdmin 4で「復元」しようとすると、次のメッセージが表示されます。 [設定]ダイアログでPostgreSQLバイナリパスを設定してください。 これは、PostgreSQLフォルダーへの単なるパスですか?PostgreSQLサイトでこれに関するドキュメントを見つけることができません。私が見つけることができるのは: バイナリパスノードのフィールドを使用して、PostgreSQLバイナリユーティリティおよびEnterpriseDB Postgres Advanced Serverバイナリユーティリティへのパスを指定します。 pgAdmin以外の方法でデータベースを復元する簡単な方法はありますか?

4
PostgreSQL 9.6の列の削除とCTEを使用したSQL関数への副作用
3列(A、B、Dなど)のテーブルがあり、新しい列を導入しなければならなかった場合、Dの現在の位置を置き換えるためにCと言います。次の方法を使用します。 CおよびD2として2つの新しい列を導入します。 Dの内容をD2にコピーします。 Dを削除します D2の名前をDに変更します。 新しい順序は、A、B、C、およびDです。 (これまでのところ)問題が発生しなかったため、これは正当な慣行だと思いました。 しかし、今日、同じテーブルでステートメントを実行する関数が次のエラーを返したときに問題に遭遇しました。 table row type and query-specified row type do not match そして次の詳細: Query provides a value for a dropped column at ordinal position 13 私はPostgreSQLを再起動して、こことここでVACUUM FULL提案されているように最後に関数を削除して再作成しようとしましたが、これらの解決策は機能しませんでした(システムテーブルが変更された状況に取り組むことを除いて)。 非常に小さなデータベースで作業する余裕があったので、エクスポートし、削除してから再インポートしました。これにより、機能に関する問題が修正されました。 ここに見られるように、システムテーブルを変更する(pg_attributeなどで手を汚す)ことによって、列の自然な順序をいじってはならないという事実を知っていました。 Postgresの列の自然な順序を変更することは可能ですか? 私の関数によってスローされたエラーから判断すると、私のメソッドで列の順序をシフトすることもまたノーであることがわかりました。誰が私がやっていることも間違っている理由についていくつかの光を当てることができますか? Postgresバージョンは9.6.0です。 関数は次のとおりです。 CREATE OR REPLACE FUNCTION "public"."__post_users" ("facebookid" text, "useremail" text, "username" text) …

2
PostgreSQLの再帰的な子孫の深さ
祖先の子孫の深さを計算する必要があります。レコードにがある場合、レコードはobject_id = parent_id = ancestor_idルートノード(祖先)と見なされます。WITH RECURSIVEPostgreSQL 9.4でクエリを実行しようとしています。 データや列を制御しません。データおよびテーブルスキーマは外部ソースから取得されます。テーブルは継続的に成長しています。現在、1日あたり約3万件の記録があります。ツリー内のノードは欠落している可能性があり、ある時点で外部ソースからプルされます。彼らは通常引き込まれますcreated_at DESC順番にますが、データは非同期のバックグラウンドジョブでプルされます。 最初はこの問題に対するコードソリューションがありましたが、現在は500万行以上あり、完了するまでに約30分かかります。 テーブル定義とテストデータの例: CREATE TABLE objects ( id serial NOT NULL PRIMARY KEY, customer_id integer NOT NULL, object_id integer NOT NULL, parent_id integer, ancestor_id integer, generation integer NOT NULL DEFAULT 0 ); INSERT INTO objects(id, customer_id , object_id, parent_id, ancestor_id, generation) VALUES …


2
同じ関数の同時呼び出し:デッドロックはどのように発生しますか?
私の関数new_customerは、Webアプリケーションによって1秒あたり数回(ただし、セッションごとに1回)呼び出されます。最初に行うことは、customerテーブルをロックすることです(「存在しない場合は挿入」、つまりの単純なバリアントupsert)。 ドキュメントの私の理解は、他の呼び出しは、new_customer以前の呼び出しがすべて終了するまで単純にキューに入れる必要があるということです: LOCK TABLEは、テーブルレベルのロックを取得し、競合するロックが解放されるのを必要に応じて待機します。 代わりにデッドロックが発生することがあるのはなぜですか? 定義: create function new_customer(secret bytea) returns integer language sql security definer set search_path = postgres,pg_temp as $$ lock customer in exclusive mode; -- with w as ( insert into customer(customer_secret,customer_read_secret) select secret,decode(md5(encode(secret, 'hex')),'hex') where not exists(select * from customer where customer_secret=secret) returning customer_id ) insert …

2
アトミックトランザクションで一意の違反を回避する
PostgreSQLでアトミックトランザクションを作成することはできますか? これらの行を持つテーブルカテゴリがあると考えてください。 id|name --|--------- 1 |'tablets' 2 |'phones' また、列名には一意の制約があります。 私が試した場合: BEGIN; update "category" set name = 'phones' where id = 1; update "category" set name = 'tablets' where id = 2; COMMIT; 私は得ています: ERROR: duplicate key value violates unique constraint "category_name_key" DETAIL: Key (name)=(tablets) already exists.

2
データベース所有者の特権。アプリケーションユーザー
クイックバージョン: データベース所有者がこのデータベース内のテーブルにアクセスできるようにするには、どのコマンドを発行する必要がありますか?これは、その所有者のアカウントから実行できますか? 長いバージョン: RDSでデータベースを作成しています。Amazonで設定した「root」ユーザーがいます。 Amazonは自動的にグループロール「rds_superuser」を作成します。これは非常に特権がありますが、実際にはスーパーユーザーではありません。 次のように、アプリケーションのデータベースとユーザーを作成しています。 create database master_integration; CREATE ROLE master_application LOGIN ENCRYPTED PASSWORD '...' VALID UNTIL 'infinity'; GRANT ALL ON DATABASE master_integration TO GROUP rds_superuser WITH GRANT OPTION; GRANT ALL ON DATABASE master_integration TO GROUP master_application; \c master_integration; ALTER DEFAULT PRIVILEGES GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, …

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