-2

Ich versuche, einige Millionen Zeilen in eine PostgreSQL-Datenbank einzufügen. Ich frage mich, was der beste Weg ist, es zu tun.PostgreSQL - CREATE TABLE AS vs INSERT INTO Leistungsvergleich

  1. CREATE TABLE AS
  2. INSERT INTO

Ich bin auf der Suche, um zu sehen, welche besser ist und warum? Ich habe einige Blogs gelesen, konnte aber immer noch nicht zu einem Ergebnis kommen.

Ich denke, INSERT INTO ist ein Masseneinfügevorgang. Bitte korrigieren Sie mich, falls ich falsch liege. Ob CREATE TABLE AS SELECT ein Masseneinfügevorgang ist?

Bitte beraten.

+0

Sie haben nicht genügend Informationen zur Verfügung gestellt, um diese Frage beantworten zu können. Es gibt hier keine einzige Wahrheit, es hängt sehr davon ab, was Sie tatsächlich tun. – Nicarus

+0

[Zitat aus dem Handbuch für CREATE TABLE AS] (https://www.postgresql.org/docs/current/static/sql-createtableas.html): "* Dieser Befehl ist funktional ähnlich zu SELECT INTO, aber es ist bevorzugt da es weniger wahrscheinlich ist, mit anderen Verwendungen der SELECT INTO-Syntax verwechselt zu werden. Außerdem bietet CREATE TABLE AS eine Obermenge der von SELECT INTO * angebotenen Funktionalität. " –

Antwort

1

CREATE TABLE AS ist auch eine Bulk-Insert-Operation. Der Hauptunterschied ist, dass CREATE TABLE AS für PostgreSQL einfacher zu optimieren ist; Es ist klar, dass keine WAL-Information geschrieben werden muss (es sei denn, die WAL-basierte Replikation ist natürlich aktiv). In einigen anderen Fällen, in denen diese Optimierung zutrifft, finden Sie die wal_level documentation und Disable WAL Archival and Streaming Replication.

+0

Vielen Dank für Ihre Antwort. Wenn Sie sagen, dass CREATE TABLE AS für PostgreSQL einfacher zu optimieren ist und keine WAL-Informationen geschrieben werden müssen, muss INSERT INTO alles in WAL protokollieren? Habe ich richtig verstanden? – Ramya

+0

Korrigieren. 'INSERT INTO' muss alles protokollieren. Ich habe gerade PostgreSQL 9.4 überprüft, und die Optimierung findet dort nicht statt für "INSERT INTO", selbst wenn die Tabelle innerhalb der gleichen Transaktion erstellt wird. –

+0

genau das, was ich wissen musste. Danke Florian – Ramya