متن خبر

نحوه ایجاد مهاجرت های پایگاه داده در Go با استفاده از Docker و Postgres

نحوه ایجاد مهاجرت های پایگاه داده در Go با استفاده از Docker و Postgres

شناسهٔ خبر: 603098 -




Go یک زبان برنامه نویسی سریع با نحو نسبتاً ساده است. در حین یادگیری Go، یادگیری نحوه ساخت API و نحوه استفاده از آنها برای برقراری ارتباط با پایگاه داده بسیار مهم است. در فرآیند یادگیری، تصمیم گرفتم پروژه ای را انجام دهم که در این زمینه به من کمک کرد: یک API ساده ردیابی موجودی.

هنگام کار با یک پایگاه داده SQL مانند Postgres، متوجه شدم که ایجاد تغییرات به موقع در پایگاه داده مهم است. پس اگر شما طرحی دارید که ممکن است در آینده آن را اصلاح کنید، بهترین راه برای انجام این کار مهاجرت پایگاه داده است. این تضمین می کند که تغییرات در پایگاه داده با دقت و بدون تأثیر بر داده های موجود انجام می شود.

در این مقاله با انتقال پایگاه داده با استفاده از Docker و Postgres آشنا خواهید شد.

فهرست مطالب

مهاجرت پایگاه داده چیست؟

چگونه یک داکر کانتینر را راه اندازی و راه اندازی کنیم

نحوه ایجاد و اجرای طرحواره با استفاده از TablePlus

نحوه نصب golang-migrate

چگونه یک مهاجرت جدید ایجاد کنیم

نحوه ایجاد و رها کردن پایگاه داده در داخل و خارج از کانتینر Docker Postgres

نحوه مشاهده پایگاه داده در TablePlus

نحوه اجرای مهاجرت

نتیجه

مهاجرت پایگاه داده چیست؟

مهاجرت پایگاه داده چیست و چرا باید از آن استفاده کرد؟ خوب، به‌عنوان یک توسعه‌دهنده باطن، هنگام کار بر روی پروژه‌ای که نیاز به ذخیره داده‌ها در پایگاه داده دارد، باید یک طرح واره برای داده‌هایی که می‌خواهید ذخیره کنید، ایجاد کنید.

انتقال پایگاه داده به شما کمک می کند تا ساختار داده ها را در یک پایگاه داده و در این مورد، یک پایگاه داده رابطه ای مدیریت کنید. مهاجرت ها به تغییر طرحواره ها از وضعیت فعلی به حالت خاص/مطلوب کمک می کند. ممکن است شامل اضافه کردن جداول و ستون ها، حذف عناصر یا تغییر انواع و محدودیت ها باشد.

یکی از اهمیت های مهاجرت پایگاه داده ایجاد تغییرات در پایگاه داده قابل تکرار و بدون نگرانی بدون نگرانی از دست دادن داده است.

اگر مطمئن نیستید که طرح داده نهایی شما چگونه خواهد بود، توصیه می شود از مهاجرت استفاده کنید. از این نظر می توانید تغییرات را به صورت تدریجی در آن اعمال کنید.

چگونه یک داکر کانتینر را راه اندازی و راه اندازی کنیم

ترمینال خود را باز کنید و یک دایرکتوری جدید mkdir tracking-inventory-app ایجاد کنید.

سپس یک تصویر postgres را از Docker Hub بکشید. من از تگ postgres:14-alpine استفاده کردم. می توانید از هر برچسبی که می خواهید استفاده کنید.

در ترمینال خود، موارد زیر را بچسبانید و اینتر را فشار دهید:

 $ docker pull postgres:14-alpine

پس از نصب، کانتینر را با استفاده از دستور docker run راه اندازی کنید:

 $ docker run --name postgres14 -e POSTGRES_USER=root -e POSTGRES_PASSWORD=passwordd -p 5432:5432 -d postgres:14-alpine

پرچم --name به نام کانتینر اشاره دارد. پرچم -e به متغیرهای محیطی اشاره دارد. پرچم -p به معنای انتشار است. شما باید کانتینر خود را روی یک پورت مشخص اجرا کنید. پرچم -d به این معنی است که می خواهید آن را در حالت جدا شده اجرا کنید.

پس از اینکه Enter را فشار دادید، در صورت نصب Docker Desktop خود را باز کنید. اگر این کار را نکردید، می توانید آن را از وب سایت docker دانلود کنید.

