Skip to content

Commit ce84d9e

Browse files
authored
Merge pull request #165 from rdalkire/rdalkire-postgres_support
Rdalkire added out-of-box postgres support
2 parents a375788 + 730fecd commit ce84d9e

11 files changed

+92
-19
lines changed

Blogifier.sln

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{6015AFDB-9
2929
docs\Localization.md = docs\Localization.md
3030
docs\MySQL.md = docs\MySQL.md
3131
docs\Notifications.md = docs\Notifications.md
32+
docs\PostgreSQL.md = docs\PostgreSQL.md
3233
docs\Security.md = docs\Security.md
3334
docs\SendGrid.md = docs\SendGrid.md
3435
docs\SqlServer.md = docs\SqlServer.md

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Blogifier is multi-user, lightweight blog written in .NET Core with Angular fron
99
* Windows, Mac or Linux
1010
* ASP.NET Core 2.2
1111
* Visual Studio 2019, VS Code or other code editor (Atom, Sublime etc)
12-
* SQLite by default, MS SQL Server and MySQL out of the box, EF compatible databases should work
12+
* SQLite by default, MS SQL Server, Postgres and MySQL out of the box, EF compatible databases should work
1313

1414
## Getting Started
1515

docs/PostgreSQL.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
Blogifier uses SQLite database by default. It is file-based, cross-platform, portable,
3+
easy to use and should work for most people in most cases.
4+
5+
### Change Database to PostgreSQL
6+
7+
Another database provider supported by Blogifier out of the box is PostgreSQL. To switch
8+
using PostgreSQL just update configuration settings, for example:
9+
10+
```cmd
11+
/* src/app/appsettings.json */
12+
{
13+
"Blogifier": {
14+
"DbProvider": "Postgres",
15+
"ConnString": "Host=<server.address>;Username=<username>;Password=<password>;Database=blogifier_",
16+
...
17+
}
18+
}
19+
```
20+
21+
When you run application after changing provider, Blogifier will check if database exists,
22+
run migration scripts if required and populate database with seed data.
23+
24+
(caveat: of course for database creation and other migrations to work correctly, the
25+
specified user has to have the appropriate permissions with postgres.)

src/App/Startup.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ public void ConfigureServices(IServiceCollection services)
4848
{
4949
AppSettings.DbOptions = options => options.UseMySql(section.GetValue<string>("ConnString"));
5050
}
51+
else if (section.GetValue<string>("DbProvider") == "Postgres")
52+
{
53+
AppSettings.DbOptions = options => options.UseNpgsql(section.GetValue<string>("ConnString"));
54+
}
5155
else
5256
{
5357
AppSettings.DbOptions = options => options.UseSqlite(section.GetValue<string>("ConnString"));

src/Core/Core.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.2.6" />
1818
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" PrivateAssets="All" />
1919
<PackageReference Include="Microsoft.SyndicationFeed.ReaderWriter" Version="1.0.2" />
20+
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="2.2.4" />
2021
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.2.0" />
2122
<PackageReference Include="ReverseMarkdown" Version="3.8.0" />
2223
<PackageReference Include="Sendgrid" Version="9.11.0" />

src/Core/Migrations/20180810003517_InitAppDb.cs

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using Microsoft.EntityFrameworkCore.Metadata;
33
using Microsoft.EntityFrameworkCore.Migrations;
4+
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
45

56
namespace Core.Migrations
67
{
@@ -53,8 +54,12 @@ protected override void Up(MigrationBuilder migrationBuilder)
5354
{
5455
Id = table.Column<int>(nullable: false)
5556
.Annotation("Sqlite:Autoincrement", true)
56-
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)
57-
.Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
57+
.Annotation("SqlServer:ValueGenerationStrategy",
58+
SqlServerValueGenerationStrategy.IdentityColumn)
59+
.Annotation("MySql:ValueGenerationStrategy",
60+
MySqlValueGenerationStrategy.IdentityColumn)
61+
.Annotation("Npgsql:ValueGenerationStrategy",
62+
NpgsqlValueGenerationStrategy.SerialColumn),
5863
AppUserId = table.Column<string>(maxLength: 160, nullable: true),
5964
AppUserName = table.Column<string>(maxLength: 160, nullable: true),
6065
Email = table.Column<string>(nullable: true),
@@ -75,8 +80,12 @@ protected override void Up(MigrationBuilder migrationBuilder)
7580
{
7681
Id = table.Column<int>(nullable: false)
7782
.Annotation("Sqlite:Autoincrement", true)
78-
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)
79-
.Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
83+
.Annotation("SqlServer:ValueGenerationStrategy",
84+
SqlServerValueGenerationStrategy.IdentityColumn)
85+
.Annotation("MySql:ValueGenerationStrategy",
86+
MySqlValueGenerationStrategy.IdentityColumn)
87+
.Annotation("Npgsql:ValueGenerationStrategy",
88+
NpgsqlValueGenerationStrategy.SerialColumn),
8089
AuthorId = table.Column<int>(nullable: false),
8190
Title = table.Column<string>(maxLength: 160, nullable: false),
8291
Slug = table.Column<string>(maxLength: 160, nullable: false),
@@ -100,8 +109,12 @@ protected override void Up(MigrationBuilder migrationBuilder)
100109
{
101110
Id = table.Column<int>(nullable: false)
102111
.Annotation("Sqlite:Autoincrement", true)
103-
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)
104-
.Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
112+
.Annotation("SqlServer:ValueGenerationStrategy",
113+
SqlServerValueGenerationStrategy.IdentityColumn)
114+
.Annotation("MySql:ValueGenerationStrategy",
115+
MySqlValueGenerationStrategy.IdentityColumn)
116+
.Annotation("Npgsql:ValueGenerationStrategy",
117+
NpgsqlValueGenerationStrategy.SerialColumn),
105118
RoleId = table.Column<string>(nullable: false),
106119
ClaimType = table.Column<string>(nullable: true),
107120
ClaimValue = table.Column<string>(nullable: true)
@@ -123,8 +136,12 @@ protected override void Up(MigrationBuilder migrationBuilder)
123136
{
124137
Id = table.Column<int>(nullable: false)
125138
.Annotation("Sqlite:Autoincrement", true)
126-
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)
127-
.Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
139+
.Annotation("SqlServer:ValueGenerationStrategy",
140+
SqlServerValueGenerationStrategy.IdentityColumn)
141+
.Annotation("MySql:ValueGenerationStrategy",
142+
MySqlValueGenerationStrategy.IdentityColumn)
143+
.Annotation("Npgsql:ValueGenerationStrategy",
144+
NpgsqlValueGenerationStrategy.SerialColumn),
128145
UserId = table.Column<string>(nullable: false),
129146
ClaimType = table.Column<string>(nullable: true),
130147
ClaimValue = table.Column<string>(nullable: true)

src/Core/Migrations/20180915222836_Notifications.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using Microsoft.EntityFrameworkCore.Metadata;
33
using Microsoft.EntityFrameworkCore.Migrations;
4+
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
45

56
namespace Core.Migrations
67
{
@@ -14,8 +15,12 @@ protected override void Up(MigrationBuilder migrationBuilder)
1415
{
1516
Id = table.Column<int>(nullable: false)
1617
.Annotation("Sqlite:Autoincrement", true)
17-
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)
18-
.Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
18+
.Annotation("SqlServer:ValueGenerationStrategy",
19+
SqlServerValueGenerationStrategy.IdentityColumn)
20+
.Annotation("MySql:ValueGenerationStrategy",
21+
MySqlValueGenerationStrategy.IdentityColumn)
22+
.Annotation("Npgsql:ValueGenerationStrategy",
23+
NpgsqlValueGenerationStrategy.SerialColumn),
1924
AuthorId = table.Column<int>(nullable: false),
2025
AlertType = table.Column<int>(nullable: false),
2126
Content = table.Column<string>(nullable: true),

src/Core/Migrations/20180917014904_HtmlWidgets.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Microsoft.EntityFrameworkCore.Metadata;
22
using Microsoft.EntityFrameworkCore.Migrations;
3+
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
34

45
namespace Core.Migrations
56
{
@@ -13,8 +14,12 @@ protected override void Up(MigrationBuilder migrationBuilder)
1314
{
1415
Id = table.Column<int>(nullable: false)
1516
.Annotation("Sqlite:Autoincrement", true)
16-
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)
17-
.Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
17+
.Annotation("SqlServer:ValueGenerationStrategy",
18+
SqlServerValueGenerationStrategy.IdentityColumn)
19+
.Annotation("MySql:ValueGenerationStrategy",
20+
MySqlValueGenerationStrategy.IdentityColumn)
21+
.Annotation("Npgsql:ValueGenerationStrategy",
22+
NpgsqlValueGenerationStrategy.SerialColumn),
1823
Name = table.Column<string>(nullable: true),
1924
Theme = table.Column<string>(nullable: true),
2025
Author = table.Column<string>(nullable: true),

src/Core/Migrations/20181013050615_CustomFields.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Microsoft.EntityFrameworkCore.Metadata;
22
using Microsoft.EntityFrameworkCore.Migrations;
3+
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
34

45
namespace Core.Migrations
56
{
@@ -13,8 +14,12 @@ protected override void Up(MigrationBuilder migrationBuilder)
1314
{
1415
Id = table.Column<int>(nullable: false)
1516
.Annotation("Sqlite:Autoincrement", true)
16-
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)
17-
.Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
17+
.Annotation("SqlServer:ValueGenerationStrategy",
18+
SqlServerValueGenerationStrategy.IdentityColumn)
19+
.Annotation("MySql:ValueGenerationStrategy",
20+
MySqlValueGenerationStrategy.IdentityColumn)
21+
.Annotation("Npgsql:ValueGenerationStrategy",
22+
NpgsqlValueGenerationStrategy.SerialColumn),
1823
AuthorId = table.Column<int>(nullable: false),
1924
Name = table.Column<string>(nullable: true),
2025
Content = table.Column<string>(nullable: true)

src/Core/Migrations/20181220174710_Newsletters.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Microsoft.EntityFrameworkCore.Metadata;
22
using Microsoft.EntityFrameworkCore.Migrations;
3+
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
34

45
namespace Core.Migrations
56
{
@@ -35,8 +36,12 @@ protected override void Down(MigrationBuilder migrationBuilder)
3536
{
3637
Id = table.Column<int>(nullable: false)
3738
.Annotation("Sqlite:Autoincrement", true)
38-
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)
39-
.Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
39+
.Annotation("SqlServer:ValueGenerationStrategy",
40+
SqlServerValueGenerationStrategy.IdentityColumn)
41+
.Annotation("MySql:ValueGenerationStrategy",
42+
MySqlValueGenerationStrategy.IdentityColumn)
43+
.Annotation("Npgsql:ValueGenerationStrategy",
44+
NpgsqlValueGenerationStrategy.SerialColumn),
4045
Author = table.Column<string>(nullable: true),
4146
Content = table.Column<string>(nullable: true),
4247
Name = table.Column<string>(nullable: true),

0 commit comments

Comments
 (0)