แแแแ แแแแแชแแแแ แแแแ แแแแก แแแแแแแฅแกแฃแ แ แแแแฃแจแแแแแแกแแแแก (แแแแกแฎแแแแแแฃแแ
แแ แขแแแแก แขแแแแฃแ แ แแแแแแแแ แฉแแแฃแแแแ แแ แแกแ แแฆแแ แก: โแกแฌแแ แแ แแฅ
แแแแ แแ แ แแแแกแแช แแ โแ แแฆแแชแแกโ แแแชแฃแแแแ แแกแแแแ แแแแแแแแขแจแ แแฌแงแแแ แแ แกแแ แแแกแแ แฃแแแ แแแแแ แซแแแแก แแฃแจแแแแ แแแแแชแแแแ แแแแแกแแแ 24x7, แฌแแ แแแแฅแแแแแ แแ แแแแแ แแแแ แแแแ แแแแแแแ, แ แแแแแแช แแแแแแแแฃแ แแแก แแฅแแแแก แชแฎแแแ แแแแก.
แแแแแแ แแแแแแแแแแแกแแแแก PostgreSQL-แจแ (แแ แแ แ แแฎแแแแ แแแกแจแ), แจแแแแซแแแแ แแแแแแงแแแแ แ แแแแแแแแ แแแขแแแแแแชแแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแแชแแแ แแแแแฃแจแแแแ แงแแแแแคแแ แ แฃแคแ แ แกแฌแ แแคแแ แแ แแแแแแแ แ แแกแฃแ แกแแ.
1. แกแแ แแแแแแแขแแแแ?
แแแ แแแ แ แแแจแ, แแแแแ แแแแแแฌแงแแแขแแ, แกแแ แจแแแแแซแแแ แแขแแแ แแแ แแแแแชแแแแแ, แ แแแแแแ โแแแแฃแจแแแแแโ แแแแแแ.
1.1. แแ แแแแแแ แแแแแแแแ (แแ แแแแแแ แชแฎแ แแแ)
แแ แแแชแแแจแ, PostgreSQLโแกแแแแก แแ แแแแแแ แชแฎแ แแแแแ แแแแแแ, แ แแช แแแแแกแแแแ แ แกแฎแแ. แแแแขแแ, แชแ แฃแ แฌแแแแแแ แแแกแฌแแแก "แแฅ แงแแแแแคแแ แ แแแแฎแแแ แแฎแแแแ แแแฎแกแแแ แแแแจแ แแ แจแแแซแแแแ แแแกแ แฃแแแแก". แแแแ แแ แแกแแแ แแ แกแแแแแก แ แแแแแแแแ แแแแจแแแแแแแแแ แแแแกแฎแแแแแแ.
แแฅแแแแ แกแแแฃแแแ แ โแกแแฎแแแแ แกแแแ แชแโ แแแแแชแแแแ แแแแแกแแแ แแแแแแฃแแ แแแแจแแ แแกแแแแก
แแฃ แแ แ แแแแจแแ แ แจแแแชแแแแ แแแแแแจแแ แแแแก แแ แแแ แแฃแแแ CREATE TABLE x
, แแแจแแ แแแแแ แแฃแชแแแแแแแ แแแแฆแแแก แแ แแฃแแแแแแฃแ แแแแก แจแแชแแแแ แแแแแชแแแแ แแแแแก แแแแแฅแขแแแ.
แแแแ แแ แแฃ แแ แแแ แจแแแชแแแแ แแฆแกแ แฃแแแแแก CREATE TEMPORARY TABLE x
, แแแจแแ แแ แแแ แแแ แแแแฃแ แแ แแแแแแแแแก แแแแก แแ แงแแแแ แแแแฆแแแก แแฅแแแแ แแกแแ แแแแแแแแ. แแ แแแ แจแแ แแก แแ แแคแแ แ แแฅแแแแ แกแแแ แแ.
"แแแแแแแแแแแฃแ แแแ" แแแแแจแแแกแแก
แ แแแแกแแช แแแแจแแ แ แแแฎแฃแ แฃแแแ, แงแแแแ แแ แแแแแแ แชแฎแ แแแ แแแขแแแแขแฃแ แแ แแจแแแแ, แแกแ แ แแ แฎแแแแ DROP TABLE x
แแแ แ แแ แแฅแแก แแแ แแ...
แแฃ แแฅแแแ แแฃแจแแแแ pgbouncer แขแ แแแแแฅแชแแแก แ แแแแแจแ, แแแจแแ แแแแแชแแแแ แแแแ แแแ แซแแแแแก แ แฌแแแแแก, แ แแ แแก แแแแจแแ แ แฏแแ แแแแแ แแฅแขแแฃแ แแ แแ แแแกแจแ แแก แแ แแแแแแ แชแฎแ แแแ แฏแแ แแแแแ แแ แกแแแแแก.
แแแแขแแ, แแแกแ แฎแแแแฎแแ แจแแฅแแแแก แแชแแแแแแ, แกแฎแแ แแแแจแแ แแแแ pgbouncer-แแแ, แแแแแแฌแแแแก แจแแชแแแแแก. แแแแ แแ แแแแก แแแแแแแ แแชแแแแแ แจแแกแแซแแแแแแแ แแแแแงแแแแแแ CREATE TEMPORARY TABLE IF NOT EXISTS x
.
แแแ แแแแแ, แฃแแฏแแแแกแแ แแ แแแแแแแแ แแก แแแแแช, แ แแแแแ แแแจแแ แจแแแแซแแแแ "แแแฃแแแแแแแแ" แแแแแแ แแฅ "แฌแแแ แแคแแแแแแแกแแแ" แแแ แฉแแแแแ แแแแแชแแแแแ. แกแแแแแแแ แแ, แแแแ แแ แฃแแแแแกแแ แฌแแแแแแฎแแ แกแแฎแแแแซแฆแแแแแแ แแ แแแฎแแ, แ แแ แชแฎแ แแแแก แจแแฅแแแแกแแก แจแแกแแซแแแแแแแ แแแแแขแแแ ON COMMIT DROP
- แแแฃ, แ แแแแกแแช แขแ แแแแแฅแชแแ แแแกแ แฃแแแแแ, แชแฎแ แแแ แแแขแแแแขแฃแ แแ แฌแแแจแแแแ.
แแ แแ แแแแแแแชแแ
แแแแก แแแแ, แ แแ แแกแแแ แแแฃแแแแแก แแฎแแแแ แแแแแ แแขแฃแ แแแแจแแ แก, แแ แแแแแแ แชแฎแ แแแแแ แแ แแแแแแแ แแแแ. แแแแ แแ แแก แแแแแ แแชแฎแแแก แแแแแชแแแแ แแ แแแแ แฉแแฌแแ แแก แแฃแชแแแแแแแแแก heap + WAL-แจแ, แแแแขแแ แแแกแจแ แฉแแกแแ/แแแแแฎแแแแ/แฌแแจแแ แแแชแแแแแแ แกแฌแ แแคแแ.
แแแแ แแ แแแแก แแแแ, แ แแ แแ แแแแแแ แชแฎแ แแแ แฏแแ แแแแแ "แแแแฅแแแก แฉแแแฃแแแแ แแแ" แชแฎแ แแแแ, แแก แแ แจแแแซแแแแ แจแแแฅแแแแก แ แแแแแแแแแช. แงแแแแ แจแแแแฎแแแแแจแ, แฏแแ แฏแแ แแแแ, แแฃแแชแ แจแแกแแแแแแกแ แแแขแฉแ แแแแ แฎแแแแ แขแ แแแแแแก.
1.2. แแแแฆแแแฃแแ แแแแแแ
แแแแ แแ แ แ แฃแแแ แแแแแแแแ, แแแแแแแแแ, แแฃ แแแฅแแ แ แแแแ แกแแฎแแก แจแ แแแแขแแแแแ ETL แแ แแชแแกแ, แ แแแแแแช แแแ แแแแฎแแ แชแแแแแแแ แแ แแ แขแ แแแแแฅแชแแแก แคแแ แแแแแจแ, แแแแ แแ แแแแแช แแแฅแแ pgbouncer แขแ แแแแแฅแชแแแก แ แแแแแจแ? ..
แแ แแแแแชแแแแ แแแแแแ แแแแแแแ แแแแแ, แ แแ แแ แแ แแก แกแแแแแ แแกแ แแแแขแแ แแแ แแ แ แแแแจแแ แแ แแแแแชแแแแ แแแแแแแ (แฌแแแแแแฎแแ, แแ แแ แแ แแชแแกแ แแแแ แแ แแชแแกแแ แแ)?..
แแ แ แแฆแแช แแแแ แแชแแแแ แแแแแแแแ แแแแก แแกแแแฅแ แแแฃแแแ แกแฎแแแแแกแฎแแ แแแแจแแ แแแจแ?..
แแฅ แแฎแแแแ แแ แแ แแแ แแแแขแแ - แแ แแแแแ แจแแฅแแแแแ แแ แแแ แแแแแแ แชแฎแ แแแ. Pun, แแแแฎ. แแแฃ:
- แจแแแฅแแแแ "แฉแแแ แกแแแฃแแแ แ" แชแฎแ แแแแแ แแแฅแกแแแแแฃแ แแ แจแแแแฎแแแแแแ แกแแฎแแแแแแ, แ แแแ แแ แแแแแแแแแแแก แแแแแแกแแแ
- แแแแแแฌแแ แ: แจแแแแกแ แแกแแแ แแแ แ แฌแงแแ แแก แแแแแชแแแแแแ
- Transform: แแแแแงแแแแแแ, แจแแแกแแแฃแแ แแแกแแฆแแแแก แแแแแแแแจแแ แแแแแ แแแแแแ
- Load: แฉแแแกแฎแ แแแ แแแแแชแแแแแ แกแแแแแแ แชแฎแ แแแแแจแ
- แฌแแแจแแแ "แฉแแแ" แชแฎแ แแแแแ
แแฎแแ แแ - แแฃแแ แแแแแแแจแ. แฒกแแแแแแแแแแจแ, PostgreSQL-แจแ แงแแแแ แฉแแฌแแ แ แแ แฏแแ แฎแแแแ - COMMIT
'แแฎแแแแแแ แแ ROLLBACK
แแฃแแแแแแ แขแ แแแแแฅแชแแแแ.
แแแแ แแ แฉแแแ แแ แแแญแแ แแแแ แแก! แฉแแแ แแแแฅแแก แแแแแ แแ แแชแแกแ แแ แแงแ แกแ แฃแแแแ แฌแแ แแแขแแแฃแแ แแ แแ แ.. แแ แแฅแแก แแแแจแแแแแแแ แ แแแแแแ แจแฃแแแแแฃแ แ แขแ แแแแแฅแชแแ แแฅแแแแ - แฉแแแ แแ แแแแแแขแแ แแกแแแก โแแ แแชแแกแแก แจแฃแ แแแแแแแ แแแแแ แแแแ แซแแแแแโ, แแแแกแแแฃแแ แแแแ แแแจแแ, แ แแแแกแแช แแแฃแ แแแแแแแแ แกแแ แแงแ.
แแแแกแแแแแก PostgreSQL แแแแแแแแแ แแแแ, แฏแแ แแแแแ 9.1 แแแ แกแแแจแ, แจแแแแแฆแแก แแกแแแ แ แแ, แ แแแแ แแชแแ
แแ แแแแแแแแแ, แชแฎแ แแแ แแฅแแแแแ, แ แแแแ แช แแแฃแแแแแแกแฌแแแแแแแ. แแแแฆแแแฃแ แชแฎแ แแแแแจแ แฉแแฌแแ แแแ แแแแแชแแแแแ แแ แแแแแก แฌแแแแกแฌแแ แฉแแฌแแ แแก แแฃแ แแแแจแ (แแฎ. แแแแ 29), แ แแช แแฌแแแแก แแกแแ แชแฎแ แแแแแก แฉแแแฃแแแแ แแแแ แแแแ แแ แกแฌแ แแคแแ แแฃแจแแแแแ. แแฃแแชแ, แแกแแแ แแ แแ แแแ แแแฃแแฃแ แ แฌแแ แฃแแแขแแแแแแแกแแแ; แกแแ แแแ แแก แฃแแแแ แแกแแแแก แแ แแแแแฃแแแแแแ แแแแแจแแแก แจแแแแฎแแแแแจแ, แแแแแ แแชแฎแฃแแ แชแฎแ แแแ แแแขแแแแขแฃแ แแ แจแแแแแชแ. แแแ แแ แแแแกแ, แแแแแขแแแแแฃแแ แชแฎแ แแแแก แจแแแแแ แกแ แแ แแ แแก แแแแแแ แแแฃแแ แแแ แกแแ แแแ แแแแ. แแแแแกแแแแ แ แแแแแฅแกแแแ, แ แแแแแแแช แจแแฅแแแแแแ แแ แแแแแแ แแแฃแ แชแฎแ แแแจแ, แแแขแแแแขแฃแ แแ แฎแแแแ แแแฃแฅแแแแฃแแ.
แแแแแแ, แแก แแฅแแแแ แแแแ แแ แฃแคแ แ แกแฌแ แแคแ, แแแแ แแ แแฃ แแแแแชแแแแ แแแแแก แกแแ แแแ แ "แแแแแ แแแแ", แแก แฃแกแแแแแแแ แแฅแแแแ. แแแแ แแ แ แแแแแแแ แฎแจแแ แแ แฎแแแแ แแก แแ แแชแแก แแฃ แแ แ แแฅแแแแแ ETL แแ แแชแแกแแ แ แแแแ แแแแแแกแฌแแ แแก แแก แกแฌแแ แแ โแจแฃแแแแโ แแแแแชแแแแ แแแแแก โแแฆแแ แซแแแแแแกโ แจแแแแแ?..
แแฃ แแ แ แแ แแแแแ แแแชแแแฃแแ แจแแแแฎแแแแ แแฅแแแแกแแก แฐแแแแก, แแแแแแงแแแแ UNLOGGED
แแแแ แแ แแ แแกแแ แแก แแ แฉแแ แแแ แแก แแขแ แแแฃแขแ แ แแแแฃแ แชแฎแ แแแแแแ, แแแแแชแแแแแ แกแแแแแแแช แซแแแ แคแแกแแ แแฅแแแแแแแก.
1.3. ON COMIT { แแฌแแ แแแแแแก แฌแแจแแ | แแแ แแแ}
แแก แแแแกแขแ แฃแฅแชแแ แกแแจแฃแแแแแแก แแแซแแแแ แแแฃแแแแแ แแแขแแแแขแฃแ แ แฅแชแแแ, แ แแแแกแแช แขแ แแแแแฅแชแแ แแแกแ แฃแแแแแ แชแฎแ แแแแก แจแแฅแแแแกแแก.
on ON COMMIT DROP
แแแแแ แฃแแแ แแแแฌแแ แ, แแแแแ แแ แแแก DROP TABLE
, แแแแ แแ แแแ ON COMMIT DELETE ROWS
แกแแขแฃแแชแแ แฃแคแ แ แกแแแแขแแ แแกแแ - แแก แแฅ แแ แแก แแแแแ แแ แแแฃแแ TRUNCATE TABLE
.
แแแแแแแแ แแ แแแแแแ แชแฎแ แแแแก แแแขแ-แแฆแฌแแ แแก แจแแกแแแแฎแ แแแแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แ แแฃแกแขแแ แแแแแแ, แ แแช แฉแแแฃแแแแ แแแ แชแฎแ แแแแก, แแแจแแ แแ แแแแแแ แชแฎแ แแแแแแก แแฃแแแแแ แจแแฅแแแ แแ แฌแแจแแ แแฌแแแแก แกแแกแขแแแแก แชแฎแ แแแแแแก แซแแแแ โแจแแจแฃแแแแแกโ. pg_class, pg_attribute, pg_attrdef, pg_depend,โฆ
แแฎแแ แฌแแ แแแแแแแแแ, แ แแ แแฅแแแ แแงแแแ แแฃแจแ แแแแแชแแแแ แแแแแกแแแ แแแ แแแแแ แแแแจแแ แแ, แ แแแแแแช แงแแแแ แฌแแแก แฎแกแแแก แแฎแแ แขแ แแแแแฅแชแแแก, แฅแแแแก, แแแกแแแก, แแแฃแจแแแแแก แแ แจแแแก แแ แแแแแ แชแฎแ แแแก... แกแแกแขแแแฃแ แชแฎแ แแแแแจแ แแแแ แแแแแแ แญแแ แแ แแแแแแ แแ แแก แแแแแแฌแแแแก แแแแแขแแแแ แแฃแฎแ แฃแญแแแก แงแแแแแ แแแแ แแชแแแกแแแแก.
แแแแแแแ, แแฃ แแแแแแแแแ แแแแก! แแ แจแแแแฎแแแแแจแ แแแชแแแแแแ แแคแแฅแขแฃแ แแ CREATE TEMPORARY TABLE x ... ON COMMIT DELETE ROWS
แแแแแฆแแ แแแ แขแ แแแแแฅแชแแแก แชแแแแแแแ - แจแแแแแ แงแแแแแ แแฎแแแ แขแ แแแแแฅแชแแแก แแแกแแฌแงแแกแจแ แชแฎแ แแแแแ แฃแแแ แแ แแก แแแ แกแแแแแก (แแแ แแก แจแแแแฎแแ CREATE
), แแแแ แแ แชแแ แแแแ แแฅแแแแ, แแแแแแแ TRUNCATE
(แฉแแแ แแกแแแ แจแแแแแแฎแแ แแแกแ แแแ แ) แฌแแแ แขแ แแแแแฅแชแแแก แจแแกแ แฃแแแแแกแแก.
1.4. แแแฌแแแแแ...แแแ แจแแ แแก...
แแแกแแฌแงแแกแจแ แแฆแแแแจแแ, แ แแ แแ แแแแแแ แชแฎแ แแแแแแก แแแแแงแแแแแแก แแ แ-แแ แแ แขแแแแฃแ แ แจแแแแฎแแแแแ แกแฎแแแแแกแฎแแ แกแแฎแแก แแแแแ แขแ - แแ แแแแแแแแแ แ แแแฆแแแแแ แแแแแแ แแแก แกแแแแแแ แชแฎแ แแแแก แแแแแแแก แฉแแแแแแแแแแก แแแกแ แแ แแแแแแ แแแแแแ แแชแแแจแ...
แแแแ แแ แกแแแแ แแแชแ แแ แแก แแ แแแ แแกแแก แซแ แแแ! แฒแแแขแแแแช แจแแฅแแแแแ แแฎแแแ แชแฎแ แแแ "แแแแฃแจแแ แแแงแ แแแแแแ" แแก แจแแแซแแแแ แแงแแก แแแแ แแ แฃแคแ แ แแแ แขแแแ:
CREATE TEMPORARY TABLE import_table(
LIKE target_table
);
แแแก แจแแแแแ, แ แแช แแฅแแแ แจแแแแซแแแแ แจแแฅแแแแ แแแแ แ แแแแแชแแแ แแ แชแฎแ แแแจแ, แแแกแ แซแแแแ แแ แแกแแแแก แแฅแแแแ แกแฌแ แแคแ. แแแแ แแ แแ แกแแแแแก แแแแก แขแ แแแแชแแฃแแ แแแแแฌแงแแแขแ - แแแแแฅแกแแแ! แฒแ แแ, แแ แแแแแ แชแฎแ แแแก แแกแแแ แจแแแซแแแแ แฐแฅแแแแแก แแแแแฅแกแแแ.
แแแแแแแแ, แฎแจแแ แแ, แกแแญแแ แ แแแแแฅแกแแแ แแแแฎแแแแ แกแแแแแแ แชแฎแ แแแแก แแแแแฅแกแแแก, แจแแแแซแแแแ แฃแแ แแแแ แแแฌแแ แแ LIKE target_table INCLUDING INDEXES
.
แแฃ แแฅแแแแช แแญแแ แแแแแ DEFAULT
-แแแแจแแแแแแแแแ (แแแแแแแแแ, แซแแ แแแแแ แแแกแแฆแแแแก แแแแจแแแแแแแแแแก แจแแกแแแกแแแแ), แจแแแแซแแแแ แแแแแแงแแแแ LIKE target_table INCLUDING DEFAULTS
. แแ แฃแแ แแแแ - LIKE target_table INCLUDING ALL
- แแแแแแ แแแก แแแแฃแแแกแฎแแแแก, แแแแแฅแกแแแก, แจแแแฆแฃแแแแแก,...
แแแแ แแ แแฅ แแฅแแแ แฃแแแ แแแกแแแแแ, แ แแ แแฃ แจแแฅแแแแแ แแแแแ แขแแก แชแฎแ แแแ แแแฃแงแแแแแแแแ แแแแแฅแกแแแแ, แจแแแแแ แแแแแชแแแแแแก แฉแแขแแแ แแแแก แฃแคแ แ แแแขแ แแ แ แแแกแญแแ แแแแแแฃ แฏแแ แจแแแแกแแแ แงแแแแแคแแ แก แแ แแฎแแแแ แแแแก แจแแแแแ แแแแคแแ แแแแแแ แแแแแฅแกแแแก - แแแฎแแ, แ แแแแ แแแแแแแก แแแแก, แ แแแแ แช แแแแแแแแ
แแแแแแแ,
2. แ แแแแ แแแแฌแแ แแ?
แแแแ แแแแแชแแ แฃแแ แแแแ แแแฅแแ - แแแแแแงแแแแ แแแ
- แแแแแแ "แแแแแขแแก" แแแชแแแแ INSERT
,
3. แ แแแแ แแแแแแฃแจแแแแ?
แแแแแ, แฉแแแแ แจแแกแแแแแ แแกแ แแแแแแงแฃแ แแแแแแก:
- แแฅแแแ แแแฅแแ แชแฎแ แแแ แแแแแแขแแก แแแแแชแแแแแแ, แ แแแแแแช แแแแฎแแแ แแฅแแแแก แแแแแชแแแแ แแแแแจแ 1 แแแแแแแ แฉแแแแฌแแ แ
- แงแแแแแแฆแ แแแแแแขแ แแแแแแแแแ แแฎแแแก แกแ แฃแแ "แกแฃแ แแแ"
- แแแแแชแแแแแแแแแ แแฅแแแ แแชแแ, แ แแ แแ แแแแแ แ แแ แแฃแแแขแแก 10K แฉแแแแฌแแ แ แแชแแแแแ
แแกแแแ แกแแขแฃแแชแแแก แแแแกแแแฃแ แ แแแแแแแแแ
3.1. แกแ แฃแแ แกแแแฅแ แแแแแแชแแแก แแแแแ แแแแ
แกแแแแ แขแแแแกแแแแก, แแแฅแแแ, แ แแ แแฅแแแ แแ แช แแ แแญแแ แแแแแ แแแแแชแแแแแแก แ แแกแขแ แฃแฅแขแฃแ แแแแชแแ - แฃแแ แแแแ แแแแขแแแแ แชแฎแ แแแ แกแแกแฃแ แแแ แคแแ แแแจแ, แแก แแ แแก:
- แแแแแฆแ แงแแแแแคแแ แ แ แแช แแฆแแ แแ แกแแแแแก
- แแแแแฎแแแแ แงแแแแแคแแ แ, แ แแช แฃแแแ แแ แกแแแแแแ แแ แแแแแฎแแแแแก แกแแญแแ แแแแก
- แฉแแแแ แงแแแแแคแแ แ แ แแช แฏแแ แแ แแแแฎแแแ แ
แ แแขแแ แฃแแแ แแแแแแแแก แแแแ แแชแแแแ แแ แแแแแแแแแแ แแแแ? แ แแแแแ แแกแ แแแแแ แแแแ แแแแแแแก แแแแ แแแแแแแแฃแ แแ (
แฌแแจแแ dst
แแ แ, แ แ แแฅแแ แฃแแแ, แแฅแแแ แจแแแแซแแแแ แแแฃแแแแแแแแ แแฎแแแแ แแ แ แแแแ แแชแแแ:
- แแแแแฆแ (
DELETE
) แแแแแแแ แงแแแแแคแแ แ - แฉแแแแ แงแแแแแคแแ แ แแฎแแแ แกแฃแ แแแแแแ
แแแแ แแ แแแแแ แแ แแก, MVCC-แแก แฌแงแแแแแแ, แแแแแแแก แแแแ แแฃแกแขแแ แแ แฏแแ แแแแแ แแแแ! แชแฎแ แแแจแ แฉแแแแฌแแ แแแแก +1M แแแแแกแแฎแฃแแแแแก แแแฆแแแ 10K แแแแแฎแแแแแก แแแแ แซแแแแแ แแแแแแขแแ...
TRUNCATE แแกแข
แฃแคแ แ แแแแแชแแแแแ แแแแแแแแแ แแ แแชแแก, แ แแ แแแแแ แขแแแแแขแแก แแแฌแแแแแ แกแแแแแแ แแแคแแ แจแแแซแแแแ:
- แแแแแแแ (
TRUNCATE
) แแแแแ แแแแแแ - แฉแแแแ แงแแแแแคแแ แ แแฎแแแ แกแฃแ แแแแแแ
แแแแแแ แแคแแฅแขแฃแ แแ,
แฒ แแช แแแจแแแแก:
- แฉแแแ แแแฌแงแแแ แแ แซแแแแแแแแแ แแแ แแแแแ
TRUNCATE
แแฌแแกแแแก AccessExclusive- แแแแแแแแ- แฉแแแ แแแแแแแแ แฉแแกแแแก แแแแ แฎแแแก แแแแแแแแแแแจแ แแ แงแแแแ แแแแแ แฉแแแ แแ แแ แแก แแแ แช แแ
SELECT
แ แแฆแแช แแ แแแแแก แแแ แแแ...
แชแฎแ แแแแก แจแแชแแแโฆ แแแแแ แฅแแแแโฆ / แชแฎแ แแแแก แฉแแแแจแแโฆ
แแแขแแ แแแขแแแ แแ แแก แงแแแแแคแ แแก แจแแแกแแแ แชแแแแ แแฎแแ แชแฎแ แแแจแ แแ แจแแแแแ แฃแแ แแแแ แแแแแ แฅแแแแ แซแแแแแก แแแชแแแแ. แ แแแแแแแแ แกแแแแแฆแแ แ แแแขแแ แ แ แแ:
- แฏแแ แแแแแ AccessExclusive, แแฃแแชแ แแแแจแแแแแแแแแ แแแแแแแ แแ แ
- แงแแแแ แจแแแแแฎแแแก แแแแแ/แกแขแแขแแกแขแแแ แแ แชแฎแ แแแแกแแแแก แแแแแขแแแ แแฃแแแ,
แกแแญแแ แแ ANALYZE-แแก แแแจแแแแ - แงแแแแ แฃแชแฎแแฃแ แ แแแกแแฆแแแ แแแขแแฎแแแแ (FK) แแแแแแแกแแแ
แแงแ WIP แแแขแฉแ Simon Riggs-แแกแแแ, แ แแแแแแช แจแแกแแแแแแ แแแแแแแแแแก ALTER
-แแแแ แแชแแ แชแฎแ แแแแก แกแฎแแฃแแแก แจแแชแแแแกแแแแก แคแแแแแก แแแแแแ, แกแขแแขแแกแขแแแแกแ แแ FK แจแแฎแแแแก แแแ แแจแ, แแแแ แแ แแแแ แฃแแ แแ แจแแแ แแแแ.
แฌแแจแแ, แแแแแฎแแแแ, แฉแแกแแ
แแกแ แ แแ, แฉแแแ แแฌแงแแแขแ แกแแแ แแแแ แแชแแแก แแ แแแแแแแแแแก แแแ แแแแขแก. แแแแฅแแแก แกแแแ... แ แแแแ แแแแแแแแแ แแก แงแแแแแแ แแคแแฅแขแฃแ แแ?
-- ะฒัะต ะดะตะปะฐะตะผ ะฒ ัะฐะผะบะฐั
ััะฐะฝะทะฐะบัะธะธ, ััะพะฑั ะฝะธะบัะพ ะฝะต ะฒะธะดะตะป "ะฟัะพะผะตะถััะพัะฝัั
" ัะพััะพัะฝะธะน
BEGIN;
-- ัะพะทะดะฐะตะผ ะฒัะตะผะตะฝะฝัั ัะฐะฑะปะธัั ั ะธะผะฟะพััะธััะตะผัะผะธ ะดะฐะฝะฝัะผะธ
CREATE TEMPORARY TABLE tmp(
LIKE dst INCLUDING INDEXES -- ะฟะพ ะพะฑัะฐะทั ะธ ะฟะพะดะพะฑะธั, ะฒะผะตััะต ั ะธะฝะดะตะบัะฐะผะธ
) ON COMMIT DROP; -- ะทะฐ ัะฐะผะบะฐะผะธ ััะฐะฝะทะฐะบัะธะธ ะพะฝะฐ ะฝะฐะผ ะฝะต ะฝัะถะฝะฐ
-- ะฑััััะพ-ะฑััััะพ ะฒะปะธะฒะฐะตะผ ะฝะพะฒัะน ะพะฑัะฐะท ัะตัะตะท COPY
COPY tmp FROM STDIN;
-- ...
-- .
-- ัะดะฐะปัะตะผ ะพััััััะฒัััะธะต
DELETE FROM
dst D
USING
dst X
LEFT JOIN
tmp Y
USING(pk1, pk2) -- ะฟะพะปั ะฟะตัะฒะธัะฝะพะณะพ ะบะปััะฐ
WHERE
(D.pk1, D.pk2) = (X.pk1, X.pk2) AND
Y IS NOT DISTINCT FROM NULL; -- "ะฐะฝัะธะดะถะพะนะฝ"
-- ะพะฑะฝะพะฒะปัะตะผ ะพััะฐะฒัะธะตัั
UPDATE
dst D
SET
(f1, f2, f3) = (T.f1, T.f2, T.f3)
FROM
tmp T
WHERE
(D.pk1, D.pk2) = (T.pk1, T.pk2) AND
(D.f1, D.f2, D.f3) IS DISTINCT FROM (T.f1, T.f2, T.f3); -- ะฝะตะทะฐัะตะผ ะพะฑะฝะพะฒะปััั ัะพะฒะฟะฐะดะฐััะธะต
-- ะฒััะฐะฒะปัะตะผ ะพััััััะฒัััะธะต
INSERT INTO
dst
SELECT
T.*
FROM
tmp T
LEFT JOIN
dst D
USING(pk1, pk2)
WHERE
D IS NOT DISTINCT FROM NULL;
COMMIT;
3.2. แแแแแ แขแแก แจแแแแแแแ แแแแฃแจแแแแแ
แแแแแ KLADR-แจแ, แงแแแแ แจแแชแแแแแ แฉแแแแฌแแ แ แแแแแขแแแแ แฃแแแ แแแแฎแแ แชแแแแแแก แจแแแแแแแ แแแแฃแจแแแแแแก แแแแ - แแแ แแแแแแแแ, แกแแแแแแซแ แกแแขแงแแแแแก แฎแแแแแกแแ แแ แกแแญแแ แ แกแขแ แฃแฅแขแฃแ แแแแแแ แจแแแชแแ แแแ. แแแแ แแ แกแแแแแ แแชแ - แ แ แจแแแชแแแแ แแฃแกแขแแแกแแแฅแ แแแแแแชแแแก แแแแแก แแแ แแฃแแแแแก แแแ แแจแ, แแแแแแฃแ แจแแแแฎแแแแแจแ, แแแกแแ แกแแแ แแแ แจแแฎแแแแก แแแ แแจแ?
แแฃ แแฎแแแแ แแฅแแแแก แแ แแชแแกแก แแฅแแก แฉแแฌแแ แแก แฌแแแแแ แกแแแฅแ แแแแแแชแแแก แแ แแก, แแแจแแ แจแแแแซแแแแ แแแแแแงแแแแ แขแ แแแแ แ, แ แแแแแแช แจแแแแ แแแแแก แงแแแแ แชแแแแแแแแก แฉแแแแแแแก:
-- ัะตะปะตะฒัะต ัะฐะฑะปะธัั
CREATE TABLE kladr(...);
CREATE TABLE kladr_house(...);
-- ัะฐะฑะปะธัั ั ะธััะพัะธะตะน ะธะทะผะตะฝะตะฝะธะน
CREATE TABLE kladr$log(
ro kladr, -- ััั ะปะตะถะฐั ัะตะปัะต ะพะฑัะฐะทั ะทะฐะฟะธัะตะน ััะฐัะพะน/ะฝะพะฒะพะน
rn kladr
);
CREATE TABLE kladr_house$log(
ro kladr_house,
rn kladr_house
);
-- ะพะฑัะฐั ััะฝะบัะธั ะปะพะณะธัะพะฒะฐะฝะธั ะธะทะผะตะฝะตะฝะธะน
CREATE OR REPLACE FUNCTION diff$log() RETURNS trigger AS $$
DECLARE
dst varchar = TG_TABLE_NAME || '$log';
stmt text = '';
BEGIN
-- ะฟัะพะฒะตััะตะผ ะฝะตะพะฑั
ะพะดะธะผะพััั ะปะพะณะณะธัะพะฒะฐะฝะธั ะฟัะธ ะพะฑะฝะพะฒะปะตะฝะธะธ ะทะฐะฟะธัะธ
IF TG_OP = 'UPDATE' THEN
IF NEW IS NOT DISTINCT FROM OLD THEN
RETURN NEW;
END IF;
END IF;
-- ัะพะทะดะฐะตะผ ะทะฐะฟะธัั ะปะพะณะฐ
stmt = 'INSERT INTO ' || dst::text || '(ro,rn)VALUES(';
CASE TG_OP
WHEN 'INSERT' THEN
EXECUTE stmt || 'NULL,$1)' USING NEW;
WHEN 'UPDATE' THEN
EXECUTE stmt || '$1,$2)' USING OLD, NEW;
WHEN 'DELETE' THEN
EXECUTE stmt || '$1,NULL)' USING OLD;
END CASE;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
แแฎแแ แฉแแแ แจแแแแแซแแแ แแแแแแแงแแแแ แขแ แแแแ แแแ แกแแแฅแ แแแแแแชแแแก แแแฌแงแแแแแแ (แแ แฉแแแ แแแ แแกแแแ ALTER TABLE ... ENABLE TRIGGER ...
):
CREATE TRIGGER log
AFTER INSERT OR UPDATE OR DELETE
ON kladr
FOR EACH ROW
EXECUTE PROCEDURE diff$log();
CREATE TRIGGER log
AFTER INSERT OR UPDATE OR DELETE
ON kladr_house
FOR EACH ROW
EXECUTE PROCEDURE diff$log();
แจแแแแแ แฉแแแ แแจแแแแแ แแแแแแฆแแแ แงแแแแ แกแแญแแ แ แชแแแแแแแแก แแฃแ แแแแแก แชแฎแ แแแแแแแแ แแ แแแขแแ แแแ แแแ แแแแแขแแแแแ แแแแแฃแจแแแแแแแแแก แแแจแแแแแแ.
3.3. แแแแแแจแแ แแแฃแแ แแแแแแแฅแขแแแแก แแแแแ แขแ
แแแแแ แแแแแแฎแแแแ แจแแแแฎแแแแแแ, แ แแแแกแแช แฌแงแแ แแกแ แแ แแแแแจแแฃแแแแแก แแแแแชแแแแ แกแขแ แฃแฅแขแฃแ แแแ แแ แแแแแ แแ. แแแแ แแ แ แ แแแฎแแแแ, แแฃ แแแ แ แกแแกแขแแแแแแ แแขแแแ แแแแก แแฅแแก แฉแแแแ แแแแแชแแแแ แแแแแก แจแแแแฎแแแก แกแขแ แฃแฅแขแฃแ แแกแแแ แแแแกแฎแแแแแแฃแแ แคแแ แแแขแ?
แแแแฆแแ, แ แแแแ แช แแแแแแแแ แแแแแแขแแแแกแ แแ แแแแ แแแแแ แแจแแแแก แจแแแแฎแแ, แแแแกแแแฃแ แ โแแแแ แ แแ แแจแโ แแแ แแแแขแ:
CREATE TABLE client(
client_id
serial
PRIMARY KEY
, inn
varchar
UNIQUE
, name
varchar
);
CREATE TABLE invoice(
invoice_id
serial
PRIMARY KEY
, client_id
integer
REFERENCES client(client_id)
, number
varchar
, dt
date
, sum
numeric(32,2)
);
แแแแ แแ แฉแแแแขแแแ แแแ แแแ แ แฌแงแแ แแแแ แแแแแก แฉแแแแแแ "แงแแแแ แแ แแจแ" แกแแฎแแ:
CREATE TEMPORARY TABLE invoice_import(
client_inn
varchar
, client_name
varchar
, invoice_number
varchar
, invoice_dt
date
, invoice_sum
numeric(32,2)
);
แชแฎแแแแ, แแแแฎแแแ แแแแแก แแแแแชแแแแแแก แแฃแแแแ แแแ แจแแกแแซแแแแแแแ แแ แแแ แกแแแจแ แแ แแแแแแ แ แฉแแแแฌแแ แ แแ แแก โแแแแแ แแจแโ:
0123456789;ะะฐัั;A-01;2020-03-16;1000.00
9876543210;ะะตัั;A-02;2020-03-16;666.00
0123456789;ะะฐัั;B-03;2020-03-16;9999.00
แแแแแแแกแแแแก, แฉแแแ แฃแแ แแแแ แฉแแแกแแแแ แฉแแแแก แขแแกแขแแก แแแแแชแแแแแก, แแแแ แแ แแแฎแกแแแแแ - COPY
แฃแคแ แ แแคแแฅแขแฃแ แ!
INSERT INTO invoice_import
VALUES
('0123456789', 'ะะฐัั', 'A-01', '2020-03-16', 1000.00)
, ('9876543210', 'ะะตัั', 'A-02', '2020-03-16', 666.00)
, ('0123456789', 'ะะฐัั', 'B-03', '2020-03-16', 9999.00);
แแแ แแแ แ แแแจแ, แฎแแแแแกแแแ แแฆแแแแจแแแ แแก โแแแญแ แโ, แ แแแแแกแแช แฉแแแแ โแคแแฅแขแแแโ แแฎแแแ. แฉแแแแก แจแแแแฎแแแแแจแ, แแแแแแกแแแ แแฎแแแ แแแแฎแแแ แแแแแก:
CREATE TEMPORARY TABLE client_import AS
SELECT DISTINCT ON(client_inn)
-- ะผะพะถะฝะพ ะฟัะพััะพ SELECT DISTINCT, ะตัะปะธ ะดะฐะฝะฝัะต ะทะฐะฒะตะดะพะผะพ ะฝะตะฟัะพัะธะฒะพัะตัะธะฒั
client_inn inn
, client_name "name"
FROM
invoice_import;
แแแแกแแแแแก, แ แแ แแแแแ แแจแแแ แกแฌแแ แแ แแแแแแแแจแแ แแ แแแแแแขแแแแก ID-แแแแแ, แฉแแแ แฏแแ แฃแแแ แแแแแ แแแแแ แแ แแแแแ แแ แแแ แแก แแแแแขแแคแแแแขแแ แแแ. แแแแแ แแแแแแแขแแ แแแแแแ แแแ แฅแแแจ:
ALTER TABLE invoice_import ADD COLUMN client_id integer;
ALTER TABLE client_import ADD COLUMN client_id integer;
แแแแแ แแแแแแแงแแแแ แแแแแ แแฆแฌแแ แแแ แชแฎแ แแแแก แกแแแฅแ แแแแแแชแแแก แแแแแแ แแชแแ แ แจแแกแฌแแ แแแแ - แฉแแแ แแ แแแแแแแฎแแแแ แแ แแ แฌแแจแแแ แแ แแคแแ แก แกแแแแแแ แชแฎแ แแแจแ, แ แแแแแ แฉแแแ แแแแแแขแแแก แแแแแ แขแแ แแแ "แแฎแแแแ แแแแแขแแแแ":
-- ะฟัะพััะฐะฒะปัะตะผ ะฒ ัะฐะฑะปะธัะต ะธะผะฟะพััะฐ ID ัะถะต ัััะตััะฒัััะธั
ะทะฐะฟะธัะตะน
UPDATE
client_import T
SET
client_id = D.client_id
FROM
client D
WHERE
T.inn = D.inn; -- unique key
-- ะฒััะฐะฒะปัะตะผ ะพััััััะฒะพะฒะฐะฒัะธะต ะทะฐะฟะธัะธ ะธ ะฟัะพััะฐะฒะปัะตะผ ะธั
ID
WITH ins AS (
INSERT INTO client(
inn
, name
)
SELECT
inn
, name
FROM
client_import
WHERE
client_id IS NULL -- ะตัะปะธ ID ะฝะต ะฟัะพััะฐะฒะธะปัั
RETURNING *
)
UPDATE
client_import T
SET
client_id = D.client_id
FROM
ins D
WHERE
T.inn = D.inn; -- unique key
-- ะฟัะพััะฐะฒะปัะตะผ ID ะบะปะธะตะฝัะพะฒ ั ะทะฐะฟะธัะตะน ััะตัะพะฒ
UPDATE
invoice_import T
SET
client_id = D.client_id
FROM
client_import D
WHERE
T.client_inn = D.inn; -- ะฟัะธะบะปะฐะดะฝะพะน ะบะปัั
แคแแฅแขแแแ แแแแ, แงแแแแแคแแ แ แจแแแแแแก invoice_import
แแฎแแ แฉแแแ แจแแแกแแแฃแแ แแแแฅแแก แกแแแแแขแแฅแขแ แแแแ client_id
, แ แแแแแแแช แฉแแแกแแแแ แแแแแแกแก.
แฌแงแแ แ: www.habr.com