แƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒ˜ แƒฌแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒแƒœ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜ แƒ›แƒแƒ’แƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜ PostgreSQL10-แƒจแƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒ’แƒแƒชแƒœแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

แƒฌแƒ˜แƒœแƒแƒกแƒ˜แƒขแƒงแƒ•แƒแƒแƒ‘แƒ แƒแƒœ แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒฉแƒœแƒ“แƒ แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒ“แƒ”แƒ

แƒแƒ›แƒ‘แƒแƒ•แƒ˜ แƒแƒฅ แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ: แƒ’แƒแƒฎแƒกแƒแƒ•แƒ— แƒ แƒแƒ’แƒแƒ  แƒ“แƒแƒ˜แƒฌแƒงแƒ แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜. แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒ“แƒ แƒ˜แƒกแƒ”แƒ• แƒ˜แƒงแƒ. แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ˜แƒ› แƒ“แƒ แƒแƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ˜ แƒแƒ›แƒแƒ˜แƒฌแƒฃแƒ แƒ, แƒ’แƒแƒฉแƒœแƒ“แƒ แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ - แƒ แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’? แƒแƒกแƒ” แƒ’แƒแƒฉแƒœแƒ“แƒ แƒ“แƒแƒงแƒแƒคแƒ˜แƒก แƒ˜แƒ“แƒ”แƒ.

แƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒ˜ แƒฌแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒแƒœ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜ แƒ›แƒแƒ’แƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜ PostgreSQL10-แƒจแƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒ’แƒแƒชแƒœแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

แƒšแƒ˜แƒ แƒ˜แƒ™แƒฃแƒšแƒ˜ แƒ’แƒแƒ“แƒแƒฎแƒ แƒ:
แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ˜แƒ› แƒ›แƒแƒ›แƒ”แƒœแƒขแƒจแƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ แƒแƒ’แƒแƒ แƒช แƒ’แƒแƒ˜แƒ แƒ™แƒ•แƒ, แƒ˜แƒงแƒ แƒ’แƒแƒ›แƒแƒฃแƒงแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ”แƒ‘แƒ˜. แƒ’แƒ›แƒแƒ“แƒšแƒแƒ‘แƒ— แƒแƒกแƒ›แƒ› แƒ“แƒ แƒฐแƒแƒ‘แƒ แƒฃ!

แƒ›แƒแƒจ, แƒกแƒฎแƒ•แƒแƒ’แƒ•แƒแƒ แƒแƒ“ แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒแƒฎแƒแƒ แƒแƒ— แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ“แƒ แƒแƒ›แƒแƒ•แƒ“แƒ แƒแƒฃแƒšแƒแƒ“ แƒ’แƒแƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒแƒ— แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒฃแƒœแƒแƒ แƒ”แƒ‘แƒ˜?

แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒแƒ“ แƒ’แƒแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ“แƒ”แƒก, แƒ›แƒแƒจแƒ˜แƒœ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ แƒ˜ แƒ’แƒ–แƒ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒ แƒแƒ“แƒ˜แƒ™แƒแƒšแƒฃแƒ แƒแƒ“ แƒ’แƒแƒกแƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒšแƒแƒ“:
1) แƒ•แƒ แƒชแƒ”แƒšแƒ˜ แƒ’แƒ–แƒ - แƒ•แƒ–แƒ แƒ“แƒ˜แƒ— แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒก, แƒ•แƒชแƒ•แƒšแƒ˜แƒ— แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒแƒก;
2) แƒ˜แƒœแƒขแƒ”แƒœแƒกแƒ˜แƒฃแƒ แƒ˜ แƒ’แƒ–แƒ - แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒ

แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒ แƒแƒ›, แƒ•แƒ˜แƒ›แƒ”แƒแƒ แƒ”แƒ‘, แƒ˜แƒ› แƒ“แƒ แƒแƒก แƒฃแƒ™แƒ•แƒ” แƒ’แƒแƒฃแƒ แƒ™แƒ•แƒ”แƒ•แƒ”แƒšแƒ˜ แƒ˜แƒงแƒ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ แƒ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒšแƒ˜แƒงแƒ แƒ“แƒแƒฉแƒฅแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒจแƒ˜, แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒก แƒ’แƒ–แƒ - แƒ›แƒแƒ’แƒ˜แƒ“แƒ˜แƒก แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ˜แƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜.

แƒแƒกแƒ” แƒ แƒแƒ›, แƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ: แƒ แƒแƒก แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒ•แƒชแƒ•แƒšแƒ˜แƒ—?

แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜

แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜, แƒแƒ แƒ˜แƒก แƒ”แƒก ERD (แƒœแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒ แƒžแƒ˜แƒ แƒแƒ‘แƒ˜แƒ—แƒแƒ“ แƒ’แƒแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒ–แƒ˜แƒ—):
แƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒ˜ แƒฌแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒแƒœ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜ แƒ›แƒแƒ’แƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜ PostgreSQL10-แƒจแƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒ’แƒแƒชแƒœแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘
แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜:

  1. แƒ‘แƒ”แƒ•แƒ แƒ˜-แƒ›แƒ แƒแƒ•แƒแƒš แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ
  2. แƒชแƒฎแƒ แƒ˜แƒšแƒก แƒฃแƒ™แƒ•แƒ” แƒแƒฅแƒ•แƒก แƒžแƒแƒขแƒ”แƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜

