Postgresql tidak membuat db dengan "createb" sebagai pengguna super, namun tidak mengeluarkan kesalahan [duplikat]


100

Saya bekerja dengan instalasi postgresql baru, dengan pengguna super 'postgres'. Masuk melalui:

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

Tidak ada kesalahan, namun tabel tidak dibuat. Ada ide?


Jawaban:


209

createdbadalah utilitas baris perintah yang dapat Anda jalankan dari bash dan bukan dari psql. Untuk membuat database dari psql , gunakan create databasepernyataan seperti ini:

create database [databasename];

Catatan: pastikan untuk selalu mengakhiri pernyataan SQL Anda dengan ;


35
Terima kasih, saya akan menampar diri sendiri sekarang. :)
Damien Roche

Tentu. Poin mudah;) Perlu menunggu 7 menit (rupanya). Terima kasih lagi.
Damien Roche

35
jangan lupa untuk menambahkan titik koma di akhir ..;
Timothy Dalton

4
semi-colin itu untuk menang!
Michael Dimmitt

1
Terima kasih! tanda titik koma berhasil untuk saya. sangat kecil namun mengubah hidup;)
sas

75

Terlambat ke pesta, tetapi jawaban yang diterima tidak menjelaskan mengapa tidak ada kesalahan yang ditampilkan. Dan karena ini adalah sesuatu yang sering ditemukan oleh pendatang baru Postgres, saya ingin menambahkannya.


TL / TR: selalu akhiri pernyataan SQL Anda dengan ;


Karena createdb databasetidak diakhiri dengan ; psqlberpikir bahwa pernyataan tersebut belum selesai dan menunggu masukan lainnya. Ini ditunjukkan dengan prompt yang berubah dari postgres=#menjadi postgres-#. Perubahan yang sangat halus yang saya harap psqlakan dilakukan secara berbeda (lebih "menonjol").

Dengan memasukkan meta-command \list, pernyataan SQL "saat ini" akan "dibatalkan" tanpa menjalankannya.

Jika createdbtelah diakhiri dengan ;output akan menjadi:

postgres => createb foobar;
EROR: kesalahan sintaks pada atau di dekat "createb"
BARIS 1: foobar Createdb;
        ^
postgres =>

Menunjukkan dengan jelas bahwa ada sesuatu yang salah.


3
Wow, ini memang halus tapi mematikan. Saya mengalami masalah ini selama beberapa waktu. Pertama kali Anda menjalankan perintah dengan titik koma, Anda akan mendapatkan kesalahan karena createdbtidak valid. Tapi kemudian mengulangi perintah yang sama persis dengan create databasebukannya createdbbersama dengan titik koma berfungsi dengan sempurna.
Glen Selle

1
@Helsing: itu yang saya tulis, saya hanya menjelaskan mengapa tidak ada pesan kesalahan meskipun tidak valid
a_horse_with_no_name

@a_horse_with_no_name Ya, saya salah paham dengan tujuan Anda. Suara positif untuk jawaban Anda juga.
Helsing

3

Saya berada dalam situasi ini belum lama ini. Jika orang lain mengalami ini, mengingat prompt perintah menunjukkan postgres-#Anda dapat menjalankan perintah createb yang tertunda hanya dengan mengetik ;dan tombol kembali.


1

Buat basis data baru di PostgreSQL sangat sederhana, jalankan perintah ini di Linux (contoh CentOS 7):

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

0

Menggunakan terminal node, saya harus menjalankan:

psql -U postgres 

[masukkan sandi Anda]

kemudian ...

CREATE DATABASE dbadmin;

Yang membingungkan adalah saya memasukkan perintah yang sama ini sebelumnya dan tidak berhasil. Hanya setelah keluar dan masuk kembali, saya dapat menggunakan perintah standar ini dari dokumentasi: https://www.postgresql.org/docs/10/tutorial-createdb.html

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.