Postgresql không tạo db với “createb” làm siêu người dùng, chưa xuất lỗi [trùng lặp]


100

Tôi đang làm việc với một bản cài đặt postgresql mới, với siêu người dùng 'postgres'. Đăng nhập qua:

sudo -u postgres psql


postgres=# createdb database
postgres-# \list
                                  List of databases
   Name    |  Owner   | Encoding |  Collation  |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
 template0 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres
                                                             : postgres=CTc/postgres
 template1 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres
                                                             : postgres=CTc/postgres

Không có lỗi, bảng chưa được tạo. Bất kỳ ý tưởng?


Liên quan chặt chẽ đến stackoverflow.com/questions/8537576/...
Craig Ringer

Câu trả lời:


208

createdblà một tiện ích dòng lệnh mà bạn có thể chạy từ bash chứ không phải từ psql. Để tạo cơ sở dữ liệu từ psql , hãy sử dụng create databasecâu lệnh như sau:

create database [databasename];

Lưu ý: hãy đảm bảo luôn kết thúc các câu lệnh SQL của bạn bằng ;


35
Cảm ơn, tôi sẽ tự tát mình ngay bây giờ. :)
Damien Roche

Chắc chắn rồi. Điểm dễ dàng;) Cần đợi 7 phút chưa (hình như). Cảm ơn một lần nữa.
Damien Roche

35
đừng quên để thêm dấu chấm phẩy ở cuối ..;
Timothy Dalton

4
bán colin đó để giành chiến thắng!
Michael Dimmitt

1
Cảm ơn bạn! dấu chấm phẩy đã làm việc cho tôi. quá nhỏ nhưng cuộc sống đang thay đổi;)
sas

75

Đến bữa tiệc muộn, nhưng câu trả lời được chấp nhận không giải thích tại sao lỗi không hiển thị. Và vì đây là điều mà những người mới của Postgres thường gặp phải, tôi muốn thêm điều đó.


TL / TR: luôn kết thúc câu lệnh SQL của bạn bằng ;


Bởi vì createdb databasekhông kết thúc với cho ; psqlrằng câu lệnh chưa kết thúc và chờ thêm đầu vào. Điều này được chỉ ra bằng lời nhắc thay đổi từ postgres=#thành postgres-#. Một sự thay đổi cực kỳ tinh tế mà tôi ước psqlsẽ làm khác đi ("nổi bật" hơn).

Bằng cách nhập lệnh meta, \listcâu lệnh SQL "hiện tại" bị "hủy bỏ" mà không thực thi nó.

Nếu createdbkết thúc bằng một ;kết quả đầu ra sẽ là:

postgres => createb foobar;
LỖI: lỗi cú pháp tại hoặc gần "createdb"
DÒNG 1: foobar đã tạo;
        ^
postgres =>

Rõ ràng cho thấy có điều gì đó không ổn.


3
Wow, điều này quả thực là tinh tế nhưng chết người. Tôi đã gặp vấn đề này trong một thời gian khá dài. Lần đầu tiên bạn chạy lệnh với dấu chấm phẩy, bạn sẽ gặp lỗi vì createdbkhông hợp lệ. Nhưng sau đó lặp lại chính xác cùng một lệnh với create databasethay vì createdbcùng với dấu chấm phẩy hoạt động hoàn hảo.
Glen Selle

1
@Helsing: đó là những gì tôi đã viết, tôi chỉ giải thích lý do tại sao không có một thông báo lỗi mặc dù nó không hợp lệ
a_horse_with_no_name

@a_horse_with_no_name Đúng vậy, tôi đã hiểu sai mục đích của bạn. Cũng ủng hộ câu trả lời của bạn.
Helsing

3

Tôi đã ở trong tình huống này cách đây không lâu. Trong trường hợp người khác gặp phải điều này, hãy xem xét rằng dấu nhắc lệnh hiển thị postgres-#bạn có thể thực hiện lệnh createb đang chờ xử lý bằng cách chỉ cần gõ ;và phím quay lại.


1

Tạo cơ sở dữ liệu mới trong PostgreSQL rất đơn giản, thực hiện lệnh này trên Linux (ví dụ CentOS 7):

sudo -u postgres psql -c "create database MyDb;"

0

Sử dụng một thiết bị đầu cuối nút, tôi phải chạy:

psql -U postgres 

[nhập mật khẩu của bạn]

sau đó ...

CREATE DATABASE dbadmin;

Điều khó hiểu là tôi đã nhập các lệnh tương tự trước đây và nó không hoạt động. Chỉ sau khi đăng xuất và đăng nhập lại, tôi mới có thể sử dụng lệnh chuẩn này từ tài liệu: https://www.postgresql.org/docs/10/tutorial-createb.html

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.