แƒแƒ แƒ˜แƒ’แƒ˜แƒœแƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ:

SELECT
            p."PARAMETER_ID" as  parameter_id,
            pc."PC_NAME" AS pc_name,
            pc."CUSTOMER_PARTNUMBER" AS customer_partnumber,
            w."LASERMARK" AS lasermark,
            w."LOTID" AS lotid,
            w."REPORTED_VALUE" AS reported_value,
            w."LOWER_SPEC_LIMIT" AS lower_spec_limit,
            w."UPPER_SPEC_LIMIT" AS upper_spec_limit,
            p."TYPE_CALCUL" AS type_calcul,
            s."SHIPMENT_NAME" AS shipment_name,
            s."SHIPMENT_DATE" AS shipment_date,
            extract(year from s."SHIPMENT_DATE") AS year,
            extract(month from s."SHIPMENT_DATE") as month,
            s."REPORT_NAME" AS report_name,
            p."SPARAM_NAME" AS SPARAM_name,
            p."CUSTOMERPARAM_NAME" AS customerparam_name
        FROM data w INNER JOIN shipment s ON s."SHIPMENT_ID" = w."SHIPMENT_ID"
             INNER JOIN parameters p ON p."PARAMETER_ID" = w."PARAMETER_ID"
             INNER JOIN shipment_pc sp ON s."SHIPMENT_ID" = sp."SHIPMENT_ID"
             INNER JOIN pc pc ON pc."PC_ID" = sp."PC_ID"
             INNER JOIN ( SELECT w2."LASERMARK" , MAX(s2."SHIPMENT_DATE") AS "SHIPMENT_DATE"
                          FROM shipment s2 INNER JOIN data w2 ON s2."SHIPMENT_ID" = w2."SHIPMENT_ID" 
                          GROUP BY w2."LASERMARK"
                         ) md ON md."SHIPMENT_DATE" = s."SHIPMENT_DATE" AND md."LASERMARK" = w."LASERMARK"
        WHERE 
             s."SHIPMENT_DATE" >= '2018-07-01' AND s."SHIPMENT_DATE" <= '2018-09-30' ;

แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜ แƒขแƒ”แƒกแƒขแƒ˜แƒก แƒ‘แƒแƒ–แƒแƒ–แƒ”:
แƒฆแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ : 502 997.55
แฒแƒฆแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ: 505 แƒฌแƒแƒ›แƒ˜

แƒ แƒแƒก แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ—? แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ, แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ แƒแƒ˜แƒก แƒ›แƒแƒœแƒแƒ™แƒ•แƒ”แƒ—แƒ–แƒ”.
แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒแƒ— แƒฃแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒกแƒ˜ แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ“แƒแƒจแƒ•แƒ”แƒ‘แƒ: แƒ—แƒฃ แƒแƒ แƒ˜แƒก แƒ“แƒ แƒแƒ˜แƒก แƒ›แƒแƒœแƒแƒ™แƒ•แƒ”แƒ—แƒ˜แƒก แƒœแƒ˜แƒ›แƒฃแƒจแƒ˜, แƒ“แƒแƒ’แƒ•แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ? แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ - แƒ“แƒแƒงแƒแƒคแƒ.

แƒ แƒ แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ?

แƒ”แƒ แƒ—แƒ˜ แƒจแƒ”แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—, แƒแƒ แƒฉแƒ”แƒ•แƒแƒœแƒ˜ แƒแƒจแƒ™แƒแƒ แƒแƒ - "แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก" แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒ“แƒ”แƒ™แƒšแƒแƒ แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒ“แƒแƒงแƒแƒคแƒ "SHIPMENT_DATE" แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— (แƒซแƒแƒšแƒ˜แƒแƒœ แƒจแƒแƒ แƒก แƒฌแƒ˜แƒœ แƒฎแƒขแƒฃแƒœแƒ•แƒ - แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“ แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒแƒจแƒ˜ แƒชแƒแƒขแƒ แƒแƒ แƒแƒกแƒฌแƒแƒ แƒ˜ แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ).

แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ•แƒแƒœแƒแƒฌแƒ˜แƒšแƒแƒ—?

แƒ”แƒก แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒแƒกแƒ”แƒ•แƒ” แƒแƒ  แƒแƒ แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ แƒ—แƒฃแƒšแƒ˜. แƒกแƒแƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒแƒ“, PostgreSQL 10-แƒจแƒ˜ แƒแƒฎแƒšแƒ แƒแƒ แƒ˜แƒก แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ˜แƒก แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ˜.
แƒแƒกแƒ” แƒ แƒแƒ›:

  1. แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒ”แƒ— แƒฌแƒงแƒแƒ แƒแƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒœแƒแƒ’แƒแƒ•แƒกแƒแƒงแƒ แƒ”แƒšแƒ˜ - pg_dump source_table
  2. แƒฌแƒแƒจแƒแƒšแƒ” แƒแƒ แƒ˜แƒ’แƒ˜แƒœแƒแƒšแƒฃแƒ แƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ - แƒฉแƒแƒ›แƒแƒแƒ’แƒ“แƒ”แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ source_table
  3. แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒ›แƒจแƒแƒ‘แƒ”แƒšแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒ“แƒ˜แƒแƒžแƒแƒ–แƒแƒœแƒ˜แƒก แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒ— - แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ source_table
  4. แƒกแƒ”แƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ - แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ source_table, แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜
  5. 1-แƒ”แƒš แƒกแƒแƒคแƒ”แƒฎแƒฃแƒ แƒ–แƒ” แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜ แƒœแƒแƒ’แƒแƒ•แƒกแƒแƒงแƒ แƒ”แƒšแƒ˜แƒก แƒ˜แƒ›แƒžแƒแƒ แƒขแƒ˜ - pg_restore

แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒ“แƒแƒงแƒแƒคแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก

แƒกแƒ˜แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒฃแƒšแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ˜ 2,3,4 แƒ’แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ“แƒ แƒ”แƒ แƒ— แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒจแƒ˜.

แƒแƒกแƒ” แƒ แƒแƒ›:
แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒ”แƒ— แƒฌแƒงแƒแƒ แƒแƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒœแƒแƒ’แƒแƒ•แƒกแƒแƒงแƒ แƒ”แƒšแƒ˜

pg_dump postgres --file=/dump/shipment.dmp --format=c --table=shipment --verbose > /dump/shipment.log 2>&1

แƒฌแƒแƒจแƒแƒšแƒ”แƒ— แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ + แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒ›แƒจแƒแƒ‘แƒ”แƒšแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒ“แƒ˜แƒแƒžแƒแƒ–แƒแƒœแƒ˜แƒก แƒ“แƒแƒงแƒแƒคแƒ˜แƒ— + แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ

--create_partition_shipment.sql
do language plpgsql $$
declare 
rec_shipment_date RECORD ;
partition_name varchar;
index_name varchar;
current_year varchar ;
current_month varchar ;
begin_year varchar ;
begin_month varchar ;
next_year varchar ;
next_month varchar ;
first_flag boolean ;
i integer ;
begin
  RAISE NOTICE 'CREATE TEMPORARY TABLE FOR SHIPMENT_DATE';
  CREATE TEMP TABLE tmp_shipment_date as select distinct "SHIPMENT_DATE" from shipment order by "SHIPMENT_DATE" ;

  RAISE NOTICE 'DROP TABLE shipment';
  drop table shipment cascade ;
  
  CREATE TABLE public.shipment
  (
    "SHIPMENT_ID" integer NOT NULL DEFAULT nextval('shipment_shipment_id_seq'::regclass),
    "SHIPMENT_NAME" character varying(30) COLLATE pg_catalog."default",
    "SHIPMENT_DATE" timestamp without time zone,
    "REPORT_NAME" character varying(40) COLLATE pg_catalog."default"
  )
  PARTITION BY RANGE ("SHIPMENT_DATE")
  WITH (
      OIDS = FALSE
  )
  TABLESPACE pg_default;

  RAISE NOTICE 'CREATE PARTITIONS FOR TABLE shipment';

  current_year:='0';
  current_month:='0';

  begin_year := '0' ;
  begin_month := '0'  ;
  next_year := '0' ;
  next_month := '0'  ;

  FOR rec_shipment_date IN SELECT * FROM tmp_shipment_date LOOP
      
      RAISE NOTICE 'SHIPMENT_DATE=%',rec_shipment_date."SHIPMENT_DATE";
      
      current_year := date_part('year' ,rec_shipment_date."SHIPMENT_DATE");
      current_month := date_part('month' ,rec_shipment_date."SHIPMENT_DATE") ; 

      IF to_number(current_month,'99') < 10 THEN
        current_month := '0'||current_month ; 
      END IF ;

      --Init borders
      IF   begin_year = '0' THEN
       first_flag := true ; --first time flag
       begin_year := current_year ;
       begin_month := current_month ;   
   
        IF current_month = '12' THEN
          next_year := date_part('year' ,rec_shipment_date."SHIPMENT_DATE" + interval '1 year') ;
        ELSE
          next_year := current_year ;
        END IF;
     
       next_month := date_part('month' ,rec_shipment_date."SHIPMENT_DATE" + interval '1 month') ;

      END IF;

      -- Check current date into borders NOT for First time
      IF to_date( current_year||'.'||current_month, 'YYYY.MM') >= to_date( begin_year||'.'||begin_month, 'YYYY.MM') AND 
         to_date( current_year||'.'||current_month, 'YYYY.MM') < to_date( next_year||'.'||next_month, 'YYYY.MM') AND 
         NOT first_flag 
      THEN
         CONTINUE ; 
      ELSE
       --NEW borders only for second and after time 
       begin_year := current_year ;
       begin_month := current_month ;   
   
        IF current_month = '12' THEN
          next_year := date_part('year' ,rec_shipment_date."SHIPMENT_DATE" + interval '1 year') ;
        ELSE
          next_year := current_year ;
        END IF;
     
       next_month := date_part('month' ,rec_shipment_date."SHIPMENT_DATE" + interval '1 month') ;

      END IF;      

      partition_name := 'shipment_shipment_date_'||begin_year||'-'||begin_month||'-01-'|| next_year||'-'||next_month||'-01'  ;
 
     EXECUTE format('CREATE TABLE ' || quote_ident(partition_name) || ' PARTITION OF shipment FOR VALUES FROM ( %L ) TO ( %L )  ' , current_year||'-'||current_month||'-01' , next_year||'-'||next_month||'-01'  ) ; 

      index_name := partition_name||'_shipment_id_idx';
      RAISE NOTICE 'INDEX NAME =%',index_name;
      EXECUTE format('CREATE INDEX ' || quote_ident(index_name) || ' ON '|| quote_ident(partition_name) ||' USING btree ("SHIPMENT_ID") TABLESPACE pg_default ' ) ; 

      --Drop first time flag
      first_flag := false ;
   
  END LOOP;

