sql >> データベース >  >> RDS >> PostgreSQL

SqlalchemyとPostgreSql:将来的に競合することなく主キーを手動で設定する方法は?

    私はあなたが望むことをするための安全で効率的な方法を知りません。キーを自分で定義するか、生成されたキーを使用してどちらかの戦略に固執するかを実際に選択する必要があります。

    ひどい同時実行性を気にしない場合は、LOCK TABLE thetableを実行できます。 、作業を行います、setval 挿入したものの次の空き値へのテーブルの識別子シーケンス、およびcommit ロックを解除します。ただし、それでもnextvalを明示的に呼び出すアプリでは問題が発生します (多くのORMのように)?INSERTから値を省略してデータベースに値を定義させるのではなく、 列リストまたは明示的にDEFAULTという名前を付ける 。

    それ以外の場合は、コード(またはPL / PgSQLヘルパー関数)に再試行ループで挿入を実行させて、キーをインクリメントし、整合性エラーが発生したときに再試行することができます。この戦略は、トランザクションごとに1つ以上の挿入を行う必要がある場合は機能しません。さらにSERIALIZABLE 分離モードPL/PgSQLでは実行できないと思います。シリアル化の失敗を処理するには、クライアント側の再試行ループを使用する必要があります。

    それはひどい考えです。アプリケーション定義のキーを一貫して使用するか、データベース定義のキーを一貫して使用します。 2つを混ぜないでください。




    1. PostgreSQLのオープンソースバックアップ管理の現状

    2. MySQLとPHPを使用して、ユーザー間の相関値をデータベースに保存するにはどうすればよいですか?

    3. 2テーブルの相互作用:挿入、結果の取得、挿入

    4. グーグルコンピューティングエンジンのpostgresサーバーに接続する