PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL временни таблици

Моля, имайте предвид, че в Postgres поведението по подразбиране за временните таблици е, че те не се изпускат автоматично и данните се запазват при комит. Вижте ON COMMIT .

Временните таблици обаче се отпадат в края на сесия на база данни:

Временните таблици се отпадат автоматично в края на сесията или по избор в края на текущата транзакция.

Има няколко съображения, които трябва да вземете предвид:

  • Ако искате изрично да DROP временна таблица в края на транзакция, създайте я с CREATE TEMPORARY TABLE ... ON COMMIT DROP синтаксис.
  • При наличие на обединяване на връзки , сесия на база данни може да обхваща множество клиентски сесии; за да избегнете сблъсъци в CREATE , трябва да премахнете временните си таблици - или преди да върнете връзка към пула (например като направите всичко в транзакция и използвате ON COMMIT DROP синтаксис за създаване), или при необходимост (като се предхожда всяко CREATE TEMPORARY TABLE оператор със съответен DROP TABLE IF EXISTS , което има предимството да работи и извън транзакции, напр. ако връзката се използва в режим на автоматично записване.)
  • Докато временната таблица се използва, колко от нея ще се побере в паметта, преди да се препълни на диска? Вижте temp_buffers опция в postgresql.conf
  • Нещо друго, за което трябва да се тревожа, когато работя често с временни таблици? Препоръчва се прахосмукачка, след като сте ИЗПУСКАли временни таблици, за да почистите всички мъртви кортежи от каталога. Postgres автоматично ще вакуумира на всеки 3 минути или така вместо вас, когато използвате настройките по подразбиране (auto_vacuum ).

Освен това, несвързано с вашия въпрос (но вероятно свързано с вашия проект):имайте предвид, че ако трябва да изпълнявате заявки срещу временна таблица след сте го попълнили, тогава е добра идея да създадете подходящи индекси и да издадете ANALYZE на въпросната временна таблица след приключихте с вмъкването в него. По подразбиране оптимизаторът, базиран на разходите, ще приеме, че новосъздадената временна таблица има ~1000 реда и това може да доведе до лоша производителност, ако временната таблица действително съдържа милиони редове.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Docker - Как мога да изпълним командата psql в контейнера postgres?

  2. Какво е PostgreSQL?

  3. Типове данни на PostgreSQL и C#

  4. Как да картографирате поле на масив PostgreSQL в Django ORM

  5. Postgresql рекурсивно самостоятелно присъединяване