end
$$;

แƒœแƒแƒ’แƒแƒ•แƒกแƒแƒงแƒ แƒ”แƒšแƒ˜แƒก แƒ˜แƒ›แƒžแƒแƒ แƒขแƒ˜

pg_restore -d postgres --data-only --format=c --table=shipment --verbose  shipment.dmp > /tmp/data_dump/shipment_restore.log 2>&1

แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ

แƒ แƒ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“? แƒแƒฆแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒ”แƒ’แƒ›แƒ˜แƒก แƒกแƒ แƒฃแƒšแƒ˜ แƒขแƒ”แƒฅแƒกแƒขแƒ˜ แƒ“แƒ˜แƒ“แƒ˜ แƒ“แƒ แƒ›แƒแƒกแƒแƒฌแƒงแƒ”แƒœแƒ˜แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒกแƒแƒ•แƒกแƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ, แƒ แƒแƒ› แƒจแƒ”แƒ›แƒแƒ˜แƒคแƒแƒ แƒ’แƒšแƒแƒ— แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒ‘แƒ˜แƒ—.

แƒ”แƒก แƒ˜แƒงแƒ

แƒคแƒแƒกแƒ˜: 502 997.55
แฒแƒฆแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ: 505 แƒฌแƒแƒ›แƒจแƒ˜.

แƒ˜แƒก แƒ’แƒแƒฎแƒ“แƒ

แƒคแƒแƒกแƒ˜: 77 872.36
แฒแƒฆแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ: 79 แƒฌแƒแƒ›แƒจแƒ˜.

แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ™แƒแƒ แƒ’แƒ˜ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒ. แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฆแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ แƒ“แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ. แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ˜แƒซแƒšแƒ”แƒ•แƒ แƒ›แƒแƒกแƒแƒšแƒแƒ“แƒœแƒ”แƒš แƒ”แƒคแƒ”แƒฅแƒขแƒก แƒ“แƒ, แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒกแƒ˜แƒฃแƒ แƒžแƒ แƒ˜แƒ–แƒ”แƒ‘แƒก แƒแƒ  แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก.

แƒ’แƒแƒแƒฎแƒแƒ แƒ”แƒ— แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜

แƒขแƒ”แƒกแƒขแƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ“แƒแƒ”แƒชแƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒ’แƒแƒœแƒกแƒแƒฎแƒ˜แƒšแƒ•แƒ”แƒšแƒแƒ“. แƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒœแƒฎแƒ˜แƒšแƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ›แƒแƒ— แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒฌแƒ˜แƒšแƒแƒ“ แƒ›แƒแƒฃแƒšแƒแƒ“แƒœแƒ”แƒšแƒ˜ แƒ’แƒแƒœแƒแƒฉแƒ”แƒœแƒ˜: โ€แƒจแƒ”แƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜แƒ, แƒ“แƒแƒงแƒแƒ•แƒ˜แƒ— โ€แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒกโ€ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜โ€.

แƒ“แƒ˜แƒแƒฎ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒกแƒ แƒฃแƒšแƒ˜แƒแƒ“ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ "แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก" แƒชแƒฎแƒ แƒ˜แƒšแƒ˜; "แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ" แƒชแƒฎแƒ แƒ˜แƒšแƒจแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ•แƒ”แƒšแƒ˜ "SHIPMENT_DATE".

แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒแƒ  แƒแƒ แƒ˜แƒก, แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ—, แƒจแƒ”แƒชแƒ•แƒแƒšแƒ”แƒ—. แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ™แƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ˜ แƒ˜แƒงแƒแƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒ—, แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒก แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒแƒ  แƒแƒฅแƒ•แƒก.

แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก "แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก" แƒ“แƒแƒงแƒแƒคแƒ

แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ”แƒ”แƒ‘แƒ˜ แƒแƒ  แƒฌแƒแƒ แƒ›แƒแƒ˜แƒจแƒ•แƒ. แƒ—แƒฃแƒ›แƒชแƒ, แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒฌแƒ˜แƒšแƒแƒ“ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒ.

"SHIPMENT_DATA" แƒกแƒ•แƒ”แƒขแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ "แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ" แƒชแƒฎแƒ แƒ˜แƒšแƒจแƒ˜

psql -h ั…ะพัั‚ -U ะฑะฐะทะฐ -d ัŽะทะตั€
=> ALTER TABLE data ADD COLUMN "SHIPMENT_DATE" timestamp without time zone ;

