跳到主要內容

發表文章

目前顯示的是有「Database」標籤的文章

如何使用 Terraform 在 Azure Flexible Server 啟用 PostgreSQL 擴充功能

如何使用 Terraform 在 Azure Flexible Server 啟用 PostgreSQL 擴充功能 簡介 Azure Database for PostgreSQL Flexible Server 提供了一個靈活的託管資料庫解決方案,可以根據需求調整效能和規模。然而,某些擴充功能(例如 pg_stat_statements 、 pgcrypto 和 pgstattuple )預設未啟用。如果你直接嘗試使用 Terraform 創建這些擴充功能,可能會遇到權限錯誤,顯示 azure_pg_admin 用戶無法啟用這些功能。 好消息是,Microsoft 目前提供了一個 允許清單機制 ,可以手動啟用特定的擴充功能,這讓我們能夠透過 Terraform 或 CLI 來啟用這些功能,避免權限問題。 Azure 的限制與解決方案 在 Azure Database for PostgreSQL Flexible Server 中, azure_pg_admin 角色 不具備完整的 superuser 權限 ,因此某些擴充功能預設為不可用,這導致在 Terraform 配置時可能會出現權限錯誤。 目前,Azure 允許透過 azure.extensions 參數來啟用特定的擴充功能,這解決了開發人員無法自行安裝常見擴充功能的問題。我們可以使用 Terraform 或 Azure CLI 來修改這個設定。 透過 Terraform 啟用 PostgreSQL 擴充功能 要允許這些擴充功能,我們需要在 Terraform 配置 azure.extensions ,以下是具體步驟: 步驟 1:更新 Terraform 配置 在 Terraform 腳本中加入以下設定,允許指定的 PostgreSQL 擴充功能: resource "azurerm_postgresql_flexible_server_configuration" "extensions" { name = "azure.extensions" server_id = azurerm_postgresql_flexible_server.demo.id value = ...

Code First Migration: 什麼是Automatic Migration

Automatic Migration 這個功能可以在Configuration.cs中設定 若下所式     internal sealed class Configuration :  DbMigrationsConfiguration<AcerVoiceAssistant.Models.AvaBotDataContext>     {         public Configuration()         {             AutomaticMigrationsEnabled = true;         }         protected override void Seed(AcerVoiceAssistant.Models.AvaBotDataContext  context)         {             //  This method will be called after migrating to the latest version.             //  You can use the DbSet<T>.AddOr...

MigrateDatabaseToLatestVersion: 發布程式時同時更新資料庫

若想要在發布程式的時候連同資料庫一起更新那該如何作? 方法一 在Global.asax檔案裡, 找到protected void Application_Start 加入 initializer MigrateDatabaseToLatestVersion 如下所示    protected void Application_Start()  {     Database.SetInitializer(new MigrateDatabaseToLatestVersion<AvaBotDataContext, Configuration>());     new AvaBotDataContext().Database.Initialize(true); 加入之後, runtime時在資料庫初始化的階段, initializer會去查資料庫中的migration紀錄, 當程式裡的migration比較新就會去套用他來更新資料庫 方法二 直接在發布時勾選 Execute Code First Migration 他的效果跟方法一一樣, 只是不需要額外寫code而是透過config的方式去告訴initializer作跟MigrateDatabaseToLatestVersion一樣的事

快速了解什麼是Code First Migration

什麼是Code First Migration 簡單的說Code First Migration是一種建置管理資料庫的方式, 以往要建立或修改資料庫時, 通常是先寫SQL去作增刪修, 然後再去修改程式裡映射的類別  而Code First Migration的作法恰好相反 先建立映射的類別或是直接修改映射的類別中的屬性,  然後再透過Entity Framework幫我們把差異的部分直接同步回資料庫 基本上有三個步驟, 依序執行底下三個指令 Enable-Migration 初始化Migration 的環境, 指令執行完後專案底下會多 Configuration.cs 用來設定Migration的方式 如: AutomaticMigrationsEnabled = false; Add-Migration <名稱> 這個指令會去抓Web.config中的 connection string, 然後連到DB去檢查Table的schema跟目前程式中映射的類別有無衝突, 然後建立DbMigration類別, 所有的衝突都會被填到DbMigration類別中 以下的例子是執行了Add-Migration Init,     public partial class Init : DbMigration     {         public override void Up()         {             CreateTable(                 "dbo.Employe...

快速了解什麼是知識圖譜, 如何以Neo4j圖形資料庫實作知識圖譜(knowledge graph)

Understand What is Knowledge Graph and how to implement it by Neo4j 什麼是知識圖譜 簡單的說就是透過給定的關係, 把不同種類的資料給連結在一起而得出的關係網路, 最後我們可以藉由查詢關係的方式來獲取更深一層的答案 目前已知的知識圖譜有Freebase, DBpedia, 以及Bio2RDF(如果有興趣的話可以去Google一下, 這邊就暫不作介紹) 那我們要如何實現知識圖譜? 要實現知識圖譜並不難, 首先要定義資料的關係, 再來就是要有個圖形資料庫來儲存資料以及關係 在接下來的篇幅裡會介紹如何使用Neo4j圖形資料庫來實作知識圖譜 為什麼要用知識圖譜與圖形資料庫 對於小型且關係不怎麼複雜的資料來說, 其時RDB就很夠用了, 但是當資料越長越大, 而且關係越來越複雜時, RDB就很難去處理這種情況 而圖形資料庫就是為了解決這問題存在的, 省去了用RDB時需要的反覆JOIN 但圖形資料庫也不是萬能的, 比如說, 他不適合大量的及時儲存, 他只適合讀取 一般而言, 資料庫可以大約分成三個特性CAP來討論 因為物理限制, 所以通常資料庫只能滿足其中兩項, 而另一項就可能被犧牲掉 CAP CAP = Consistency + Availability + Partition tolerance 一致性(Consistency) 拿資料的時候可以保證資料一致, 無論用戶端怎麼讀取,都要能夠正確讀取最新的資料 可用性(Availability ) 快速回應能力 分割容忍(Partition tolerance) 這個能力關係到資料庫好不好以及容不容易擴展 圖形資料庫Neo4j 基本概念 資料庫的結構 每筆資料在知識圖譜裡都表示成一個節點Node ,  每個節點裡面可以自帶一些屬性Property(比如說年齡, 性別, 工作), 而我們也可以在節點上黏上數個標籤Label來表示資料的類別, 當我們在查詢資料時就可以用Label來過濾資料而更精準地獲得答案,  除此之外節點與節點之間可以建立有向關係, 關係中也可以自...

[AWS功能整理] Dynamodb

前言 DynamoDb 是Amazon提供的一種同時支援Key Value和Document 儲存方式的No SQL資料庫服務, 開發人員無需考慮環境的建置, 而是把資料庫當成服務來使用, 對於開發人員來說可以省去不少時間 此外, No SQL的形式, 也方便開發者不需要花費多餘的心思去設計Table Schema Primary Key 我們在DynamoDb上建立的每一筆資料都需要指定Patition Key 當作區分資料的主鍵 Partition Key 顧名思義, 跟儲存資料的實體位置有關 我們也可以再多定義一個Sort Key跟Partition Key組合成複合型的Primary Key 擁有複合型主鍵的資料在儲存時, 相同Partition Key的資料會被儲存在相同的Partition內, 當我們在撈資料時, Dynamodb 會根據Sort Key將資料排序 Consistency Model 目前DynamoDb 支援兩種Consistency Model: Eventually Consistency Read(Default) 這是預設選項, 當資料寫入成功後, 不保證能馬上讀取到新資料, 也就是說想要在寫完後立即讀取的話, 有可能會讀到舊值 Strong Consistency Read 則是保證在寫完後可以立即讀取到新的值, 但Performance 會比較差 若我們儲存的資料不像金融資料那樣需要立即性的話, 建議還是使用Eventually Consistency Read, 成本會比較低 查詢 若只要查詢單筆資料, 基本上可以使用GetItem API, 它的用途主要是用在想要取得某一明確的資料的時候, aws dynamodb get-item \ --table-name UserOrdersTable \ --key '{ "Username": {"S": "alexdebrie"}, "OrderId": {"S":"20160630-12928"} }' 所以必須要以...

在Azure SQL上新增使用者

實務上, 當我們開放資料庫給其他人存取時, 通常不會給管理者帳密讓他們去連資料庫, 而是新增一個新User並給予適當的權限, 以下就是實作步驟 首先, 建立一個帳號用來登陸SQL Server (這個SQL語法必須對master資料庫執行) CREATE LOGIN [abotuserlogin] WITH PASSWORD ='ooo12345678' GO 替master新增使用者 CREATE USER [aauser] FOR LOGIN [abotuserlogin]  GO 針對要開放的資料庫新增使用者 在Object Explorer上右鍵你想要動的資料庫 CREATE USER [aauser] FOR LOGIN [abotuserlogin]  GO 有了使用者之後我們就可以來設定權限 基本上有兩種方法 設定Role(通常一個Role就包含數個權限) 直接調整權限 總共有底下這麼多權限可以使用 若只想要開放資料的增刪修查, 那可以增加db_datareader, db_datawrite這兩個Role EXEC sp_addrolemember 'db_datareader', [aauser]; GO EXEC sp_addrolemember 'db_datawriter', [aauser]; GO 注意: 上面給的權限只能用來處理資料, 所以如果要加Table或是砍Table的話, 會出現access denied 的喔 最後, 如果這個User用不到了, 想要刪除的話, 可以Security 下找到我們剛剛加的 abotuserlogin 還有我們剛剛新增的aauser 右鍵這些名稱, 我個就可以看到刪除選項 Ref: https://azure.microsoft.com/en-us/blog/adding-users-to-your-sql-azure-database/ https://...

[MongoDb] 資料存在就更新資料, 不存在就新增

今天如果我想更新資料我可以用findOneAndUpdate, 但資料如果本身就不存在於資料庫裡時, 而我又想將這筆資料插入進去 那我們可能需要在callback function裡作新增的動作如下  Customer.findOneAndUpdate( query, update, function (err,result){ if (!err){ if (! result ){ result = new Customer( update ) } result.save( function (err){ if (err) throw err }) } }) 而更簡單的方法是我們可以傳入 { upsert: true} 這個option參數來做到一樣的事情 Customer.findOneAndUpdate( query, update,  {upsert:true} ,  function (err){       if (err) throw err  })       

MS SQL Store Procedure 簡易教學

前言: 簡單的說Store Procedure 可以讓我們預先寫好一段SQL語法, 等要用的時候再去呼叫他 EXEC     @return_value = [dbo].[GetImgByProject] 這麼做的好處是我們可以讓複雜的query便精簡, 除此之外由於Store Procedure是已經編譯完後且最佳化完後的產物, 所以執行Store Procedure也可以提升query的整體效率 以下是以MS SQL示範如何建立使用Store Procedure 環境: MS SQL 建立Store Procedure Step 1. 編寫建立語法 起手式 Create Procedure  YOURNAME AS YOURQUERY 列如: Create Procedure GetImgByProject AS SELECT TOP 1000 [SID] ,[Name] ,[PartNumber] ,[Brand] ,[ProjectName] ,[CreateDatetime] ,[UpdateDatetime] FROM [ DATA . MDF ].[dbo].[modelname] 如果需要帶參數進來, 可以在Create Procedure後加入參數名, 型別, 長度 @PARAM   varchar (50)  列如: Create Procedure GetImgByProject @ProjectName varchar (50) AS SELECT TOP 1000 [SID] ,[Name] ,[PartNumber] ,[Brand] ,[ProjectName] ,[CreateDatetime] ,[UpdateDatetime] FROM [ DATA . MDF ].[dbo].[modelname] WHERE ProjectName = @ProjectName Step 2. 執行Execute建立 Store P...