در Docker Desktop خود، باید ببینید که کانتینر راه اندازی شده است:

docker-postgres14

می توانید با استفاده از TablePlus با پایگاه داده ارتباط برقرار کنید:

اتصال

اتصال را تست کنید. اگه بيان کرد ok باشه وصل کن اگر در ویندوز هستید و خطای احراز هویت را نشان می دهد، به دکمه شروع خود بروید و روی Run کلیک کنید. در پنجره بازشو عبارت services.msc را تایپ کرده و enter را فشار دهید. به دنبال postgres بگردید و روی stop service کلیک کنید. سپس دوباره سعی کنید وصل شوید.

نحوه ایجاد و اجرای طرحواره با استفاده از TablePlus

من یک طرح و مدل از پیش تعریف شده برای پروژه ردیابی موجودی با نمودار db ایجاد کرده ام. این موجودی ردیابی باید به شما امکان دهد یک آیتم، شماره سریال و مقدار اضافه کنید. پس طرحواره دارای یک item ، serial_number ، id و فیلدهای created_at خواهد بود.

 CREATE TABLE "inventory" ( "id" uuid PRIMARY KEY, "item" varchar NOT NULL, "serial_number" varchar NOT NULL, "user" uuid NOT NULL, "created_at" timestamptz NOT NULL DEFAULT 'now()' ); CREATE TABLE "user" ( "id" uuid PRIMARY KEY, "name" varchar NOT NULL, "email" varchar UNIQUE NOT NULL, "password" varchar NOT NULL, "created_at" timestamptz NOT NULL DEFAULT 'now()' ); CREATE INDEX ON "inventory" ("item"); ALTER TABLE "inventory" ADD FOREIGN KEY ("user") REFERENCES "user" ("id");

مال من اینجوری به نظر میرسه می توانید TablePlus خود را باز کنید و کد PostgreSQL تولید شده را اضافه کنید و آن را اجرا کنید.

نحوه نصب golang-migrate

گام بعدی این است که golang-migrate روی سیستم خود نصب کنید. من برای این آموزش از لینوکس در ویندوز استفاده می کنم.

برای نصب آن، به این مستندات مراجعه کنید.

من از لینوکس استفاده می کنم پس از curl استفاده خواهم کرد:

 $ curl -L https://github.com/golang-migrate/migrate/releases/download/v4.12.2/migrate.linux-amd64.tar.gz | tar xvz

هنگامی که با موفقیت نصب شد، در ترمینال خود، دستور migrate -help اجرا کنید تا دستورات مختلف آن را ببینید.

مهاجرت-کمک

چگونه یک مهاجرت جدید ایجاد کنیم

پس از نصب golang-migrate ، می توانید یک اسکریپت مهاجرت جدید ایجاد کنید.

ابتدا، در ترمینال خود و در فهرست برنامه ردیابی، کد VS را با دستور code باز کنید.

پس از انجام این کار، یک پوشه جدید به نام db و یک پوشه دیگر در داخل پوشه db با نام migrations ایجاد کنید.

سپس در ترمینال خود دستور زیر را اجرا کنید:

 $ migrate create -ext sql -dir db/migration -seq tracking_inventory_schema

پرچم -ext به پسوندی اشاره دارد که می‌خواهید مهاجرت با آن ایجاد شود. در این مورد sql است. پرچم -dir به دایرکتوری اشاره دارد که می‌خواهید فایل‌ها را در آن ایجاد کنید. پرچم -seq به شماره ترتیبی فایل‌های مهاجرت اشاره دارد.

در کد VS شما باید دو فایل وجود داشته باشد: یکی برای up و دیگری برای down . اولی برای ایجاد تغییرات رو به جلو به دایرکتوری استفاده می شود در حالی که دومی برای معکوس کردن تغییرات است.

در فایل up ، شما می خواهید شمای خود را در فایل پیست کنید.

طرح من به این شکل است:

 CREATE TABLE "inventory" ( "id" uuid PRIMARY KEY, "item" varchar NOT NULL, "serial_number" varchar NOT NULL, "user" uuid NOT NULL, "created_at" timestamptz NOT NULL DEFAULT 'now()' ); CREATE TABLE "user" ( "id" uuid PRIMARY KEY, "name" varchar NOT NULL, "email" varchar UNIQUE NOT NULL, "password" varchar NOT NULL, "created_at" timestamptz NOT NULL DEFAULT 'now()' ); CREATE INDEX ON "inventory" ("item"); ALTER TABLE "inventory" ADD FOREIGN KEY ("user") REFERENCES "user" ("id");