แƒจแƒ”แƒแƒ•แƒกแƒ”แƒ— "SHIPMENT_DATA" แƒกแƒ•แƒ”แƒขแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ "แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก" แƒชแƒฎแƒ แƒ˜แƒšแƒจแƒ˜ แƒ˜แƒ›แƒแƒ•แƒ” แƒกแƒแƒฎแƒ”แƒšแƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒกแƒ•แƒ”แƒขแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒ— "แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก" แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒ“แƒแƒœ.

-----------------------------
--update_data.sql
--updating for altered table "data" to values of "shipment_data" from the table "shipment"
--version 1.0
do language plpgsql $$
declare 
rec_shipment_data RECORD ;
shipment_date timestamp without time zone ; 
row_count integer ;
total_rows integer ;
begin

  select count(*) into total_rows from shipment ; 
  RAISE NOTICE 'Total %',total_rows;
  row_count:= 0 ;

  FOR rec_shipment_data IN SELECT * FROM shipment LOOP

   update data set "SHIPMENT_DATE" = rec_shipment_data."SHIPMENT_DATE" where "SHIPMENT_ID" = rec_shipment_data."SHIPMENT_ID";
   
   row_count:=  row_count +1 ;
   RAISE NOTICE 'row count = % , from %',row_count,total_rows;
  END LOOP;

end
$$;

แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒ”แƒ— "แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก" แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒœแƒแƒ’แƒแƒ•แƒกแƒแƒงแƒ แƒ”แƒšแƒ˜

pg_dump postgres --file=/dump/data.dmp --format=c --table=data --verbose > /dump/data.log 2>&1</source

แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒ“แƒแƒงแƒแƒคแƒ˜แƒšแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ "แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜"

--create_partition_data.sql
--create partitions for the table "wafer data" by range column "shipment_data" with one month duration
--version 1.0
do language plpgsql $$
declare 
rec_shipment_date RECORD ;
partition_name varchar;
index_name varchar;
current_year varchar ;
current_month varchar ;
begin_year varchar ;
begin_month varchar ;
next_year varchar ;
next_month varchar ;
first_flag boolean ;
i integer ;

begin

  RAISE NOTICE 'CREATE TEMPORARY TABLE FOR SHIPMENT_DATE';
  CREATE TEMP TABLE tmp_shipment_date as select distinct "SHIPMENT_DATE" from shipment order by "SHIPMENT_DATE" ;


  RAISE NOTICE 'DROP TABLE data';
  drop table data cascade ;


  RAISE NOTICE 'CREATE PARTITIONED TABLE data';
  
  CREATE TABLE public.data
  (
    "RUN_ID" integer,
    "LASERMARK" character varying(20) COLLATE pg_catalog."default" NOT NULL,
    "LOTID" character varying(80) COLLATE pg_catalog."default",
    "SHIPMENT_ID" integer NOT NULL,
    "PARAMETER_ID" integer NOT NULL,
    "INTERNAL_VALUE" character varying(75) COLLATE pg_catalog."default",
    "REPORTED_VALUE" character varying(75) COLLATE pg_catalog."default",
    "LOWER_SPEC_LIMIT" numeric,
    "UPPER_SPEC_LIMIT" numeric , 
    "SHIPMENT_DATE" timestamp without time zone
  )
  PARTITION BY RANGE ("SHIPMENT_DATE")
  WITH (
    OIDS = FALSE
  )
  TABLESPACE pg_default ;


  RAISE NOTICE 'CREATE PARTITIONS FOR TABLE data';

  current_year:='0';
  current_month:='0';

  begin_year := '0' ;
  begin_month := '0'  ;
  next_year := '0' ;
  next_month := '0'  ;
  i := 1;

  FOR rec_shipment_date IN SELECT * FROM tmp_shipment_date LOOP
      
      RAISE NOTICE 'SHIPMENT_DATE=%',rec_shipment_date."SHIPMENT_DATE";
      
      current_year := date_part('year' ,rec_shipment_date."SHIPMENT_DATE");
      current_month := date_part('month' ,rec_shipment_date."SHIPMENT_DATE") ; 

      --Init borders
      IF   begin_year = '0' THEN
       RAISE NOTICE '***Init borders';
       first_flag := true ; --first time flag
       begin_year := current_year ;
       begin_month := current_month ;   
   
        IF current_month = '12' THEN
          next_year := date_part('year' ,rec_shipment_date."SHIPMENT_DATE" + interval '1 year') ;
        ELSE
          next_year := current_year ;
        END IF;
     
       next_month := date_part('month' ,rec_shipment_date."SHIPMENT_DATE" + interval '1 month') ;

      END IF;

