PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Имена на таблици в Postgresql и unicode:Защо не мога да избера името на таблицата от информационната схема, когато съдържа unicode знаци?

Изглежда като грешка, може би в regclass или нещо свързано с него:

# create table pinkƒpink1 (id serial);
NOTICE:  CREATE TABLE will create implicit sequence "pink?pink1_id_seq" for serial column "pink?pink1.id"
CREATE TABLE
# select 'pinkƒpink1'::name;
    name    
------------
 pinkƒpink1
(1 row)

# select 'pinkƒpink1'::regclass;
  regclass   
-------------
 "pinkpink1"
(1 row)

# select relname from pg_class where oid = 'pinkƒpink1'::regclass;
  relname  
-----------
 pinkpink1

# select relname from pg_class where relname = 'pinkƒpink1'::name;
 relname 
---------
(0 rows)

# select relname from pg_class where relname = 'pinkpink1';
 relname 
---------
(0 rows)

(Моята система е OSX Lion с всичко utf8, в случай че има значение.)

За заобиколно решение можете да го прехвърлите към ::regclass както е направено по-горе (този, който намери таблицата). Обърнете внимание, че кастингът към ::regclass ще доведе до грешка, ако таблицата не съществува, така че кодирайте това съответно.

По молба на Крейг:

# SELECT current_setting('server_encoding') AS server_encoding, current_setting('client_encoding') AS client_encoding, version();
 server_encoding | client_encoding |                                                              version                                                              
-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------------
 UTF8            | UTF8            | PostgreSQL 9.2.4 on x86_64-apple-darwin11.4.2, compiled by Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn), 64-bit
(1 row)

И според Ервин:

# SELECT name, setting FROM pg_settings WHERE  name IN ('lc_collate','lc_ctype','client_encoding','server_encoding');
      name       |   setting   
-----------------+-------------
 client_encoding | UTF8
 lc_collate      | en_US.UTF-8
 lc_ctype        | en_US.UTF-8
 server_encoding | UTF8
(4 rows)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Низови литерали и escape знаци в postgresql

  2. Действието на Debezium Heartbeat не се задейства

  3. PostgreSQL схеми/пространства от имена с Django

  4. Изпълнявайте отложен тригер само веднъж на ред в PostgreSQL

  5. Как да прехвърля json масив към текстов масив?