بسته به پروژه ای که می سازید ممکن است پروژه شما متفاوت به نظر برسد.

برای فایل down ، فقط این را در آن قرار دهید:

 DROP TABLE IF EXISTS inventory; DROP TABLE IF EXISTS user;

جدول موجودی باید ابتدا حذف شود زیرا به جدول کاربر اشاره دارد.

نحوه ایجاد و رها کردن پایگاه داده در داخل و خارج از کانتینر Docker Postgres

تحلیل کنید که آیا کانتینر docker شما با استفاده از دستور اجرا می شود:

 $ docker ps

اگر اینطور نیست، از دستور docker start ${container name} برای شروع آن استفاده کنید.

قدم بعدی دسترسی به پوسته postgres با استفاده از دستور زیر است زیرا من روی لینوکس هستم:

 $ docker exec -it postgres14 bin/bash

پرچم -it مخفف پوسته/ترمینال تعاملی است. در داخل این پوسته می توانید دستور createdb را اجرا کنید:

 /# createdb --username=root --owner=root tracking_inventory

پس از ایجاد، می توانید دستور psql را برای تعامل با db اجرا کنید:

 /# psql tracking-inventory psql (14.12) Type "help" for help. tracking_inventory=#

همچنین می توانید پایگاه داده را با دستور dropdb حذف کنید.

برای خروج از پوسته، از دستور exit استفاده کنید.

برای ایجاد پایگاه داده در خارج از کانتینر postgres، دستور زیر را وارد کنید:

 $ docker exec -it postgres14 createdb --username=root --owner=root tracking_inventory 

نحوه مشاهده پایگاه داده در TablePlus

برای مشاهده پایگاه داده ای که ایجاد کرده اید، با استفاده از اتصال قبلی که قبلا ایجاد کرده بودیم، متصل شوید. شما را به پایگاه داده ریشه می برد و سپس روی نماد db در بالا کلیک کنید.

root-db

دیتابیس ایجاد شده ظاهر می شود، سپس روی open کلیک کنید تا باز شود

tracking-inventory-db

نحوه اجرای مهاجرت

برای اجرای migrations، این دستور را در ترمینال خود اجرا کنید:

 $ migrate -path db/migration -database "postgresql://root:passwordd@localhost:5432/tracking_inventory?sslmode=disable" -verbose up

پرچم -path مسیری را که حاوی فایل های مهاجرت است مشخص می کند. گزینه -database آدرس پایگاه داده را مشخص می کند.

در داخل آدرس، درایور postgresql است. نام کاربری و رمز عبور به ترتیب root و passwordd است. اضافه کردن گزینه sslmode=disable نیز مهم است زیرا Postgres SSL را به طور پیش فرض فعال نمی کند.

حالا migrations را اجرا کنید:

 $ migrate -path db/migration -database "postgresql://root:passwordd@localhost:5432/tracking_inventory?sslmode=disable" -verbose up calhost:5432/tracking_inventory?sslmode=disable" -verbose up 2024/06/25 00:13:25 Start buffering 1/u tracking_inventory_schema 2024/06/25 00:13:25 Read and execute 1/u tracking_inventory_schema 2024/06/25 00:13:26 Finished 1/u tracking_inventory_schema (read 43.186044ms, ran 255.501635ms) 2024/06/25 00:13:26 Finished after 312.928488ms 2024/06/25 00:13:26 Closing source and database

مهاجرت موفقیت آمیز است!

پایگاه داده را رفرش کنید و جداول جدید را ببینید:

طرحواره مهاجرت

نتیجه

در طول این آموزش، شما یاد گرفته اید که چگونه با استفاده از Docker و Postgres به طور یکپارچه مهاجرت های پایگاه داده را در Go بنویسید و اجرا کنید. امیدوارم از این مقاله چیزهای زیادی یاد گرفته باشید.

می توانید در توییتر یا لینکدین با من ارتباط برقرار کنید.

خبرکاو

ارسال نظر




تبليغات ايهنا تبليغات ايهنا

تمامی حقوق مادی و معنوی این سایت متعلق به خبرکاو است و استفاده از مطالب با ذکر منبع بلامانع است