--      RAISE NOTICE 'current_year=% , current_month=% ',current_year,current_month;
--      RAISE NOTICE 'begin_year=% , begin_month=% ',begin_year,begin_month;
--      RAISE NOTICE 'next_year=% , next_month=% ',next_year,next_month;

      -- Check current date into borders NOT for First time

      RAISE NOTICE 'Current data = %',to_char( to_date( current_year||'.'||current_month, 'YYYY.MM'), 'YYYY.MM');
      RAISE NOTICE 'Begin data = %',to_char( to_date( begin_year||'.'||begin_month, 'YYYY.MM'), 'YYYY.MM');
      RAISE NOTICE 'Next data = %',to_char( to_date( next_year||'.'||next_month, 'YYYY.MM'), 'YYYY.MM');

      IF to_date( current_year||'.'||current_month, 'YYYY.MM') >= to_date( begin_year||'.'||begin_month, 'YYYY.MM') AND 
         to_date( current_year||'.'||current_month, 'YYYY.MM') < to_date( next_year||'.'||next_month, 'YYYY.MM') AND 
         NOT first_flag 
      THEN
         RAISE NOTICE '***CONTINUE';
         CONTINUE ; 
      ELSE
       --NEW borders only for second and after time 
       RAISE NOTICE '***NEW BORDERS';
       begin_year := current_year ;
       begin_month := current_month ;   
   
        IF current_month = '12' THEN
          next_year := date_part('year' ,rec_shipment_date."SHIPMENT_DATE" + interval '1 year') ;
        ELSE
          next_year := current_year ;
        END IF;
     
       next_month := date_part('month' ,rec_shipment_date."SHIPMENT_DATE" + interval '1 month') ;


      END IF;      

      IF to_number(current_month,'99') < 10 THEN
        current_month := '0'||current_month ; 
      END IF ;

      IF to_number(begin_month,'99') < 10 THEN
        begin_month := '0'||begin_month ; 
      END IF ;

      IF to_number(next_month,'99') < 10 THEN
        next_month := '0'||next_month ; 
      END IF ;

      RAISE NOTICE 'current_year=% , current_month=% ',current_year,current_month;
      RAISE NOTICE 'begin_year=% , begin_month=% ',begin_year,begin_month;
      RAISE NOTICE 'next_year=% , next_month=% ',next_year,next_month;

      partition_name := 'data_'||begin_year||begin_month||'01_'||next_year||next_month||'01'  ;

      RAISE NOTICE 'PARTITION NUMBER % , TABLE NAME =%',i , partition_name;
      
      EXECUTE format('CREATE TABLE ' || quote_ident(partition_name) || ' PARTITION OF data FOR VALUES FROM ( %L ) TO ( %L )  ' , begin_year||'-'||begin_month||'-01' , next_year||'-'||next_month||'-01'  ) ; 

      index_name := partition_name||'_shipment_id_parameter_id_idx';
      RAISE NOTICE 'INDEX NAME =%',index_name;
      EXECUTE format('CREATE INDEX ' || quote_ident(index_name) || ' ON '|| quote_ident(partition_name) ||' USING btree ("SHIPMENT_ID", "PARAMETER_ID") TABLESPACE pg_default ' ) ; 

      index_name := partition_name||'_lasermark_idx';
      RAISE NOTICE 'INDEX NAME =%',index_name;
      EXECUTE format('CREATE INDEX ' || quote_ident(index_name) || ' ON '|| quote_ident(partition_name) ||' USING btree ("LASERMARK" COLLATE pg_catalog."default") TABLESPACE pg_default ' ) ; 

      index_name := partition_name||'_shipment_id_idx';
      RAISE NOTICE 'INDEX NAME =%',index_name;
      EXECUTE format('CREATE INDEX ' || quote_ident(index_name) || ' ON '|| quote_ident(partition_name) ||' USING btree ("SHIPMENT_ID") TABLESPACE pg_default ' ) ; 

      index_name := partition_name||'_parameter_id_idx';
      RAISE NOTICE 'INDEX NAME =%',index_name;
      EXECUTE format('CREATE INDEX ' || quote_ident(index_name) || ' ON '|| quote_ident(partition_name) ||' USING btree ("PARAMETER_ID") TABLESPACE pg_default ' ) ; 

      index_name := partition_name||'_shipment_date_idx';
      RAISE NOTICE 'INDEX NAME =%',index_name;
      EXECUTE format('CREATE INDEX ' || quote_ident(index_name) || ' ON '|| quote_ident(partition_name) ||' USING btree ("SHIPMENT_DATE") TABLESPACE pg_default ' ) ; 

      --Drop first time flag
      first_flag := false ;

  END LOOP;
end
$$;

แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ— แƒœแƒแƒ’แƒแƒ•แƒกแƒแƒงแƒ แƒ”แƒšแƒ˜ แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ 3.

pg_restore -h ั…ะพัั‚ -ัŽะทะตั€ -d ะฑะฐะทะฐ --data-only --format=c --table=data --verbose  data.dmp > data_restore.log 2>&1

แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒชแƒแƒšแƒ™แƒ” แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ แƒซแƒ•แƒ”แƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก

---------------------------------------------------
--create_partition_for_old_dates.sql
--create partitions for keeping old dates 
--version 1.0
do language plpgsql $$
declare 
rec_shipment_date RECORD ;
partition_name varchar;
index_name varchar;

