sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL - inaktiverar begränsningar

Enligt tidigare kommentarer borde det vara ett problem. Som sagt, det finns ett kommando som kan vara det du letar efter - det kommer att ställa in begränsningarna på uppskjutna så att de kontrolleras på COMMIT, inte vid varje radering. Om du bara gör en stor DELETE av alla rader kommer det inte att göra någon skillnad, men om du gör det i bitar kommer det att göra det.

SET CONSTRAINTS ALL DEFERRED

är vad du letar efter i så fall. Observera att begränsningar måste markeras som DEFERRABLE innan de kan skjutas upp. Till exempel:

ALTER TABLE table_name
  ADD CONSTRAINT constraint_uk UNIQUE(column_1, column_2)
  DEFERRABLE INITIALLY IMMEDIATE;

Begränsningen kan sedan skjutas upp i en transaktion eller funktion enligt följande:

CREATE OR REPLACE FUNCTION f() RETURNS void AS
$BODY$
BEGIN
  SET CONSTRAINTS ALL DEFERRED;

  -- Code that temporarily violates the constraint...
  -- UPDATE table_name ...
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;


  1. Framtiden för Postgres-XL

  2. Jag behöver min PHP-sida för att visa min BLOB-bild från mysql-databasen

  3. Flask-SQLAlchemy Gemener Index - hoppa över funktion, stöds inte av SQLAlchemy-reflektion

  4. Hur man installerar InfluxDB på Ubuntu 20.10