CREATE TABLE AS și LIKE în PostgreSQL

Creează un tabel din rezultatul unei interogări (CREATE TABLE AS) sau copiind structura altui tabel (LIKE).

Sintaxă SQL
CREATE TABLE nume AS interogare [WITH NO DATA];
CREATE TABLE nume (LIKE tabel_sursa [INCLUDING ALL]);

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 AS să aibă cheie primară și indecși. Nu are; adaugă-i cu ALTER TABLE și CREATE INDEX.
  • Folosești SELECT ... INTO tabel_nou în loc de CREATE TABLE AS. Merge în SQL obișnuit, dar în PL/pgSQL INTO î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.