web-dev-qa-db-ja.com

MySQLのメモリテーブルに相当するPostgreSQLですか?

PostgreSQLにはMySQLに相当するもの メモリテーブル がありますか?

これらのMySQLメモリテーブルは、セッション間で保持できます(つまり、セッションの最後にドロップする一時テーブルとは異なります)。私はPostgreSQLで同じことができるものを見つけることができませんでした。

34
Elliot B.

いいえ、現時点ではPostgreSQLには存在しません。本当にメモリテーブルが必要な場合は、RAMディスクを作成し、それに tablespace を追加して、テーブルを作成できます。

異なるセッション間で表示される一時テーブルのみが必要な場合は、 UNLOGGED table を使用できます。これらは本当のメモリテーブルではありませんが、テーブルデータがシステムRAMよりも大幅に小さい場合、驚くほど同じように動作します。

グローバル一時テーブルも別のオプションになりますが、PostgreSQL 9.2ではサポートされていません(コメントを参照)。

39
aleroot

4年前の質問に答えるが、それは今でもグーグル検索結果の上に来るから。

テーブル全体をメモリにキャッシュする組み込みの方法はありませんが、これを実行できる拡張機能があります。

メモリ内列ストア は、拡張機能のドロップとして機能するライブラリであり、列ストレージおよび実行エンジンとしても機能します。ドキュメントについては here を参照してください。テーブル全体をメモリにロードするために使用できるロード関数があります。

利点は、テーブルがpostgres shared_buffers内に保存されるため、クエリを実行すると、postgresはページがメモリ内にあり、そこからフェッチされることをすぐに感知します。

欠点は、shared_buffersがそのような方法で動作するように実際に設計されておらず、不安定性が発生する可能性があることです(通常はそうではありません)が、安全のために、この構成のセカンダリクラスター/マシンでこれをおそらく使用できます。

Postgresおよびshared_buffersに関する他のすべての通常の警告が引き続き適用されます。

14
Madusudanan