Ce face CREATE TABLE AS și LIKE
CREATE TABLE ... AS SELECT creează tabelul și îl umple într-un singur pas. Coloanele și tipurile vin din interogare. Este util pentru rapoarte, copii de siguranță înaintea unei modificări mari sau tabele de lucru.
Tabelul nou nu preia cheia primară, indecșii, valorile implicite sau constrângerile (în afară de tip). Dacă ai nevoie de structura completă, folosește CREATE TABLE nou (LIKE vechi INCLUDING ALL), apoi copiază datele cu INSERT ... SELECT.
Parametri
| Parametru | Descriere |
|---|---|
AS interogare |
Orice SELECT (sau VALUES). |
WITH NO DATA |
Creează doar structura, fără rânduri. |
LIKE sursa INCLUDING ALL |
Copiază coloanele, valorile implicite, constrângerile, indecșii, identity și comentariile. |
Ce returnează
SELECT n pentru CREATE TABLE AS (n = rândurile copiate), respectiv CREATE TABLE pentru LIKE.
Exemple
Exemplul 1: Copie de siguranță înaintea unei modificări
CREATE TABLE produse_backup_2026_10 AS
SELECT * FROM produse;
Rezultat în psql
SELECT 128
Exemplul 2: Tabel de raport din date agregate
CREATE TABLE vanzari_pe_oras AS
SELECT oras, count(*) AS comenzi, sum(total) AS incasari
FROM comenzi
GROUP BY oras;
SELECT * FROM vanzari_pe_oras ORDER BY incasari DESC;
Rezultat în psql
SELECT 3
oras | comenzi | incasari
--------+---------+----------
Iași | 42 | 8930.50
Cluj | 35 | 7410.00
Brașov | 18 | 3120.75
(3 rows)
Exemplul 3: Aceeași structură, cu indecși și constrângeri
CREATE TABLE comenzi_2027 (LIKE comenzi INCLUDING ALL);
Rezultat în psql
CREATE TABLE
Greșeli frecvente
- Te aștepți ca tabelul creat cu
ASsă aibă cheie primară și indecși. Nu are; adaugă-i cuALTER TABLEșiCREATE INDEX. - Folosești
SELECT ... INTO tabel_nouîn loc deCREATE TABLE AS. Merge în SQL obișnuit, dar în PL/pgSQLINTOînseamnă „pune rezultatul într-o variabilă”.
Comenzi înrudite
CREATE TABLE: Creează un tabel nou, cu coloane, tipuri de date și constrângeri: PRIMARY KEY, NOT NULL, UNIQUE, CHECK, DEFAULT, FOREIGN KEY.CREATE MATERIALIZED VIEW și REFRESH: View care salvează rezultatul interogării pe disc. Citirea este rapidă, iar datele se actualizează doar când rulezi REFRESH.CREATE VIEW: Salvează o interogare sub un nume, ca s-o folosești ca pe un tabel. Datele nu se copiază: interogarea rulează la fiecare citire.