dolthub / doltgresql

DoltgreSQL - Version Controlled PostgreSQL

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

`\c` allows me to connect to databases that don't exist

timsehn opened this issue · comments

testdb database already exists.

testdb=> \c employees
psql (14.7 (Homebrew), server 15.0)
WARNING: psql major version 14, server major version 15.
         Some psql features might not work.
You are now connected to database "employees" as user "timsehn".
employees=> create table employees (
    id int,
    last_name varchar(255),
    first_name varchar(255),
    primary key(id));
ERROR:  no database selected (errno 1105) (sqlstate HY000)
employees=> use employees;
ERROR:  database not found: employees (errno 1105) (sqlstate HY000)
employees=>

The database is not actually created on disk. So I assume doltgres sends back the proper database created message but doesn't actually create the database.

$ ls
testdb

It seems to support multiple existing databases just fine. Just cannot create a new one and use it.

In the doltgres server directory:

$ mkdir employees 
$ cd employees 
$ dolt init
Successfully initialized dolt data repository.
$ cd ..
$ doltgresql     
Starting server with Config HP="localhost:5432"|T="28800000"|R="false"|L="info"|S="/tmp/mysql.sock"

Then connecting:

$ psql -h 127.0.0.1 -d employees
psql (14.7 (Homebrew), server 15.0)
WARNING: psql major version 14, server major version 15.
         Some psql features might not work.
Type "help" for help.

employees=> show tables;
 Tables_in_employees 
---------------------
(0 rows)

employees=> create table employees (
    id int,
    last_name varchar(255),
    first_name varchar(255),
    primary key(id));
--
(0 rows)

employees=> use testdb;
--
(0 rows)

employees=> show tables;
 Tables_in_testdb 
------------------
 foo
(1 row)

employees=> use employees;
--
(0 rows)

employees=> show tables;
 Tables_in_employees 
---------------------
 employees
(1 row)

employees=>

I'm completely unable to replicate this. I noticed you were using PSQL 14.7, and tried using that version too, in case there was some kind of version incompatibility. It, however, worked completely as expected. I used DoltgreSQL on the tip of main, as well as the version from my latest PR. It all worked just fine.

Microsoft Windows [Version 10.0.19042.1586]
(c) Microsoft Corporation. All rights reserved.

C:\pgsql_14_7\bin>psql.exe -h localhost -U postgres -p 5432
psql (14.7, server 15.0)
WARNING: psql major version 14, server major version 15.
         Some psql features might not work.
WARNING: Console code page (437) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
Type "help" for help.

postgres=> CREATE DATABASE newdb;
--
(0 rows)


postgres=> \c newdb
psql (14.7, server 15.0)
WARNING: psql major version 14, server major version 15.
         Some psql features might not work.
You are now connected to database "newdb" as user "postgres".
newdb=> CREATE TABLE test (pk BIGINT PRIMARY KEY);
--
(0 rows)


newdb=> INSERT INTO test VALUES (1), (2), (4);
--
(0 rows)


INSERT 0 3
newdb=> SELECT * FROM test;
 pk
----
  1
  2
  4
(3 rows)


newdb=> CREATE DATABASE anotherdb;
--
(0 rows)


newdb=> \connect anotherdb;
psql (14.7, server 15.0)
WARNING: psql major version 14, server major version 15.
         Some psql features might not work.
You are now connected to database "anotherdb" as user "postgres".
anotherdb=> CREATE TABLE test2 (pk BIGINT PRIMARY KEY);
--
(0 rows)


anotherdb=> INSERT INTO test2 VALUES (3), (5), (7);
--
(0 rows)


INSERT 0 3
anotherdb=> SELECT * FROM test2;
 pk
----
  3
  5
  7
(3 rows)

I think the bug is I though \c was "create" not "connect". It allowed me to connect to a non-existant database.