私は、ユーザー名は一意であると言いますが、1人のクエリで多数のユーザーを挿入する必要があります。ユーザー名が既に存在する場合、各ユーザーを確認する最善の方法は何でしょうか? PostgreSQLを使用する。PostgreSQLの複数行のユニークなデータを確認してください
答えて
はPRIMARY KEY
は、エンジンが余分な手間
alter table table_name add primary key (username);
とあなたのためのチェックを行いますすでにPKを持っている場合のように、1だけで
alter table table_name add constraint constraint_name UNIQUE (username);
私はすでにそれを持っています。しかし、重複や挿入が失敗した場合の対処方法は正しいですか? – SomethingElse
@SomethingElseはい、それは – cur4so
制約を追加することができ、あなたのユーザ名を設定しましたon conflict
句を使用することができます。
create table my_table(id serial primary key, user_name text unique);
insert into my_table (user_name) values
('John'), ('Ben'), ('Alice'), ('John'), ('Ben'), ('Alice'), ('Sam')
on conflict do nothing;
select *
from my_table;
id | user_name
----+-----------
1 | John
2 | Ben
3 | Alice
7 | Sam
(4 rows)
最後の行に、主キーのシーケンスが3回更新されていることに注意してください。
こんにちは!答えてくれてありがとう。重複行があることを管理者に通知する必要がある場合はどうすればよいですか? – SomethingElse
挿入を手動で制御したい場合は、重複して行を自動的にスキップ(または更新)するために追加されているので、 'on conflict'は使用しないでください。この構造の矛盾について通知する手段はありません。 – klin
挿入されていない行だけが表示されているか、存在している行だけを表示するかどうかは不明です。しかし、両方の要件は、writeable CTEsを使用して行うことができます持っているそれらの行を表示するには
insert into some_table (user_name)
values
('Tom'), ('Dick'), ('Harry'), ('Arthur'), ('Mary'), ('Ford'), ('Tom'), ('Zaphod')
on conflict do nothing
returning user_name;
:挿入されている(のみ)それらの行を表示するには
create table some_table (id serial primary key, user_name text unique);
:以下の表を想定し
が挿入されていません。
with new_data (name) as (
values
('Tom'), ('Dick'), ('Harry'), ('Arthur'), ('Mary'), ('Ford'), ('Tom'), ('Zaphod')
), inserted as (
insert into some_table (user_name)
select name
from new_data
on conflict do nothing
returning user_name
)
select *
from new_data
where name not in (select user_name from inserted);
- 1. オプションの複数引数デリゲートメソッドを確認してください。
- 2. 複数のパラメータの存在を確認してください
- 3. 複数のファイルを確認してください
- 4. 重複(乱数)を確認してください
- 5. 重複がないことを確認してください
- 6. パンダの列のデータ型を確認してください
- 7. sqliteのUIImageの重複値を確認してください
- 8. バッチファイルの引数の数を確認してください
- 9. Mapleの数字の桁数を確認してください
- 10. 複数のリストに複数の項目が含まれていないか確認してください
- 11. CSV - Pythonからのデータ型を確認してください
- 12. データのControl.Valueを確認してください
- 13. PHPMyAdminのMySQLエラー(データ型を確認してください)
- 14. マルチ・アソーク・アレイ内の重複を確認してください
- 15. カラム内のユニークなデータをカウントしてから別のユニークなデータと照合してください
- 16. Javascript確かにすべての入力にユニークな値があることを確認してください
- 17. ng-repeatの複数のラジオボタンの値を確認してください
- 18. リスト内の複数のリスト内の項目を確認してください
- 19. PostgreSQLの統計情報のターゲットを確認してください
- 20. Gridviewの最初の5行を確認してください
- 21. Capybara/HTML - 下の行のテキストを確認してください
- 22. 最高値の複数の列を確認してください
- 23. 重複からユニークな値を集計してください
- 24. Spock:URIのクエリパラメータの数を確認してください
- 25. モバイルのSIMスロットの総数を確認してください
- 26. Pythonの変数の状態を確認してください
- 27. 実行時にGCCのバージョンを確認してください
- 28. Android Gradle - 実行中のタスクを確認してください
- 29. PHP最後の行を確認してください
- 30. 実行中のHTAファイルを確認してください
1つのクエリで「挿入」を実行する唯一の方法は、ステージングテーブルを使用して結合し、新しいユーザーが単一の挿入クエリに含まれているかどうかを確認することです。 – Hogan
ありがとうございました。もっと具体的に教えていただけますか?パフォーマンスはどうですか? – SomethingElse