Postgresql не створює базу даних з “createdb” як суперкористувача, але не видає помилок [дублікат]


100

Я працюю зі свіжою установкою 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

Помилок немає, але таблиця не створюється. Якісь ідеї?


Відповіді:


208

createdbце утиліта командного рядка, яку ви можете запускати з bash, а не з psql. Щоб створити базу даних з psql , скористайтеся create databaseтвердженням так:

create database [databasename];

Примітка: обов’язково завжди закінчуйте свої оператори SQL з ;


35
Дякую, я зараз ляпну себе. :)
Damien Roche

Звичайно. Легкі бали;) Потрібно почекати ще 7 хвилин (мабуть). Знову дякую.
Damien Roche

35
не забудьте додати крапку з комою наприкінці ..;
Тімоті Далтон,

4
що напівколін для перемоги!
Майкл

1
Дякую! крапка з комою зробила для мене роботу. настільки крихітний, але життя змінюється;)
sas

75

Пізно на вечірку, але прийнята відповідь не пояснює, чому не відображається помилка. І оскільки це щось, на що часто натрапляють новачки Postgres, я хотів додати це.


TL / TR: завжди закінчуйте свої оператори SQL з ;


Оскільки createdb databaseне закінчувалося з, ; psqlвважає, що оператор не закінчений, і чекає додаткових введень. На це вказує підказка про зміну з postgres=#на postgres-#. Надзвичайно тонка зміна, яку я хотів psqlби, зробила б інакше (більш "помітно").

Ввівши мета-команду, \list"поточний" оператор SQL "переривається", не виконуючи його.

Якби закінчення createdbзакінчувалося ;результатом, це було б:

postgres => createdb foobar;
ПОМИЛКА: синтаксична помилка біля або біля "createdb"
РЯДК 1: створенийb фобобар;
        ^
postgres =>

Явно показуючи, що щось не так.


3
Ого, це справді тонко, але смертельно. Я мав це питання досить давно. Під час першого запуску команди з крапкою з комою ви отримаєте помилку, оскільки createdbвона недійсна. Але тоді повторення тієї самої команди create databaseзамість createdbкрапки з крапкою, а також відмінно працює.
Глен Селле

1
@Helsing: ось що я писав, я просто пояснив, чому не було повідомлення про помилку, хоча воно є недійсним
a_horse_with_no_name

@a_horse_with_no_name Так, я неправильно зрозумів вашу мету. Проголосував і за вашу відповідь.
Гельсінг,

3

Я був у цій ситуації не так давно. Якщо хтось інший зазнає цього, враховуючи, що командний рядок показує, що postgres-#ви можете виконати очікувану команду createdb, просто ввівши ;та клавішу повернення.



0

За допомогою терміналу вузла мені довелося запустити:

psql -U postgres 

[введіть ваш пароль]

тоді ...

CREATE DATABASE dbadmin;

Збиває з пантелику те, що я вводив ці самі команди раніше, і це не спрацьовувало. Лише після виходу та повторного входу я зміг використати цю стандартну команду з документації: https://www.postgresql.org/docs/10/tutorial-createdb.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.