begin

      SELECT min("SHIPMENT_DATE") AS min_date INTO rec_shipment_date from data ;

      RAISE NOTICE 'Old date is %',rec_shipment_date.min_date ;

      partition_name := 'data_old_dates'  ;

      RAISE NOTICE 'PARTITION NAME IS %',partition_name;

      EXECUTE format('CREATE TABLE ' || quote_ident(partition_name) || ' PARTITION OF data FOR VALUES FROM ( %L ) TO ( %L )  ' , '1900-01-01' , 
              to_char( rec_shipment_date.min_date,'YYYY')||'-'||to_char(rec_shipment_date.min_date,'MM')||'-01'  ) ; 

      index_name := partition_name||'_shipment_id_parameter_id_idx';
      EXECUTE format('CREATE INDEX ' || quote_ident(index_name) || ' ON '|| quote_ident(partition_name) ||' USING btree ("SHIPMENT_ID", "PARAMETER_ID") TABLESPACE pg_default ' ) ; 

      index_name := partition_name||'_lasermark_idx';
      EXECUTE format('CREATE INDEX ' || quote_ident(index_name) || ' ON '|| quote_ident(partition_name) ||' USING btree ("LASERMARK" COLLATE pg_catalog."default") TABLESPACE pg_default ' ) ; 

      index_name := partition_name||'_shipment_id_idx';
      EXECUTE format('CREATE INDEX ' || quote_ident(index_name) || ' ON '|| quote_ident(partition_name) ||' USING btree ("SHIPMENT_ID") TABLESPACE pg_default ' ) ; 

      index_name := partition_name||'_parameter_id_idx';
      EXECUTE format('CREATE INDEX ' || quote_ident(index_name) || ' ON '|| quote_ident(partition_name) ||' USING btree ("PARAMETER_ID") TABLESPACE pg_default ' ) ; 

      index_name := partition_name||'_shipment_date_idx';
      EXECUTE format('CREATE INDEX ' || quote_ident(index_name) || ' ON '|| quote_ident(partition_name) ||' USING btree ("SHIPMENT_DATE") TABLESPACE pg_default ' ) ; 

end
$$;

แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜:

แƒ”แƒก แƒ˜แƒงแƒ
แƒคแƒแƒกแƒ˜: 502 997.55
แฒแƒฆแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ: 505 แƒฌแƒแƒ›แƒ˜

แƒ˜แƒก แƒ’แƒแƒฎแƒ“แƒ
แƒคแƒแƒกแƒ˜: 68 533.70
แฒแƒฆแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ: 69 แƒฌแƒแƒ›แƒจแƒ˜

แƒฆแƒ˜แƒ แƒกแƒ”แƒฃแƒšแƒ˜, แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒฆแƒ˜แƒ แƒกแƒ”แƒฃแƒšแƒ˜. แƒ“แƒ แƒ—แƒฃ แƒ’แƒแƒ•แƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ‘แƒ—, แƒ แƒแƒ› แƒ’แƒ–แƒแƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ›แƒแƒ•แƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ— แƒ›แƒ”แƒข-แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ“ แƒ“แƒแƒ›แƒ”แƒฃแƒคแƒšแƒ”แƒ— แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒก PostgreSQL 10 - แƒจแƒ”แƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜.

แƒšแƒ˜แƒ แƒ˜แƒ™แƒฃแƒšแƒ˜ แƒ’แƒแƒ“แƒแƒฎแƒ แƒ

แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ—แƒฃ แƒแƒ แƒ แƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ - แƒ“แƒ˜แƒแƒฎ, แƒจแƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒ!แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— MATERIALIZED VIEW.
แƒ›แƒแƒขแƒ”แƒ แƒ˜แƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฎแƒ”แƒ“แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ LASERMARK_VIEW

CREATE MATERIALIZED VIEW LASERMARK_VIEW 
AS
SELECT w."LASERMARK" , MAX(s."SHIPMENT_DATE") AS "SHIPMENT_DATE"
FROM shipment s INNER JOIN data w ON s."SHIPMENT_ID" = w."SHIPMENT_ID" 
GROUP BY w."LASERMARK" ;

CREATE INDEX lasermark_vw_shipment_date_ind on lasermark_view USING btree ("SHIPMENT_DATE") TABLESPACE pg_default;
analyze lasermark_view ;

แƒฉแƒ•แƒ”แƒœ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒ•แƒฌแƒ”แƒ แƒ— แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒก:
แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒ›แƒแƒขแƒ”แƒ แƒ˜แƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฎแƒ”แƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

SELECT
            p."PARAMETER_ID" as  parameter_id,
            pc."PC_NAME" AS pc_name,
            pc."CUSTOMER_PARTNUMBER" AS customer_partnumber,
            w."LASERMARK" AS lasermark,
            w."LOTID" AS lotid,
            w."REPORTED_VALUE" AS reported_value,
            w."LOWER_SPEC_LIMIT" AS lower_spec_limit,
            w."UPPER_SPEC_LIMIT" AS upper_spec_limit,
            p."TYPE_CALCUL" AS type_calcul,
            s."SHIPMENT_NAME" AS shipment_name,
            s."SHIPMENT_DATE" AS shipment_date,
            extract(year from s."SHIPMENT_DATE") AS year,
            extract(month from s."SHIPMENT_DATE") as month,
            s."REPORT_NAME" AS report_name,
            p."STC_NAME" AS STC_name,
            p."CUSTOMERPARAM_NAME" AS customerparam_name
        FROM data w INNER JOIN shipment s ON s."SHIPMENT_ID" = w."SHIPMENT_ID"
             INNER JOIN parameters p ON p."PARAMETER_ID" = w."PARAMETER_ID"
             INNER JOIN shipment_pc sp ON s."SHIPMENT_ID" = sp."SHIPMENT_ID"
             INNER JOIN pc pc ON pc."PC_ID" = sp."PC_ID"
             INNER JOIN LASERMARK_VIEW md ON md."SHIPMENT_DATE" = s."SHIPMENT_DATE" AND md."LASERMARK" = w."LASERMARK"
        WHERE 
              s."SHIPMENT_DATE" >= '2018-07-01' AND s."SHIPMENT_DATE" <= '2018-09-30';

