sql >> Databáze >  >> RDS >> PostgreSQL

Vytváření dočasných tabulek v SQL

Pravděpodobně budete chtít CREATE TABLE AS - funguje také pro TEMPORARY (TEMP ) tabulky:

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;

Tím vytvoříte dočasnou tabulku a zkopírujete do ní data. Statický snímek dat, pamatujte. Je to jako běžná tabulka, ale je umístěna v RAM, pokud temp_buffers je nastavena dostatečně vysoko. Je viditelný pouze v rámci aktuální relace a na jeho konci zemře. Při vytvoření pomocí ON COMMIT DROP na konci transakce zemře .

Temp tabulky jsou na prvním místě ve výchozí cestě hledání schématu , skrývá ostatní viditelné tabulky se stejným názvem, pokud nejsou kvalifikovány pro schéma:

  • Jak parametr search_path ovlivňuje rozlišení identifikátoru a "aktuální schéma"

Pokud chcete dynamické , budete hledat CREATE VIEW - úplně jiný příběh.

Standard SQL také definuje a Postgres také podporuje:SELECT INTO . Ale jeho použití se nedoporučuje:

Nejlepší je použít CREATE TABLE AS pro tento účel v novém kódu.

Opravdu není potřeba druhá varianta syntaxe a SELECT INTO se používá pro přiřazení v plpgsql , kde syntaxe SQL následně není možná.

Související:

  • Zkombinujte dvě tabulky do nové, takže vybrané řádky z druhé budou ignorovány
  • CHYBA:vstupní parametry po jednom s výchozí hodnotou musí mít výchozí hodnoty také v Postgres

CREATE TABLE LIKE (...) pouze zkopíruje strukturu z jiné tabulky a žádná data:

LIKE klauzule určuje tabulku, ze které nová tabulka automaticky zkopíruje všechny názvy sloupců, jejich datové typy a jejich omezení typu „not-null“.

Pokud potřebujete "dočasnou" tabulku pouze pro účely jednoho dotazu (a poté ji zahodíte), "odvozená tabulka" v CTE nebo dílčím dotazu přichází s podstatně menší režií:

  • Změnit plán provádění dotazu v postgresql ručně?
  • Zkombinujte dva SELECT dotazy v PostgreSQL
  • Znovu použijte vypočítanou hodnotu výběru
  • Vícenásobné CTE v jednom dotazu
  • Aktualizovat výsledky jiného SQL


  1. Jak rozdělit řetězec na SQL Server

  2. Nasazení serveru Percona do hybridního cloudu

  3. Co to znamená, když je MySQL ve stavu Odesílání dat?

  4. SQL:Aktualizace řádku a vrácení hodnoty sloupce pomocí 1 dotazu