PostgreSQL ERROR: 42P01: relation “[Table]” does not exist

前端 未结 3 1676
灰色年华
灰色年华 2021-02-13 17:27

I\'m having this strange problem using PostgreSQL 9.3 with tables that are created using qoutes. For instance, if I create a table using qoutes:

create table \"T         


        
相关标签:
3条回答
  • 2021-02-13 18:16

    While using npg package as your data store ORM you are expecting the ORM framework (Entity Framework in our case) to generate the sql statement you might face a PostgreSQL exception the relation 'Table Name' does not exist

    Either the table is not created or the generated SQL statement is missing something. Try to debug using visual studio you will see that the schema name is not leading the table name

    SELECT "ID", "Name", "CreatedBy", "CreatedDate" 
    FROM "TestTable"; 
    

    while PostgreSQL is expecting the schema name. Resolution is in the DBContext class override the OnModelCreating method and add modelBuilder.HasDefaultSchema("SchemaName"); and execute the base constructor which should look like the following

    protected override void OnModelCreating(ModelBuilder modelBuilder)   {             
      modelBuilder.HasDefaultSchema("PartyDataManager");                  
      base.OnModelCreating(modelBuilder);         
    }
    
    0 讨论(0)
  • 2021-02-13 18:28

    A string function used to suitably quote identifiers in an SQL statement string is quote_ident(), which references a good example (used in conjunction with related quote_literal()).

    To use your example, and mix in other results:

    select
       quote_ident(table_schema) as table_schema,
       quote_ident(table_name) as table_name
    ...
    
     table_schema |    table_name
    --------------+------------------
     ...
     public       | good_name
     public       | "table"
     public       | some_table
     public       | "something else"
     public       | "Tom's work"
     public       | "TEST"
     ...
    
    0 讨论(0)
  • 2021-02-13 18:29

    you have two choices: - no quotes: then everything will automatically be lowercase and non-case-sensitive - with quotes: from now on everything is case sensitive.

    i would highly recommend to NOT use quotes and make PostgreSQL behave non case sensitive. it makes life so much easier. once you get into quoting you got to use it EVERYWHERE as PostgreSQL will start to be very precise.

    some example:

       TEST = test       <-- non case sensitive
       "Test" <> Test    <-- first is precise, second one is turned to lower case
       "Test" = "Test"   <-- will work
       "test" = TEST     <-- should work; but you are just lucky.
    

    really try to avoid this kind of trickery at any cost. stay with 7 bit ascii for object names.

    0 讨论(0)
提交回复
热议问题