Postgresql ไม่ได้สร้างฐานข้อมูลโดยมี“ createdb” เป็น superuser แต่ไม่ได้แสดงข้อผิดพลาด [ซ้ำกัน]


106

ฉันกำลังทำงานกับการติดตั้ง postgresql ใหม่โดยมีผู้ใช้ขั้นสูง "postgres" เข้าสู่ระบบผ่าน:

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

ไม่มีข้อผิดพลาดยังไม่ได้สร้างตาราง ความคิดใด ๆ ?


เกี่ยวข้องอย่างใกล้ชิดกับstackoverflow.com/questions/8537576/…
Craig Ringer

คำตอบ:


219

createdbเป็นยูทิลิตี้บรรทัดคำสั่งที่คุณสามารถเรียกใช้จากbashไม่ใช่จาก psql ในการสร้างฐานข้อมูลจากpsqlให้ใช้create databaseคำสั่งดังนี้:

create database [databasename];

หมายเหตุ: อย่าลืมปิดท้ายคำสั่ง SQL ของคุณด้วย ;


38
ขอบคุณฉันจะตบตัวเองเดี๋ยวนี้ :)
Damien Roche

1
แน่นอน คะแนนง่าย ๆ ;) ต้องรอ 7 นาที (เห็นได้ชัด) ขอบคุณอีกครั้ง.
Damien Roche

37
อย่าลืมใส่อัฒภาคต่อท้าย ..;
Timothy Dalton

6
กึ่งโคลินที่ชนะ!
Michael Dimmitt

2
ขอบคุณ! อัฒภาคกึ่งได้ผลสำหรับฉัน จึงเป็นขนาดเล็ก ๆ ชีวิตที่เปลี่ยนแปลง;)
SAS

75

ไปงานเลี้ยงสาย แต่คำตอบที่ยอมรับไม่ได้อธิบายว่าเหตุใดจึงไม่มีข้อผิดพลาดปรากฏขึ้น และเนื่องจากนี่เป็นสิ่งที่ผู้มาใหม่ Postgres มักจะสะดุดฉันจึงอยากเพิ่มสิ่งนั้น


TL / TR: จบคำสั่ง SQL ของคุณด้วย ;


เนื่องจากcreatedb databaseไม่ได้ลงท้ายด้วยการ; psqlคิดว่าคำสั่งนั้นยังไม่เสร็จสิ้นและรอการป้อนข้อมูลเพิ่มเติม นี่คือการแสดงโดยการเปลี่ยนแปลงรวดเร็วจากการpostgres=# postgres-#การเปลี่ยนแปลงที่ลึกซึ้งมากที่ฉันต้องการpsqlจะทำแตกต่างออกไป ("โดดเด่น" มากกว่า)

โดยการป้อนคำสั่ง meta-command คำสั่ง\listSQL "ปัจจุบัน" จะถูก "ยกเลิก" โดยไม่ต้องดำเนินการ

หากcreatedbสิ้นสุดด้วย;ผลลัพธ์จะเป็น:

postgres => createdb foobar;
ERROR: ข้อผิดพลาดทางไวยากรณ์ที่หรือใกล้กับ "createdb"
บรรทัดที่ 1: createdb foobar;
        ^
postgres =>

แสดงให้เห็นชัดเจนว่ามีบางอย่างผิดปกติ


4
ว้าวนี่เป็นเรื่องละเอียดอ่อน แต่ร้ายแรงจริงๆ ฉันมีปัญหานี้มาระยะหนึ่งแล้ว ครั้งแรกที่คุณเรียกใช้คำสั่งด้วยอัฒภาคคุณจะได้รับข้อผิดพลาดเนื่องจากcreatedbไม่ถูกต้อง แต่แล้วการทำซ้ำคำสั่งเดียวกันแน่นอนกับcreate databaseแทนcreatedbพร้อมกับอัฒภาคทำงานอย่างสมบูรณ์แบบ
Glen Selle

1
@Helsing: นั่นคือสิ่งที่ฉันเขียนฉันเพิ่งอธิบายว่าทำไมไม่มีข้อความแสดงข้อผิดพลาดแม้ว่ามันจะไม่ถูกต้อง
a_horse_with_no_name

@a_horse_with_no_name เออฉันเข้าใจจุดประสงค์ของคุณผิด เพิ่มคะแนนคำตอบของคุณด้วย
Helsing

3

ฉันตกอยู่ในสถานการณ์นี้เมื่อไม่นานมานี้ ในกรณีที่มีคนอื่นประสบปัญหานี้เมื่อพิจารณาจากพรอมต์คำสั่งแสดงว่าpostgres-#คุณสามารถดำเนินการคำสั่ง createdb ที่รอดำเนินการได้โดยเพียงพิมพ์;และปุ่มย้อนกลับ


1

สร้างฐานข้อมูลใหม่ใน PostgreSQL นั้นง่ายมากรันคำสั่งนี้บน Linux (ตัวอย่าง CentOS 7):

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

0

ใช้โหนดเทอร์มินัลฉันต้องเรียกใช้:

psql -U postgres 

[ป้อนรหัสผ่านของคุณ]

แล้ว ...

CREATE DATABASE dbadmin;

สิ่งที่ทำให้สับสนคือฉันป้อนคำสั่งเดียวกันนี้ก่อนหน้านี้และไม่ได้ผล หลังจากออกจากระบบและกลับเข้าสู่ระบบแล้วฉันสามารถใช้คำสั่งมาตรฐานนี้ได้จากเอกสารประกอบ: https://www.postgresql.org/docs/10/tutorial-createdb.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.