•  


GitHub - dolthub/doltgresql: DoltgreSQL - Version Controlled PostgreSQL
Skip to content

dolthub/doltgresql

Repository files navigation

DoltgreSQL is Dolt for Postgres!

From the creators of Dolt , the world's first version controlled SQL database, DoltgreSQL (aka Doltgres ) is a Postgres-flavored version of Dolt. Doltgres offers all the Git-style log, diff, branch, and merge functionality of Dolt on your Postgres database schema and data. Instead of connecting with a MySQL client and using MySQL SQL, you connect to Doltgres with a Postgres client and use Postgres SQL. Doltgres is like Git and Postgres had a baby.

Documentation

Doltgres has a documentation website with more extensive documentation.

Motivation

Dolt was built MySQL-flavored . There is no MySQL code in Dolt. In 2019, when we were conceiving of Dolt, MySQL was the most popular SQL-flavor. Over the past 5 years, the tide has shifted more towards Postgres, especially among young companies, Dolt's target market. Potential customers have been clamoring for a Postgres version of Dolt .

Moreover, Dolt was conceived of and built as Git for Data . Dolt later became a version controlled database . DoltgreSQL gives us the opportunity to strip out some of the Git for Data pieces like the CLI and build directly for the version controlled database use case. With Doltgres, you start a server, connect a client, and do everything with SQL, a familiar experience for Postgres users.

Doltgres will diverge from Dolt over time to be a focused database version control solution. That said, we have a five year head start with Dolt. Dolt is a production-grade version controlled database today. Dolt is 1.0 . If you are ok with using a MySQL-client, we recommend using Dolt for all use cases. Doltgres is experimental .

How You Can Help

Doltgres is experimental. We need your feedback to understand how much we should invest in it. If you are interested in using Doltgres now or in the future, please:

Getting Started

  1. Download the latest release of doltgres

  2. Put doltgres on your PATH

  3. Run doltgres . This will create a doltgres user and a doltgres database in ~/doltgres/databases (add the --data-dir argument or change the DOLTGRES_DATA_DIR environment variable to use a different directory).

$ doltgres
Successfully initialized dolt data repository.
Starting server with Config HP=
"
localhost:5432
"
|
T=
"
28800000
"
|
R=
"
false
"
|
L=
"
info
"
|
S=
"
/tmp/mysql.sock
"
  1. Make sure you have Postgres version 15 or higher installed. I used Homebrew to install Postgres on my Mac. This requires I manually add /opt/homebrew/opt/postgresql@15/bin to my path. On Postgres version 14 or lower, \ commands (ie. \d , \l ) do not yet work with Doltgres.
export PATH="/opt/homebrew/opt/postgresql@15/bin:$PATH"
  1. Open a new terminal. Connect with the following command: psql -h localhost -U doltgres . This will connect to the doltgres database with the doltgres user.
$ psql -h 127.0.0.1 -U doltgres
psql (15.4 (Homebrew), server 15.0)
Type 
"
help
"
 for
 help.

doltgres=
>
  1. Create a getting_started database. Create the getting_started example tables.
doltgres
=>
 create database getting_started;
--

(
0
 rows)

doltgres
=>
 \c getting_started;
psql (
15
.
4
 (Homebrew), server 
15
.
0
)
You are now connected to database 
"
getting_started
"
 as
 user 
"
doltgres
"
.
getting_started
=>
 create table employees (
    id int8,
    last_name 
text
,
    first_name 
text
,
    
primary key
(id));
--

(
0
 rows)

getting_started
=>
 create table teams (
    id int8,
    team_name 
text
,
    
primary key
(id));
--

(
0
 rows)

getting_started
=>
 create table employees_teams(
    team_id int8,
    employee_id int8,
    
primary key
(team_id, employee_id),
    
foreign key
 (team_id) 
references
 teams(id),
    
foreign key
 (employee_id) 
references
 employees(id));
--

(
0
 rows)

getting_started
=>
 \d
              List of relations
 Schema |      Name       | Type  |  Owner   
--
------+-----------------+-------+----------

 public | employees       | table | postgres
 public | employees_teams | table | postgres
 public | teams           | table | postgres
(
3
 rows)
  1. Make a Dolt Commit.
getting_started
=>
 select
 *
 from
 dolt_status;
   table_name    | staged |  status   
--
---------------+--------+-----------

 employees       | 
0
      | new table
 employees_teams | 
0
      | new table
 teams           | 
0
      | new table
(
3
 rows)

getting_started
=>
 call dolt_add(
'
teams
'
, 
'
employees
'
, 
'
employees_teams
'
);
 status 
