วิธีควบคุมเวอร์ชันของ PostgreSQL schema ด้วยความคิดเห็น?


9

ฉันควบคุมเวอร์ชันส่วนใหญ่ของฉันทำงานกับGit : รหัสเอกสารการกำหนดค่าระบบ ฉันสามารถทำเช่นนั้นได้เพราะงานที่มีค่าทั้งหมดของฉันจะถูกเก็บไว้เป็นไฟล์ข้อความ

ฉันยังได้เขียนและจัดการกับ SQL schema จำนวนมากสำหรับฐานข้อมูล Postgres ของเรา สคีมารวมถึงมุมมอง, ฟังก์ชั่น SQL และเราจะเขียนฟังก์ชั่น Postgres ในภาษาโปรแกรมR (ผ่านPL / R )

ฉันพยายามคัดลอกและวางโครงร่างของชิ้นที่ฉันและผู้ทำงานร่วมกันเขียน แต่ฉันลืมที่จะทำเช่นนั้น การคัดลอกและการกระทำที่ผ่านมาซ้ำซ้อนและเกิดข้อผิดพลาดได้ง่าย

วิธีการ pg_dump / pg_restore จะไม่ทำงานเพราะมันสูญเสียความคิดเห็น

โดยหลักการแล้วฉันต้องการมีวิธีแยกสคีมาปัจจุบันของฉันลงในไฟล์หรือไฟล์และเก็บความคิดเห็นไว้เพื่อให้ฉันสามารถควบคุมเวอร์ชันได้

แนวปฏิบัติที่เหมาะสมที่สุดสำหรับสกีมาการควบคุมเวอร์ชันพร้อมความคิดเห็นคืออะไร


2
ฉันไม่คิดว่าคำถามนี้เป็นคำถามเฉพาะของ psql คุณอ่านคำตอบบางส่วนได้ที่ SO stackoverflow.com/หรือไม่? อาจมีบางอย่างสำหรับคุณ
DrColossos

@DrColossos - คำถามเหล่านี้บางคำถามเป็นตัวเลือกการย้ายถิ่นฐานที่ดี
CoderHawk

@DrColossos มีCOMMENT ONให้ในสภาพแวดล้อมที่ไม่ใช่ postgres หรือไม่? ฉันไม่คิดว่ามันเป็น SQL มาตรฐาน ซึ่งหมายความว่าสิ่งนี้อาจเฉพาะ postgres
xenoterracide

@xenoterracide คุณพูดถูกฉันพูดถึงปัญหาของการกำหนดเวอร์ชันของฐานข้อมูลด้วยตัวเอง
DrColossos

คำตอบ:


9

ทำไมคุณไม่ส่วนประกอบCOMMENT ONต่างSCHEMAๆ วิธีที่ความคิดเห็นของคุณอยู่ในสคีมาและจะถูกทิ้ง

COMMENT เก็บความคิดเห็นเกี่ยวกับวัตถุฐานข้อมูล
หากต้องการแก้ไขความคิดเห็นให้ออกคำสั่ง COMMENT ใหม่สำหรับวัตถุเดียวกัน สตริงความคิดเห็นเดียวเท่านั้นที่ถูกเก็บไว้สำหรับแต่ละวัตถุ หากต้องการลบความคิดเห็นให้เขียน NULL แทนสตริงข้อความ ความคิดเห็นจะลดลงโดยอัตโนมัติเมื่อวัตถุถูกทิ้ง


มีประโยชน์อย่างแท้จริง แต่ฉันไม่ต้องการทำเครื่องหมายว่าเป็นคำตอบเพียงเพราะฉันหวังว่าจะได้คำตอบที่ดีที่สุด
Aleksandr Levchuk

2

สกีมาการควบคุมเวอร์ชันเป็นปัญหาสำหรับฉันเสมอ ฉันโดยทั่วไปรุ่นควบคุมสคีที่สร้างขึ้นโดยเครื่องมือสร้างแบบจำลองข้อมูลที่ฉันใช้ รูปแบบเป็นรุ่นควบคุมด้วย ฉันใช้ความแตกต่างระหว่างสคีมาปัจจุบันและก่อนหน้านี้เพื่อสร้างแพตช์ที่จำเป็นในการอัพเดตสคีมา เครื่องมือสร้างแบบจำลองบางตัวสร้างสคริปต์การอัพเดตสกีมาที่ใช้งานได้ สคริปต์การอัปเดตนั้นควบคุมด้วยเวอร์ชันด้วย

