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

Създаване на временни таблици в SQL

Вероятно искате CREATE TABLE AS - работи и за TEMPORARY (TEMP ) таблици:

CREATE TEMP TABLE temp1 AS
SELECT dataid
     , register_type
     , timestamp_localtime
     , read_value_avg
FROM   rawdata.egauge
WHERE  register_type LIKE '%gen%'
ORDER  BY dataid, timestamp_localtime;

Това създава временна таблица и копира данни в нея. Статична моментна снимка на данните, имайте предвид. Това е точно като обикновена таблица, но се намира в RAM, ако temp_buffers е поставена достатъчно високо. Вижда се само в рамките на текущата сесия и умира в края му. Когато е създаден с ON COMMIT DROP той умира в края на транзакцията .

Временните таблици са на първо място в пътеката за търсене на схема по подразбиране , скривайки други видими таблици със същото име, освен ако не е квалифицирано по схема:

  • Как search_path влияе върху разделителната способност на идентификатора и „текущата схема“

Ако искате динамичен , ще търсите CREATE VIEW - съвсем различна история.

Стандартът SQL също дефинира, а Postgres също поддържа:SELECT INTO . Но използването му е обезкуражено:

Най-добре е да използвате CREATE TABLE AS за тази цел в нов код.

Наистина няма нужда от втори вариант на синтаксис и SELECT INTO се използва за присвояване в plpgsql , където SQL синтаксисът следователно не е възможен.

Свързано:

  • Комбинирайте две таблици в нова, така че избраните редове от другата да бъдат игнорирани
  • ГРЕШКА:входните параметри след един със стойност по подразбиране също трябва да имат стойности по подразбиране в Postgres

CREATE TABLE LIKE (...) копира само структурата от друга таблица и няма данни:

LIKE Клаузата посочва таблица, от която новата таблица автоматично копира всички имена на колони, техните типове данни и техните ненулеви ограничения.

Ако имате нужда от "временна" таблица само за целите на една заявка (и след това я изхвърлете), "производна таблица" в CTE или подзаявка идва със значително по-малко допълнителни разходи:

  • Да промените ли ръчно плана за изпълнение на заявката в postgresql?
  • Комбинирайте две SELECT заявки в PostgreSQL
  • Използвайте повторно изчислена избрана стойност
  • Множество CTE в една заявка
  • Актуализиране с резултати от друг sql


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли удар в производителността при използване на десетични типове данни (MySQL / Postgres)

  2. Как да използвам LoggingConnection на Psycopg2?

  3. получаване на идентификатори на множество редове, вмъкнати в psycopg2

  4. Не мога да намеря клиентската библиотека на PostgreSQL (libpq)

  5. Убийте сесия/връзка на postgresql