2016-08-30 4 views
1

Ich weiß, dass ich tun könnte CREATE TABLE tbl_2 AS (select * from tbl_1)Was ist der schnellste Weg, um eine Tabelle in Postgres zu duplizieren/klonen?

Aber gibt es einen besseren/schneller/stärkeren Weg, dies zu tun? Ich rede mehr über Leistung als alles andere. Die Tabellen sind alle denormalisiert und ich habe keine Fremdschlüsselbeschränkungen, um die ich mich kümmern muss.

EDIT

es kann nicht besser Weg? Ref: https://dba.stackexchange.com/questions/55661/how-to-duplicate-huge-postgres-table

+0

'create table as ... select ...' ist so schnell wie es geht. Btw: die Klammern um die Auswahl sind völlig nutzlos. –

Antwort

0

Alternativ können Sie so etwas wie die folgenden verwenden:

$ pg_dump -t tbl_1 | sed -e 's/^SET search_path = .*$/SET search_path = tmpschema, pg_catalog;' > table.sql 
$ psql -d test -c 'CREATE SCHEMA tmpschema' 
$ psql -1 -d test -f table.sql 
$ psql -d test -c 'ALTER TABLE tmpschema.tbl_1 RENAME TO tbl_2; ALTER TABLE tmpschema.tbl_2 SET SCHEMA public; DROP SCHEMA tmpschema' 

Vielleicht ist es nicht schneller als CREATE TABLE ... AS (SELECT ...), aber es wird alle Indizes und Einschränkungen auch kopieren.

+0

Die LIKE-Klausel in einer create-Tabellenanweisung kann eine neue Tabelle mit den gleichen Indizes und Einschränkungen ein wenig einfacher erstellen als mit pg_dump. –

+0

Richtig, aber es kopiert nicht den Inhalt der Tabelle. Sie könnten 'CREATE TABLE ... LIKE ...' und dann 'INSERT INTO ... (SELECT ...)' ausführen, aber das wäre sicherlich langsam, weil die Indizes und Einschränkungen bereits definiert sind. 'pg_dump' gibt die Indizes und Constraints * nach * den Tabellendaten aus. –

0

Ein besserer Weg hängt wirklich davon ab, was genau Sie erreichen möchten.

Wenn Sie alle Einschränkungen und Indizes aus der ursprünglichen Tabelle halten, möchten Sie die LIKE Klausel in Ihrem CREATE TABLE Aussage wie so verwenden können:

CREATE TABLE tbl_2 (LIKE tbl_1 INCLUDING INDEXES INCLUDING CONSTRAINTS); 

Aber das schafft nur eine leere Tabelle. Sie müssten immer noch die Daten kopieren.

+0

Ich hoffe, in Bezug auf die Leistung der schnellste zu sein. Ich kümmere mich auch nicht wirklich um die Einschränkungen hier, weil mein Anwendungsfall es nicht verlangt. –

Verwandte Themen