--
------

      0

(
1
 row)
getting_started
=>
 select
 *
 from
 dolt_status; 
   table_name    | staged |  status   
--
---------------+--------+-----------

 employees       | 
1
      | new table
 employees_teams | 
1
      | new table
 teams           | 
1
      | new table
(
3
 rows)

getting_started
=>
 call dolt_commit(
'
-m
'
, 
'
Created initial schema
'
);
               hash               
--
--------------------------------

 peqq98e2dl5gscvfvic71e7j6ne34533
(
1
 row)
  1. View the Dolt log.
getting_started=> select * from dolt_log;
           commit_hash            | committer |       email        |        date         |          message           
----------------------------------+-----------+--------------------+---------------------+----------------------------
 peqq98e2dl5gscvfvic71e7j6ne34533 | doltgres  | doltgres@127.0.0.1 | 2023-11-01 22:08:04 | Created initial schema
 in7bk735qa6p6rv6i3s797jjem2pg4ru | timsehn   | tim@dolthub.com    | 2023-11-01 22:04:03 | Initialize data repository
(2 rows)
  1. Continue with Dolt Getting Started to test out more Doltgres versioning functionality.

Building From Source

Please follow the Contributor's Guide to learn how to build from source.

Limitations

  • No Git-style CLI for version control like in Dolt , only a SQL interface.
  • Can't push to DoltHub or DoltLab, only custom remotes.
  • Limited support of Postgres-specific types and functions.
  • No Postgres system tables.
  • No authentication or users.
  • Database and schema models are merged.
  • Limited support for SSL connections (non-verified connections only).
  • No GSSAPI support.
  • No PostgreSQL functions have been implemented, therefore only MySQL functions may be used.
  • No support for replication, clustering, etc.

Performance

Dolt is 1.7X slower than MySQL as measured by a standard suite of Sysbench tests.

We use these same Sysbench tests to benchmark DoltgreSQL and compare the results to PostgreSQL.

Here are the benchmarks for DoltgreSQL version 0.4.0 .

Read Tests PostgreSQL DoltgreSQL Multiple
oltp_point_select 0.13 0.54 4.2
oltp_read_only 2.35 12.75 5.4
select_random_points 0.2 1.04 5.2
select_random_ranges 0.4 1.03 2.6
reads_mean_multiplier 4.4
Write Tests PostgreSQL DoltgreSQL Multiple
oltp_insert 0.78 3.02 3.9
oltp_read_write 3.89 20.37 5.2
oltp_update_index 0.81 3.19 3.9
oltp_update_non_index 0.78 3.13 4.0
oltp_write_only 1.37 7.56 5.5
writes_mean_multiplier 4.5
Overall Mean Multiple 4.4

Correctness

Dolt is 99.99% compatible with MySQL based on a standard suite of correctness tests called sqllogictest .

We use these same tests to measure the correctness of DoltgreSQL.

Here are DoltgreSQL's sqllogictest results for version 0.5.0 . Tests that did not run could not complete due to a timeout earlier in the run.

Results Count
did not run 1415
timeout 767635
not ok 3915370
ok 1762969
Total Tests 5679755
Correctness Percentage 31.039525

Architecture

Doltgres emulates a Postgres server, including parsing Postgres SQL into an Abstract Syntax Tree (AST). This AST is converted to a form that can be interpreted by the Dolt engine. Doltgres uses the same SQL engine and storage format as Dolt.

Dolt has a unique architecture that allows for version control features at OLTP database performance. Doltgres uses the same architecture.

- "漢字路" 한글한자자동변환 서비스는 교육부 고전문헌국역지원사업의 지원으로 구축되었습니다.
- "漢字路" 한글한자자동변환 서비스는 전통문화연구회 "울산대학교한국어처리연구실 옥철영(IT융합전공)교수팀"에서 개발한 한글한자자동변환기를 바탕하여 지속적으로 공동 연구 개발하고 있는 서비스입니다.
- 현재 고유명사(인명, 지명등)을 비롯한 여러 변환오류가 있으며 이를 해결하고자 많은 연구 개발을 진행하고자 하고 있습니다. 이를 인지하시고 다른 곳에서 인용시 한자 변환 결과를 한번 더 검토하시고 사용해 주시기 바랍니다.
- 변환오류 및 건의,문의사항은 juntong@juntong.or.kr로 메일로 보내주시면 감사하겠습니다. .
Copyright ⓒ 2020 By '전통문화연구회(傳統文化硏究會)' All Rights reserved.
 한국   대만   중국   일본