ฉันเห็นบางครั้งสคริปต์ที่มีวัตถุประสงค์เพื่อดัมพ์สกีมาในรูปแบบที่เหมาะสมเพื่อสร้างสกีมาใหม่ หนึ่งในนั้นอาจเป็นสิ่งที่คุณกำลังมองหา เครื่องมือการสร้างแบบจำลองและแบบสอบถามบางรายการสามารถสร้างสคริปต์การสร้างสคีมาใหม่ในรูปแบบสคีมาที่มีอยู่ หากคุณสามารถสคริปต์นี้มันอาจให้ไฟล์ที่เหมาะสำหรับการควบคุมเวอร์ชัน


2

ทางเลือก (หรือคุณสามารถรวมพวกเขา) กับข้อเสนอก่อนหน้านี้ของฉันคือการเขียนโค้ด SQL ของคุณในการแก้ไขของคุณ (IDE) และบันทึกไฟล์และกระทำให้พวกเขา VCS psql -1fของคุณหลังจากที่เรียกใช้รหัสในฐานข้อมูลโดยใช้ วิธีนี้เป็นรหัสควบคุมเวอร์ชันก่อนที่จะถูกดำเนินการ


"วิธีนี้เป็นรหัสควบคุมเวอร์ชันก่อนที่จะถูกดำเนินการ" และมันควรจะเป็น
Mike Sherrill 'Cat Recall'

@catall ใช่ แต่ถ้าคุณอ่านโพสต์ ops ฉันไม่คิดว่าเป็นกรณี
xenoterracide

น่าเสียดายที่ไม่ใช่ในสถานที่ส่วนใหญ่ที่ฉันเคยเห็น แต่นั่นเป็นวิธีเดียวที่จะรับประกันได้ว่ารหัสที่คุณทดสอบและ QA เป็นรหัสเดียวกับที่คุณย้ายไปยังการผลิต แนวคิดที่ว่าฐานข้อมูล "จริง" อยู่ใน VCS ไม่ใช่ใน DBMS ไม่แพร่หลาย
ไมค์ Sherrill 'Cat Recall'

0

ฉันทำงานในโครงการที่คล้ายกัน นี่คือข้อเสนอการออกแบบของฉัน:

  1. ความคิดเห็นวัตถุฐานข้อมูลเป็นประจำให้พูดทุกสองสัปดาห์หรือสองครั้งต่อเดือน
  2. ทำpg_dump ทั้งหมด (ใช่รับทุกอย่างเพื่อให้แน่ใจว่าคุณได้รับรายละเอียดและความสัมพันธ์เล็ก ๆ น้อย ๆ ทั้งหมด) ตั้งชื่อพวกเขาโดย yyyymmdd-VERSION.dump
  3. หากใช้ Git ให้ใช้ปลั๊กอินสำหรับไฟล์ขนาดใหญ่
  4. หากไม่ได้ใช้ repo ให้สร้างตารางอย่างง่ายในรูปแบบข้อความ. CSV เช่นตารางด้านล่าง:

    version | file name | date | description | 1.0 | yyyymmdd-v10.dump | yyyymmdd | new version of user table | 1.1 | backupDB-v11.dump | yyyymmdd | normalized reports tables |

  5. โดยการรักษาความสัมพันธ์ในไฟล์ CSV ของการทิ้งที่สร้างขึ้นโดยชื่อไฟล์คุณสามารถติดตามพวกเขาได้อย่างง่ายดายและคุณมั่นใจได้ว่าการกู้คืนจะทำงานได้เพราะคุณทิ้งทุกอย่างอย่างแน่นอน

ทุกวันนี้ที่เก็บข้อมูลบนคลาวด์หรือที่เก็บข้อมูลบนไซต์ไม่ควรมีราคาแพงถึงแม้ว่าจะพูดถึงเรื่องข้อมูล TB ก็ตาม มีบางโกรธ 700-1,000 เหรียญสหรัฐที่มีมากถึง16 TB

คุณสามารถประหยัดได้มากกว่า $$$ ถ้าคุณย้ายไปที่คลาวด์สตอเรจเช่นAWS S3 ที่ได้รับความนิยมสูงสุด

หากการออกแบบที่ดีและมาตรฐานขององค์กรถูกกำหนดไว้เพื่อติดตามโครงสร้างพื้นฐานด้านไอทีและสินทรัพย์ที่ไม่ควรเจ็บปวดเมื่อใช้งานไปแล้วมันอาจจะค่อนข้างง่ายและจะช่วยให้คุณประหยัดเวลาและที่สำคัญที่สุด ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.