Sepertinya saya tidak dapat menemukan dokumentasi yang menggambarkan format valid dari nama skema PostgreSQL. Saya tahu bahwa nama skema tidak dapat:
- mulai dengan angka
- punya ruang
- dimulai dari
pg_
Apa lagi? Di mana saya harus mencari?
Sepertinya saya tidak dapat menemukan dokumentasi yang menggambarkan format valid dari nama skema PostgreSQL. Saya tahu bahwa nama skema tidak dapat:
pg_
Apa lagi? Di mana saya harus mencari?
Jawaban:
Per dokumentasi yang bagus , saya pikir ini mungkin yang Anda cari.
Pengidentifikasi SQL dan kata-kata kunci harus dimulai dengan huruf (az, tetapi juga huruf dengan tanda diakritik dan huruf non-Latin) atau garis bawah (_). Karakter selanjutnya dalam pengidentifikasi atau kata kunci dapat berupa huruf, garis bawah, digit (0-9), atau tanda dolar ($). Perhatikan bahwa tanda dolar tidak diperbolehkan dalam pengidentifikasi sesuai dengan surat standar SQL, sehingga penggunaannya mungkin membuat aplikasi kurang portabel ...
pg_
garis bawah untuk link yang, seperti Nathan C disebutkan .
Menurut dokumentasi , itu juga tidak dapat mulai dengan pg_
seperti yang disediakan. Selain itu tampilannya cukup unik.
this-is schema
dan itu masih akan menjadi nama skema yang tidak valid.
Jawaban yang benar adalah jawaban yang diberikan oleh para gadis. Namun, saya ingin menunjukkan bahwa PostgreSQL memiliki aturan pengenal yang dikutip yang mungkin perlu Anda ingat. "Pengidentifikasi yang dikutip dapat berisi karakter apa pun, kecuali karakter dengan kode nol. (Untuk memasukkan tanda kutip ganda, tulis dua tanda kutip ganda.)" ... Ada juga beberapa batasan pada kasus yang mungkin ingin Anda lihat.
Jadi, jika Anda akan mengutip pengidentifikasi Anda, maka Anda dapat menggunakan karakter apa pun yang Anda inginkan (dengan pengecualian \ 0). Tetapi jika Anda tidak mengutip pengidentifikasi Anda, Anda harus mengikuti aturan yang diuraikan di halaman itu.
Saya ingin menunjukkan ini terutama karena itu telah menggigit saya sebelumnya, terutama aturan mengenai kasus dalam pengidentifikasi yang tidak dikutip (dan nama skema dianggap sebagai pengidentifikasi).
MEMPERBARUI:
Sebagai contoh (tidak khusus berlaku untuk pengidentifikasi skema, tetapi juga berlaku untuk mereka):
DROP TABLE "tbluser"; -- assuming it exists
DROP TABLE "TBLUSER"; -- assuming it exists; incidentally, they are two different tables
CREATE TABLE "TBLUSER" ( username text );
INSERT INTO "TBLUSER" VALUES ( 'joe' );
SELECT * FROM TBLUSER; -- this returns an error that the tbluser relation does not exist
SELECT * FROM "TBLUSER"; -- works fine
Ini mungkin perilaku yang diharapkan bagi mereka yang berpengalaman dengan PostgreSQL (dan mungkin standar SQL), tetapi seseorang yang baru mengenal PG dan berasal dari sudut pandang server basis data lain (SQL Server atau Oracle misalnya) mungkin bertabrakan dengan perilaku ini dan bertanya-tanya mengapa tabel yang baru mereka buat hilang.
Mungkin beberapa manual merekomendasikan untuk tidak menggunakan pengenal yang dikutip, tetapi faktanya adalah pengenal yang dikutip tersedia untuk digunakan dan dapat digunakan dan selanjutnya, banyak paket menjadikannya kebijakan untuk selalu menggunakan pengenal yang dikutip saat membuat dan mengakses hubungan yang tidak seluruhnya huruf kecil, misalnya, PGAdmin III.
Misalnya, ini adalah skrip yang dihasilkan oleh PGAdmin III saat membuat tabel melalui UI:
CREATE TABLE public."TBLUSER"
(
username text
)
WITH (
OIDS = FALSE
)
;
Oleh karena itu, satu-satunya cara pengguna dapat mengakses tabel ini dalam kueri adalah dengan merujuk ke pengenal yang dikutip, yaitu "TBLUSER"
,. Mencoba mengakses tabel ini dalam kueri dengan pengenal yang tidak dikutip akan mengakibatkan kegagalan untuk menemukan hubungan, yaitu TBLUSER
,.