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: . Ale jeho použití se nedoporučuje:SELECT INTO
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