แƒ“แƒ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ— แƒจแƒ”แƒ“แƒ”แƒ’แƒก:
แƒ”แƒก แƒ˜แƒงแƒ
แƒคแƒแƒกแƒ˜: 502 997.55
แฒแƒฆแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ: 505 แƒฌแƒแƒ›แƒ˜

แƒ˜แƒก แƒ’แƒแƒฎแƒ“แƒ
แƒคแƒแƒกแƒ˜: 42 481.16
แฒแƒฆแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ: 43 แƒฌแƒแƒ›แƒจแƒ˜.

แƒ—แƒฃแƒ›แƒชแƒ, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒแƒกแƒ”แƒ—แƒ˜ แƒžแƒ”แƒ แƒกแƒžแƒ”แƒฅแƒขแƒ˜แƒฃแƒšแƒ˜ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒ›แƒแƒขแƒงแƒฃแƒแƒ แƒแƒ; แƒ˜แƒ“แƒ”แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒแƒ แƒกแƒแƒญแƒ˜แƒ แƒ. แƒแƒกแƒ” แƒ แƒแƒ›, แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒ˜ แƒ“แƒ แƒ แƒ“แƒ˜แƒ“แƒแƒ“ แƒแƒ  แƒ“แƒแƒ’แƒ•แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒ’แƒแƒ แƒช แƒ”แƒฅแƒกแƒžแƒ”แƒ แƒ˜แƒ›แƒ”แƒœแƒขแƒ˜ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒแƒ.

แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒ˜แƒฅแƒœแƒ, แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒ›แƒแƒ“แƒšแƒแƒ‘แƒ แƒแƒกแƒ›แƒ› แƒ“แƒ แƒฐแƒแƒ‘แƒ แƒฃ!- แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒฃแƒคแƒ แƒ แƒ’แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ“แƒ”แƒก.

Afterword

แƒแƒกแƒ” แƒ แƒแƒ›, แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ™แƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ˜แƒ. แƒ“แƒ to แƒ˜แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ”แƒ— แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ˜แƒ—.

แฒแƒฎแƒแƒšแƒ˜ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ: แƒ แƒ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ›แƒแƒ˜แƒคแƒ˜แƒฅแƒ แƒแƒ— แƒ’แƒแƒกแƒแƒฆแƒ แƒ›แƒแƒ•แƒ”แƒ‘แƒšแƒแƒ“ แƒ“แƒ แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก?

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜ แƒ›แƒแƒฎแƒกแƒแƒ•แƒก - แƒ‘แƒ˜แƒญแƒ”แƒ‘แƒ, แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒฉแƒ•แƒ”แƒœแƒ˜ PostgreSQL แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜.

แƒ’แƒฃแƒšแƒ—แƒแƒœ แƒแƒฎแƒšแƒแƒก, แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒแƒ แƒ˜แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜ Cloud Watch-แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ— AWS-แƒ–แƒ”. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒ แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒ”แƒšแƒก แƒ›แƒแƒแƒฅแƒ•แƒก แƒ”แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜ DBA-แƒกแƒ—แƒ•แƒ˜แƒก? แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒฃแƒšแƒแƒ“ แƒแƒ แƒชแƒ”แƒ แƒ—แƒ˜.

แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒแƒฅแƒ•แƒ— แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒ— แƒ แƒแƒ˜แƒ›แƒ” แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ“แƒ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก, แƒแƒ  แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ”แƒก แƒจแƒแƒœแƒกแƒ˜...
FOR

แƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒ˜ แƒฌแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒแƒœ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜ แƒ›แƒแƒ’แƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜ PostgreSQL10-แƒจแƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒ’แƒแƒชแƒœแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

แƒแƒกแƒ” แƒ›แƒ˜แƒ•แƒ”แƒ“แƒ˜แƒ— แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒœแƒแƒฌแƒ˜แƒšแƒแƒ›แƒ“แƒ”:

3 แƒฌแƒšแƒ˜แƒก 2018 แƒ“แƒ”แƒ™แƒ”แƒ›แƒ‘แƒ”แƒ แƒ˜.
แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ, แƒ แƒแƒ› แƒ“แƒแƒ˜แƒฌแƒงแƒแƒก แƒ™แƒ•แƒšแƒ”แƒ•แƒ PostgreSQL แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒกแƒ แƒฃแƒšแƒ˜แƒแƒ“ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒ›แƒ‘แƒแƒ•แƒ˜แƒ.

แฒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒโ€ฆ

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