• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Benjamin

            靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數據加載中……

            MySQL切換PostgreSQL注意事項

            # 切換流程
            postgres相比mysql多了一層模式(Schema)的概念, 一個數據庫下可以有多個模式。 這里的模型名等價于以前的mysql的數據庫名。如果不指定默認是public。

            # 注意事項
            1、
            參數值不能用雙引號,需用單引號
            2、字段名不能用``包起來,直接去掉就可以
            3、json字段處理語法不同:
            mysql是用 -> '$.xxx'的語法去選取的, 而 postgreSQL 得用 ->>'xx' 語法選擇屬性
            4、
            postgreSQL沒有convert函數,用CAST函數替換
            5、
            mysql可以使用force index強制走索引, postgres沒有,建議去掉
            6、
            postgreSQL沒有ifnull函數,用COALESCE函數替換
            7、
            postgreSQL沒有date_format函數,用to_char函數替換。例子:
            to_char(time,'YYYY-MM-DD') => DATE_FORMAT(time,'%Y-%m-%d')
            to_char(time,'YYYY-MM') => DATE_FORMAT(time,'%Y-%m')
            to_char(time,'YYYYMMDDHH24MISS') => DATE_FORMAT(time,'%Y%m%d%H%i%s')
            8、
            postgreSQL 的 select的字段必須是group by的字段里的 或者使用了聚合函數。mysql則沒有這個要求,非聚合列會隨機取值
            錯誤例子
            select name, age, count(*)from user group by age, score

            這時 select name 是錯誤的, 應為group by里沒有這個字段,要么加上,要么變成select min(name)
            9、
            Postgres數據庫中,同一事務中如果某次數據庫操作中出錯的話,那這個事務以后的數據庫操作都會出錯。如果有人去捕獲了事務異常后又去執行數據庫操作就會導致這個問題。mysql貌似不會有這個問題,解決方法用if else替代異常
            10、mysql是支持自動類型轉換的,postgreSQL是強數據類型,字段類型和參數值類型之間必須一樣否則就會拋出異常。
                  解決辦法一般有兩種:手動修改代碼里的字段類型和傳參類型保證 或者 postgreSQL表字段類型,反正保證雙方一一對應;手動添加自動隱式轉換函數,達到類似mysql的效果
                  不要亂添加隱式轉換函數,可能導致   Could not choose a best candidate operator 異常 和 # operator is not unique 異常 就是在操作符比較的時候有多個轉換邏輯不知道用哪個了,死循環了
            11、postgreSQL輔助腳本

            批量修改timestamptz腳本,修改表字段類型 timestamptz 為 timestamp, 因為我們說過前者無法與LocalDateTime對應上
            timestamp without time zone 就是 timestamp;timestamp with time zone 就是 timestamptz
            DO $$DECLARE    rec RECORD;BEGIN    FOR rec IN SELECT table_name, column_name,data_type               FROM information_schema.columns               where table_schema = '要處理的模式名'                AND data_type = 'timestamp with time zone'    LOOP        EXECUTE 'ALTER TABLE ' || rec.table_name || ' ALTER COLUMN ' || rec.column_name || ' TYPE timestamp';    END LOOP;END $$;

            批量修改模式名下的所有字段類型為timestamp的并且字段名為 create_time 或者 update_time的字段的默認值為 CURRENT_TIMESTAMP-- 注意 || 號拼接的后面的字符串前面要有一個空格
            -- 注意 || 號拼接的后面的字符串前面要有一個空格DO $$DECLARE    rec RECORD;BEGIN    FOR rec IN SELECT table_name, column_name,data_type               FROM information_schema.columns               where table_schema = '要處理的模式名'                  AND data_type = 'timestamp without time zone'                 -- 修改的字段名             and column_name in ('create_time','update_time')    LOOP         EXECUTE 'ALTER TABLE ' || rec.table_name || ' ALTER COLUMN ' || rec.column_name || ' SET DEFAULT CURRENT_TIMESTAMP;';    END LOOP;END $$;

            posted on 2024-07-15 17:52 Benjamin 閱讀(79) 評論(0)  編輯 收藏 引用 所屬分類: 數據庫

            99久久无色码中文字幕| 嫩草伊人久久精品少妇AV| 国产成人精品久久一区二区三区| 亚洲熟妇无码另类久久久| 久久亚洲精精品中文字幕| 国产高潮国产高潮久久久| 99久久国产综合精品成人影院| 久久97久久97精品免视看秋霞| 中文字幕成人精品久久不卡| 开心久久婷婷综合中文字幕| 久久婷婷色香五月综合激情| 国产毛片欧美毛片久久久| 久久久久亚洲av无码专区| 久久精品国产69国产精品亚洲| 久久国产精品二国产精品| 亚洲中文字幕无码久久2017| 丁香五月综合久久激情| 少妇久久久久久被弄到高潮| 成人综合伊人五月婷久久| 精品99久久aaa一级毛片| 久久天天躁狠狠躁夜夜avapp| 精品久久久久久无码专区| 香蕉99久久国产综合精品宅男自| 成人久久精品一区二区三区| 亚洲一级Av无码毛片久久精品| 韩国三级大全久久网站| 精品熟女少妇AV免费久久| 久久e热在这里只有国产中文精品99| 77777亚洲午夜久久多喷| 国产精品成人99久久久久91gav| 亚洲精品乱码久久久久久中文字幕 | 伊人久久大香线焦AV综合影院| 国产叼嘿久久精品久久| 久久狠狠高潮亚洲精品| 亚洲女久久久噜噜噜熟女| 国产69精品久久久久9999APGF | 青青草原综合久久大伊人| 国产福利电影一区二区三区久久老子无码午夜伦不| 久久久久久午夜精品| 久久久久成人精品无码| 狠狠精品久久久无码中文字幕|